]> git.saurik.com Git - wxWidgets.git/commitdiff
test that the candidate parent window isn't being deleted (this would result in a...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 23 Apr 2007 20:07:26 +0000 (20:07 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 23 Apr 2007 20:07:26 +0000 (20:07 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45604 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/dlgcmn.cpp

index 7100e0fd7a70921ba148313b4e3cfd400ea50c7c..8430081563dd78102287bc3ce7bb9f90f03f240f 100644 (file)
@@ -72,6 +72,17 @@ void wxDialogBase::Init()
     WX_INIT_CONTROL_CONTAINER();
 }
 
     WX_INIT_CONTROL_CONTAINER();
 }
 
+// helper of GetParentForModalDialog()
+static bool CanBeUsedAsParent(wxWindow *parent)
+{
+    extern WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete;
+
+    return !parent->HasExtraStyle(wxWS_EX_TRANSIENT) &&
+                parent->IsShownOnScreen() &&
+                    !wxPendingDelete.Member(parent) &&
+                        parent->IsBeingDeleted();
+}
+
 wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
 {
     // creating a parent-less modal dialog will result (under e.g. wxGTK2)
 wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
 {
     // creating a parent-less modal dialog will result (under e.g. wxGTK2)
@@ -79,10 +90,10 @@ wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
     if ( parent )
         parent = wxGetTopLevelParent(parent);
 
     if ( parent )
         parent = wxGetTopLevelParent(parent);
 
-    if ( !parent || parent->HasExtraStyle(wxWS_EX_TRANSIENT) )
+    if ( !parent || !CanBeUsedAsParent(parent) )
         parent = wxTheApp->GetTopWindow();
 
         parent = wxTheApp->GetTopWindow();
 
-    if ( parent && parent->HasExtraStyle(wxWS_EX_TRANSIENT) )
+    if ( parent && !CanBeUsedAsParent(parent) )
     {
         // can't use this one, it's going to disappear
         parent = NULL;
     {
         // can't use this one, it's going to disappear
         parent = NULL;