From 18868d62a29e40215e1f069a7934054564989411 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 27 Feb 2008 14:49:46 +0000 Subject: [PATCH] don't hide the TLW being deleted unless there any other *visible* TLWs remaining (bug 1902632) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52142 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/toplvcmn.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/common/toplvcmn.cpp b/src/common/toplvcmn.cpp index 4e501fa79d..4f34b30e4d 100644 --- a/src/common/toplvcmn.cpp +++ b/src/common/toplvcmn.cpp @@ -118,15 +118,27 @@ bool wxTopLevelWindowBase::Destroy() if ( !wxPendingDelete.Member(this) ) wxPendingDelete.Append(this); - if (wxTopLevelWindows.GetCount() > 1) + // normally we want to hide the window immediately so that it doesn't get + // stuck on the screen while it's being destroyed, however we shouldn't + // hide the last visible window as then we might not get any idle events + // any more as no events will be sent to the hidden window and without idle + // events we won't prune wxPendingDelete list and the application won't + // terminate + const wxWindowList::const_iterator end = wxTopLevelWindows.end(); + for ( wxWindowList::const_iterator i = wxTopLevelWindows.begin(), + end = wxTopLevelWindows.end(); + i != end; + ++i ) { - // Hide it immediately. This should - // not be done if this TLW is the - // only one left since we then would - // risk not to get any idle events - // at all anymore during which we - // could delete any pending events. - Hide(); + wxTopLevelWindow * const win = wx_static_cast(wxTopLevelWindow *, *i); + if ( win != this && win->IsShown() ) + { + // there remains at least one other visible TLW, we can hide this + // one + Hide(); + + break; + } } return true; -- 2.45.2