From 9c9cff0b45fbe6f00930cb4bac0d66567dada53f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 5 Dec 1998 23:08:37 +0000 Subject: [PATCH] corrected a crash in wxDialog::Show() which would happen if there was a 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 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index 8f5afe79e7..bad108e769 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -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(); -- 2.45.2