]> git.saurik.com Git - wxWidgets.git/commitdiff
corrected a crash in wxDialog::Show() which would happen if there was a
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 5 Dec 1998 23:08:37 +0000 (23:08 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 5 Dec 1998 23:08:37 +0000 (23:08 +0000)
window in "pending for delete" queue before the call to this function

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1115 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/dialog.cpp

index 8f5afe79e7df0e52e4e71b00f25ec5796d54eb1f..bad108e769b7dd7884f34f42741ff94e18dc4def 100644 (file)
@@ -309,7 +309,6 @@ bool wxDialog::Show(bool show)
     {
       m_hwndOldFocus = (WXHWND)::GetFocus();
 
-      wxList DisabledWindows;
       if (m_modalShowing)
       {
         BringWindowToTop((HWND) GetHWND());
@@ -325,6 +324,13 @@ bool wxDialog::Show(bool show)
           ::EnableWindow((HWND) box->GetHWND(), FALSE);
         node = node->Next();
       }
+
+      // if we don't do it, some window might be deleted while we have pointers
+      // to them in our disabledWindows list and the program will crash when it
+      // will try to reenable them after the modal dialog end
+      wxTheApp->DeletePendingObjects();
+      wxList disabledWindows;
+
       node = wxModelessWindows.First();
       while (node)
       {
@@ -332,7 +338,7 @@ bool wxDialog::Show(bool show)
         if (::IsWindowEnabled((HWND) win->GetHWND()))
         {
           ::EnableWindow((HWND) win->GetHWND(), FALSE);
-          DisabledWindows.Append(win);
+          disabledWindows.Append(win);
         }
         node = node->Next();
       }
@@ -371,7 +377,7 @@ bool wxDialog::Show(bool show)
          }
       }
       // dfgg: now must specifically re-enable all other app windows that we disabled earlier
-      node=DisabledWindows.First();
+      node=disabledWindows.First();
       while(node) {
         wxWindow* win = (wxWindow*) node->Data();
         HWND hWnd = (HWND) win->GetHWND();