]> git.saurik.com Git - wxWidgets.git/commitdiff
Hide combobox popup when it is hidden itself in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 5 Apr 2012 18:40:20 +0000 (18:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 5 Apr 2012 18:40:20 +0000 (18:40 +0000)
It was possible to hide the main part of a combobox control but keep its popup
shown and this notably happened in wxGrid when TAB was pressed while a
wxChoice cell editor was dropped down.

Avoid this Cheshire combobox syndrome by explicitly dismissing the popup when
a combobox is hidden.

Closes #3113.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71104 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/choice.h
src/msw/choice.cpp

index ec7d272651105ed1230d639440615db08b3533d2..d17e1c655d03907037455e291360df9db8b18de2 100644 (file)
@@ -66,6 +66,8 @@ public:
                 const wxValidator& validator = wxDefaultValidator,
                 const wxString& name = wxChoiceNameStr);
 
+    virtual bool Show(bool show = true);
+
     virtual void SetLabel(const wxString& label);
 
     virtual unsigned int GetCount() const;
index 650dff48ce37d229f95351b0822be43396b8ee7d..0c0dbc10c7bb9e2423707ac252348ceff525d0c0 100644 (file)
@@ -646,6 +646,19 @@ void wxChoice::MSWDoPopupOrDismiss(bool show)
     ::SendMessage(GetHwnd(), CB_SHOWDROPDOWN, show, 0);
 }
 
+bool wxChoice::Show(bool show)
+{
+    if ( !wxChoiceBase::Show(show) )
+        return false;
+
+    // When hiding the combobox, we also need to hide its popup part as it
+    // doesn't happen automatically.
+    if ( !show && ::SendMessage(GetHwnd(), CB_GETDROPPEDSTATE, 0, 0) )
+        MSWDoPopupOrDismiss(false);
+
+    return true;
+}
+
 // ----------------------------------------------------------------------------
 // MSW message handlers
 // ----------------------------------------------------------------------------