From c05fac0adef0edb018de617e77c72e8abbaf6b86 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Wed, 14 Nov 2018 21:30:34 +0100 Subject: [PATCH] Don't re-enter wxComboCtrlBase::HidePopup Under wxMSW this method is re-entered due to triggering EVT_ACTIVATE when EVT_LEFT_UP is being already handled. We need to prevent this to avoid generating spurious EVT_TEXT events and raising errors on calling SetFocus(). Closes #18260. --- include/wx/combo.h | 2 +- src/common/combocmn.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/wx/combo.h b/include/wx/combo.h index 9e26ddd318..2ba9780a2d 100644 --- a/include/wx/combo.h +++ b/include/wx/combo.h @@ -455,7 +455,7 @@ public: enum { Hidden = 0, - //Closing = 1, + Closing = 1, Animating = 2, Visible = 3 }; diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp index b1e0645abd..faa28ab75a 100644 --- a/src/common/combocmn.cpp +++ b/src/common/combocmn.cpp @@ -2571,8 +2571,9 @@ void wxComboCtrlBase::OnPopupDismiss(bool generateEvent) void wxComboCtrlBase::HidePopup(bool generateEvent) { // Should be able to call this without popup interface - if ( IsPopupWindowState(Hidden) ) + if ( IsPopupWindowState(Hidden) || IsPopupWindowState(Closing) ) return; + m_popupWinState = Closing; // To prevent from reentering // transfer value and show it in textctrl, if any if ( !IsPopupWindowState(Animating) )