delete children in ~wxWindow dtor and not in the base class ~wxWindowNative as it's too late there (replaces patch 1082605; closes bug 1068000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30959 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -73,6 +73,8 @@ public:
|
|||||||
long style = 0,
|
long style = 0,
|
||||||
const wxString& name = wxPanelNameStr);
|
const wxString& name = wxPanelNameStr);
|
||||||
|
|
||||||
|
virtual ~wxWindow();
|
||||||
|
|
||||||
// background pixmap support
|
// background pixmap support
|
||||||
// -------------------------
|
// -------------------------
|
||||||
|
|
||||||
|
@@ -122,13 +122,13 @@ bool wxWindow::Create(wxWindow *parent,
|
|||||||
const wxString& name)
|
const wxString& name)
|
||||||
{
|
{
|
||||||
long actualStyle = style;
|
long actualStyle = style;
|
||||||
|
|
||||||
// FIXME: may need this on other platforms
|
// FIXME: may need this on other platforms
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
actualStyle &= ~wxVSCROLL;
|
actualStyle &= ~wxVSCROLL;
|
||||||
actualStyle &= ~wxHSCROLL;
|
actualStyle &= ~wxHSCROLL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// we add wxCLIP_CHILDREN to get the same ("natural") behaviour under MSW
|
// we add wxCLIP_CHILDREN to get the same ("natural") behaviour under MSW
|
||||||
// as under the other platforms
|
// as under the other platforms
|
||||||
if ( !wxWindowNative::Create(parent, id, pos, size,
|
if ( !wxWindowNative::Create(parent, id, pos, size,
|
||||||
@@ -169,7 +169,7 @@ bool wxWindow::Create(wxWindow *parent,
|
|||||||
SetInsertIntoMain( false );
|
SetInsertIntoMain( false );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_scrollbarHorz || m_scrollbarVert)
|
if (m_scrollbarHorz || m_scrollbarVert)
|
||||||
{
|
{
|
||||||
// position it/them
|
// position it/them
|
||||||
@@ -179,6 +179,18 @@ bool wxWindow::Create(wxWindow *parent,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxWindow::~wxWindow()
|
||||||
|
{
|
||||||
|
m_isBeingDeleted = true;
|
||||||
|
|
||||||
|
// we have to destroy our children before we're destroyed because our
|
||||||
|
// children suppose that we're of type wxWindow, not just wxWindowNative,
|
||||||
|
// and so bad things may happen if they're deleted from the base class dtor
|
||||||
|
// as by then we're not a wxWindow any longer and wxUniv-specific virtual
|
||||||
|
// functions can't be called
|
||||||
|
DestroyChildren();
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// background pixmap
|
// background pixmap
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -426,11 +438,11 @@ void wxWindow::Refresh(bool eraseBackground, const wxRect *rectClient)
|
|||||||
while ( node )
|
while ( node )
|
||||||
{
|
{
|
||||||
wxWindow *win = node->GetData();
|
wxWindow *win = node->GetData();
|
||||||
// Only refresh sub controls when it is visible
|
// Only refresh sub controls when it is visible
|
||||||
// and when it is in the update region.
|
// and when it is in the update region.
|
||||||
if(!win->IsKindOf(CLASSINFO(wxTopLevelWindow)) && win->IsShown() && wxRegion(rectWin).Contains(win->GetRect()) != wxOutRegion)
|
if(!win->IsKindOf(CLASSINFO(wxTopLevelWindow)) && win->IsShown() && wxRegion(rectWin).Contains(win->GetRect()) != wxOutRegion)
|
||||||
win->Refresh(eraseBackground, &rectWin);
|
win->Refresh(eraseBackground, &rectWin);
|
||||||
|
|
||||||
node = node->GetNext();
|
node = node->GetNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user