X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2229243bdf17485b33c15786124ab99366b83975..3ef595d5f879ec3ed4ef511445487261304313e2:/src/common/dlgcmn.cpp diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index ec5a528ad4..92417acc0e 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -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;