]> git.saurik.com Git - wxWidgets.git/commitdiff
Focus event recursion fix
authorJulian Smart <julian@anthemion.co.uk>
Mon, 30 Oct 2006 07:12:10 +0000 (07:12 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Mon, 30 Oct 2006 07:12:10 +0000 (07:12 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42699 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/combocmn.cpp

index b09c6965b7895a0513c70dd6bd1366d6b322c317..7073151fa7bb3d9688e79aef3c1dad75ba4b6ed1 100644 (file)
@@ -1581,8 +1581,9 @@ void wxComboCtrlBase::OnFocusEvent( wxFocusEvent& event )
     if ( event.GetEventType() == wxEVT_SET_FOCUS )
     {
 #ifndef __WXMAC__
-        if ( m_text && m_text != ::wxWindow::FindFocus() )
-            m_text->SetFocus();
+        wxWindow* tc = GetTextCtrl();
+        if ( tc && tc != DoFindFocus() )
+            tc->SetFocus();
 #endif
     }
 
@@ -1777,6 +1778,8 @@ void wxComboCtrlBase::ShowPopup()
         popup = m_popup;
     }
 
+    winPopup->Enable();
+    
     wxASSERT( !m_popup || m_popup == popup ); // Consistency check.
 
     wxSize adjustedSize = m_popupInterface->GetAdjustedSize(widthPopup,
@@ -1923,20 +1926,13 @@ void wxComboCtrlBase::OnPopupDismiss()
     if ( IsPopupWindowState(Hidden) )
         return;
 
-    // NB: Focus setting is really funny, atleast on wxMSW. First of all,
-    //     we need to have SetFocus at the end. Otherwise wxTextCtrl may
-    //     freeze until focus goes somewhere else. Second, wxTreeCtrl as
-    //     popup, when dismissing, "steals" focus back to itself unless
-    //     SetFocus is called also here, exactly before m_popupWinState
-    //     is set to false. Which is truly weird since SetFocus is just
-    //     wxWindowMSW method and does not call event handler or anything like
-    //     that (ie. does not care about m_popupWinState).
-
-    SetFocus();
-
-    // This should preferably be set before focus.
+    // This must be set before focus - otherwise there will be recursive
+    // OnPopupDismisses.
     m_popupWinState = Hidden;
 
+    //SetFocus();
+    m_winPopup->Disable();
+
     // Inform popup control itself
     m_popupInterface->OnDismiss();