]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/toplvcmn.cpp
remove duplicate wxTaskBarIconAreaBase::DoPopupMenu, extracting the one-line differen...
[wxWidgets.git] / src / common / toplvcmn.cpp
index 4e501fa79de3a11eecbc4a5dcec1a776783a6c55..bcfd5291052b5a4a9c9f030571e0aa8dbf299b5c 100644 (file)
@@ -118,15 +118,26 @@ 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
+    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;