]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/combocmn.cpp
Implement wxRendererMac::DrawItemSelectionRect and move the generic wxTreeCtrl to...
[wxWidgets.git] / src / common / combocmn.cpp
index b09c6965b7895a0513c70dd6bd1366d6b322c317..a633163d30719a911163b9f504190a44e03edbdd 100644 (file)
@@ -828,11 +828,8 @@ wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator)
             m_ignoreEvtText = 0;
 
         m_text = new wxTextCtrl(this, wxID_ANY, m_valueString,
-                                wxDefaultPosition, wxDefaultSize,
+                                wxDefaultPosition, wxSize(10,-1),
                                 style, validator);
-
-        // This is required for some platforms (GTK+ atleast)
-        m_text->SetSizeHints(2,4);
     }
 }
 
@@ -1241,7 +1238,7 @@ void wxComboCtrlBase::PrepareBackground( wxDC&, const wxRect&, int ) const
 }
 #endif
 
-void wxComboCtrlBase::DrawButton( wxDC& dc, const wxRect& rect, bool paintBg )
+void wxComboCtrlBase::DrawButton( wxDC& dc, const wxRect& rect, int paintBg )
 {
     int drawState = m_btnState;
 
@@ -1581,8 +1578,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 +1775,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 +1923,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();