test that the candidate parent window isn't being deleted (this would result in a crash later)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45604 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-04-23 20:07:26 +00:00
parent afde166737
commit 893f78406d

View 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 wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
{ {
// creating a parent-less modal dialog will result (under e.g. wxGTK2) // creating a parent-less modal dialog will result (under e.g. wxGTK2)
@@ -79,10 +90,10 @@ wxWindow *wxDialogBase::GetParentForModalDialog(wxWindow *parent) const
if ( parent ) if ( parent )
parent = wxGetTopLevelParent(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 // can't use this one, it's going to disappear
parent = NULL; parent = NULL;