Fix dismissing wxComboCtrl popup
When wxComboCtrl popup window is dismissed we need to hide it but calling ShowWindow() Win API directly from WM_ACTIVATE event handler causes some side effects like calling the handler again (under Win 7) or setting the focus improperly (under Win 10). To avoid these problems we should postpone hiding. Closes #18376.
This commit is contained in:
parent
bcca16911d
commit
881aabf63e
@ -549,6 +549,9 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#if USES_GENERICTLW
|
||||||
|
void HideOnDeactivate();
|
||||||
|
#endif // USES_GENERICTLW
|
||||||
wxComboCtrlBase* m_combo;
|
wxComboCtrlBase* m_combo;
|
||||||
|
|
||||||
wxDECLARE_EVENT_TABLE();
|
wxDECLARE_EVENT_TABLE();
|
||||||
@ -586,11 +589,23 @@ void wxComboPopupWindowEvtHandler::OnActivate( wxActivateEvent& event )
|
|||||||
if ( !event.GetActive() )
|
if ( !event.GetActive() )
|
||||||
{
|
{
|
||||||
// Tell combo control that we are dismissed.
|
// Tell combo control that we are dismissed.
|
||||||
m_combo->HidePopup(true);
|
#ifdef __WXMSW__
|
||||||
|
// We need to hide the popup but calling ::ShowWindow() directly from WM_ACTIVATE
|
||||||
|
// event handler causes some side effects like calling this handler again (Win 7)
|
||||||
|
// or setting the focus improperly (Win 10), so postpone it slightly.
|
||||||
|
// See wxPopupTransientWindow::MSWHandleMessage().
|
||||||
|
CallAfter(&wxComboPopupWindowEvtHandler::HideOnDeactivate);
|
||||||
|
#else
|
||||||
|
HideOnDeactivate();
|
||||||
|
#endif __WXMSW__ / !__WXMSW__
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxComboPopupWindowEvtHandler::HideOnDeactivate()
|
||||||
|
{
|
||||||
|
m_combo->HidePopup(true);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user