]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dlgcmn.cpp
removed extra semicolon
[wxWidgets.git] / src / common / dlgcmn.cpp
index ec5a528ad43d8e6cf87d8598771ae927f6e2fd14..92417acc0e216b8395b6ad3b78c9732c098ae6b7 100644 (file)
@@ -27,6 +27,7 @@
 #include "wx/dialog.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
     #include "wx/button.h"
     #include "wx/dcclient.h"
     #include "wx/intl.h"
@@ -51,12 +52,8 @@ BEGIN_EVENT_TABLE(wxDialogBase, wxTopLevelWindow)
     EVT_CLOSE(wxDialogBase::OnCloseWindow)
 
     EVT_CHAR_HOOK(wxDialogBase::OnCharHook)
-
-    WX_EVENT_TABLE_CONTROL_CONTAINER(wxDialogBase)
 END_EVENT_TABLE()
 
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase, wxTopLevelWindow)
-
 void wxDialogBase::Init()
 {
     m_returnCode = 0;
@@ -67,8 +64,17 @@ void wxDialogBase::Init()
     // dialog controls from reaching the parent frame which is usually
     // undesirable and can lead to unexpected and hard to find bugs
     SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS);
+}
+
+// helper of GetParentForModalDialog()
+static bool CanBeUsedAsParent(wxWindow *parent)
+{
+    extern WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete;
 
-    WX_INIT_CONTROL_CONTAINER();
+    return !parent->HasExtraStyle(wxWS_EX_TRANSIENT) &&
+                parent->IsShownOnScreen() &&
+                    !wxPendingDelete.Member(parent) &&
+                        !parent->IsBeingDeleted();
 }
 
 wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
@@ -78,10 +84,10 @@ wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
     if ( parent )
         parent = wxGetTopLevelParent(parent);
 
-    if ( !parent || parent->HasExtraStyle(wxWS_EX_TRANSIENT) )
+    if ( !parent || !CanBeUsedAsParent(parent) )
         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;