Hide combobox popup when it is hidden itself in wxMSW.

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
This commit is contained in:
Vadim Zeitlin 2012-04-05 18:40:20 +00:00
parent a24fb9f847
commit e911dd0a5a
2 changed files with 15 additions and 0 deletions

View 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;

View 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
// ----------------------------------------------------------------------------