From: Vadim Zeitlin Date: Wed, 6 Feb 2008 19:57:19 +0000 (+0000) Subject: correction after the previous commit which introduced bug 1888014 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/627c8d89939eda380f1cb21f6cfe3ff7e87a2d3a correction after the previous commit which introduced bug 1888014 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/button.cpp b/src/msw/button.cpp index 45f6b37795..9ccd939cc1 100644 --- a/src/msw/button.cpp +++ b/src/msw/button.cpp @@ -367,26 +367,32 @@ wxWindow *wxButton::SetDefault() return winOldDefault; } -// special version of wxGetTopLevelParent() which is safe to call when the -// parent is being destroyed: wxGetTopLevelParent() would just return NULL in -// this case because wxWindow version of IsTopLevel() is used when it's called -// during window destruction instead of wxTLW one, but we want to distinguish -// between these cases +// return the top level parent window if it's not being deleted yet, otherwise +// return NULL static wxTopLevelWindow *GetTLWParentIfNotBeingDeleted(wxWindow *win) { - for ( ; win; win = win->GetParent() ) + for ( ;; ) { - if ( win->IsTopLevel() ) + // IsTopLevel() will return false for a wxTLW being deleted, so we also + // need the parent test for this case + wxWindow * const parent = win->GetParent(); + if ( !parent || win->IsTopLevel() ) { if ( win->IsBeingDeleted() ) return NULL; + break; } + + win = parent; } wxASSERT_MSG( win, _T("button without top level parent?") ); - return wxDynamicCast(win, wxTopLevelWindow); + wxTopLevelWindow * const tlw = wxDynamicCast(win, wxTopLevelWindow); + wxASSERT_MSG( tlw, _T("logic error in GetTLWParentIfNotBeingDeleted()") ); + + return tlw; } // set this button as being currently default