#endif
+// Returns true if given popup window type can be classified as perfect
+// on this platform.
+static inline bool IsPopupWinTypePerfect( wxByte popupWinType )
+{
+#if POPUPWIN_IS_PERFECT && TRANSIENT_POPUPWIN_IS_PERFECT
+ wxUnusedVar(popupWinType);
+ return true;
+#else
+ return ( popupWinType == POPUPWIN_GENERICTLW
+ #if POPUPWIN_IS_PERFECT
+ || popupWinType == POPUPWIN_WXPOPUPWINDOW
+ #endif
+ #if TRANSIENT_POPUPWIN_IS_PERFECT
+ || popupWinType == POPUPWIN_WXPOPUPTRANSIENTWINDOW
+ #endif
+ );
+#endif
+}
+
+
//
// ** TODO **
// * wxComboPopupWindow for external use (ie. replace old wxUniv wxPopupComboWindow)
m_extRight = 0;
m_marginLeft = -1;
m_iFlags = 0;
+ m_textCtrlStyle = 0;
m_timeCanAcceptClick = 0;
m_resetFocus = false;
// not used by the wxPropertyGrid and therefore the tab is processed by
// looking at ancestors to see if they have wxTAB_TRAVERSAL. The
// navigation event is then sent to the wrong window.
- style |= wxTE_PROCESS_TAB;
+ style |= wxTE_PROCESS_TAB | m_textCtrlStyle;
if ( HasFlag(wxTE_PROCESS_ENTER) )
style |= wxTE_PROCESS_ENTER;
if ( m_popup )
m_popup->RemoveEventHandler(m_popupEvtHandler);
- delete m_popupEvtHandler;
+ wxDELETE(m_popupEvtHandler);
- delete m_popupInterface;
+ wxDELETE(m_popupInterface);
if ( m_winPopup )
{
m_winPopup->RemoveEventHandler(m_popupWinEvtHandler);
- delete m_popupWinEvtHandler;
- m_popupWinEvtHandler = NULL;
+ wxDELETE(m_popupWinEvtHandler);
m_winPopup->Destroy();
+ m_winPopup = NULL;
}
- m_popupEvtHandler = NULL;
- m_popupInterface = NULL;
- m_winPopup = NULL;
m_popup = NULL;
}
winPopup->Show();
m_popupWinState = Visible;
+
+ // If popup window was a generic top-level window, or the
+ // wxPopupWindow implemenation on this platform is classified as
+ // perfect, then we should be able to safely set focus to the popup
+ // control.
+ if ( IsPopupWinTypePerfect(m_popupWinType) )
+ m_popup->SetFocus();
}
else if ( IsPopupWindowState(Hidden) )
{
return DEFAULT_TEXT_INDENT;
}
+void wxComboCtrlBase::SetTextCtrlStyle( int style )
+{
+ m_textCtrlStyle = style;
+
+ if ( m_text )
+ m_text->SetWindowStyle(style);
+}
+
// ----------------------------------------------------------------------------
// methods forwarded to wxTextCtrl
// ----------------------------------------------------------------------------