]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/combocmn.cpp
better fix for #11803, don't set iconized state for hidden window
[wxWidgets.git] / src / common / combocmn.cpp
index fe54d240198f846dd46cb82871ab658864f528ac..898cbfd08c69dd1d986c3df25c96026af4766250 100644 (file)
@@ -904,6 +904,7 @@ wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator)
         m_text->Create(this, wxID_ANY, m_valueString,
                        wxDefaultPosition, wxSize(10,-1),
                        style, validator);
+        m_text->SetHint(m_hintText);
     }
 }
 
@@ -913,13 +914,27 @@ void wxComboCtrlBase::OnThemeChange()
     // be the correct colour and themed brush.  Instead we'll use
     // wxSYS_COLOUR_WINDOW in the EVT_PAINT handler as needed.
 #ifndef __WXMAC__
+  #if defined(__WXMSW__) || defined(__WXGTK__)
+    wxVisualAttributes vattrs = wxComboBox::GetClassDefaultAttributes();
+  #else
+    wxVisualAttributes vattrs;
+    vattrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
+    vattrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+  #endif
+
+    // Only change the colours if application has not specified
+    // custom ones.
+    if ( !m_hasFgCol )
+    {
+        SetOwnForegroundColour(vattrs.colFg);
+        m_hasFgCol = false;
+    }
     if ( !m_hasBgCol )
     {
-        wxColour bgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
-        SetOwnBackgroundColour(bgCol);
+        SetOwnBackgroundColour(vattrs.colBg);
         m_hasBgCol = false;
     }
-#endif
+#endif // !__WXMAC__
 }
 
 wxComboCtrlBase::~wxComboCtrlBase()
@@ -1308,6 +1323,27 @@ wxValidator* wxComboCtrlBase::GetValidator()
 }
 #endif // wxUSE_VALIDATORS
 
+bool wxComboCtrlBase::SetForegroundColour(const wxColour& colour)
+{
+    if ( wxControl::SetForegroundColour(colour) )
+    {
+        if ( m_text )
+            m_text->SetForegroundColour(colour);
+        return true;
+    }
+    return false;
+}
+
+bool wxComboCtrlBase::SetBackgroundColour(const wxColour& colour)
+{
+    if ( wxControl::SetBackgroundColour(colour) )
+    {
+        if ( m_text )
+            m_text->SetBackgroundColour(colour);
+        return true;
+    }
+    return false;
+}
 // ----------------------------------------------------------------------------
 // painting
 // ----------------------------------------------------------------------------
@@ -1739,9 +1775,13 @@ void wxComboCtrlBase::OnKeyEvent(wxKeyEvent& event)
     }
     else // no popup
     {
-        if ( GetParent()->HasFlag(wxTAB_TRAVERSAL) &&
-             HandleAsNavigationKey(event) )
-            return;
+        wxWindow* mainCtrl = GetMainWindowOfCompositeControl();
+
+        if ( mainCtrl->GetParent()->HasFlag(wxTAB_TRAVERSAL) )
+        {
+            if ( mainCtrl->HandleAsNavigationKey(event) )
+                return;
+        }
 
         if ( IsKeyPopupToggle(event) )
         {
@@ -1986,7 +2026,8 @@ void wxComboCtrlBase::ShowPopup()
     //     that if transient popup is open, then tab traversal is to be ignored.
     //     However, I think this code would still be needed for cases where
     //     transient popup doesn't work yet (wxWinCE?).
-    wxWindow* parent = GetParent();
+    wxWindow* mainCtrl = GetMainWindowOfCompositeControl();
+    wxWindow* parent = mainCtrl->GetParent();
     int parentFlags = parent->GetWindowStyle();
     if ( parentFlags & wxTAB_TRAVERSAL )
     {
@@ -2504,4 +2545,19 @@ void wxComboCtrlBase::Undo()
         m_text->Undo();
 }
 
+bool wxComboCtrlBase::SetHint(const wxString& hint)
+{
+    m_hintText = hint;
+    bool res = true;
+    if ( m_text )
+        res = m_text->SetHint(hint);
+    Refresh();
+    return res;
+}
+
+wxString wxComboCtrlBase::GetHint() const
+{
+    return m_hintText;
+}
+
 #endif // wxUSE_COMBOCTRL