From: Julian Smart Date: Mon, 30 Oct 2006 07:12:10 +0000 (+0000) Subject: Focus event recursion fix X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9727e8a3b4e5eb8f7a3f2d102e0388c734a81619 Focus event recursion fix git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42699 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp index b09c6965b7..7073151fa7 100644 --- a/src/common/combocmn.cpp +++ b/src/common/combocmn.cpp @@ -1581,8 +1581,9 @@ void wxComboCtrlBase::OnFocusEvent( wxFocusEvent& event ) if ( event.GetEventType() == wxEVT_SET_FOCUS ) { #ifndef __WXMAC__ - if ( m_text && m_text != ::wxWindow::FindFocus() ) - m_text->SetFocus(); + wxWindow* tc = GetTextCtrl(); + if ( tc && tc != DoFindFocus() ) + tc->SetFocus(); #endif } @@ -1777,6 +1778,8 @@ void wxComboCtrlBase::ShowPopup() popup = m_popup; } + winPopup->Enable(); + wxASSERT( !m_popup || m_popup == popup ); // Consistency check. wxSize adjustedSize = m_popupInterface->GetAdjustedSize(widthPopup, @@ -1923,20 +1926,13 @@ void wxComboCtrlBase::OnPopupDismiss() if ( IsPopupWindowState(Hidden) ) return; - // NB: Focus setting is really funny, atleast on wxMSW. First of all, - // we need to have SetFocus at the end. Otherwise wxTextCtrl may - // freeze until focus goes somewhere else. Second, wxTreeCtrl as - // popup, when dismissing, "steals" focus back to itself unless - // SetFocus is called also here, exactly before m_popupWinState - // is set to false. Which is truly weird since SetFocus is just - // wxWindowMSW method and does not call event handler or anything like - // that (ie. does not care about m_popupWinState). - - SetFocus(); - - // This should preferably be set before focus. + // This must be set before focus - otherwise there will be recursive + // OnPopupDismisses. m_popupWinState = Hidden; + //SetFocus(); + m_winPopup->Disable(); + // Inform popup control itself m_popupInterface->OnDismiss();