]> git.saurik.com Git - wxWidgets.git/commitdiff
don't hide the TLW being deleted unless there any other *visible* TLWs remaining...
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Feb 2008 14:49:46 +0000 (14:49 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Feb 2008 14:49:46 +0000 (14:49 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52142 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/toplvcmn.cpp

index 4e501fa79de3a11eecbc4a5dcec1a776783a6c55..4f34b30e4dc56c31370ebb920fa65e8c834a2099 100644 (file)
@@ -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;