Don't use a destroy event handler to disconnect the native control's delegate as the destroy event propagates and can cause the TLW to remove its delegate at unexpected times, such as when a child control is destroyed but the TLW remains active. Instead, do it in response to the Destroy() call.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63051 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -103,6 +103,8 @@ public:
|
|||||||
virtual void HandleResized( double timestampsec );
|
virtual void HandleResized( double timestampsec );
|
||||||
virtual void HandleMoved( double timestampsec );
|
virtual void HandleMoved( double timestampsec );
|
||||||
virtual void HandleResizing( double timestampsec, wxRect* rect );
|
virtual void HandleResizing( double timestampsec, wxRect* rect );
|
||||||
|
|
||||||
|
virtual bool Destroy();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
@@ -117,7 +119,7 @@ protected:
|
|||||||
wxShowEffect effect,
|
wxShowEffect effect,
|
||||||
unsigned timeout);
|
unsigned timeout);
|
||||||
|
|
||||||
void OnWindowDestroy( wxWindowDestroyEvent &event);
|
virtual void WillBeDestroyed();
|
||||||
|
|
||||||
wxNonOwnedWindowImpl* m_nowpeer ;
|
wxNonOwnedWindowImpl* m_nowpeer ;
|
||||||
|
|
||||||
|
@@ -147,9 +147,6 @@ bool wxNonOwnedWindow::Create(wxWindow *parent,
|
|||||||
if ( parent )
|
if ( parent )
|
||||||
parent->AddChild(this);
|
parent->AddChild(this);
|
||||||
|
|
||||||
wxBIND_OR_CONNECT_HACK(this, wxEVT_DESTROY, wxWindowDestroyEventHandler,
|
|
||||||
wxNonOwnedWindow::OnWindowDestroy, this);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,10 +166,15 @@ wxNonOwnedWindow::~wxNonOwnedWindow()
|
|||||||
s_macDeactivateWindow = NULL;
|
s_macDeactivateWindow = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNonOwnedWindow::OnWindowDestroy( wxWindowDestroyEvent &event)
|
bool wxNonOwnedWindow::Destroy()
|
||||||
{
|
{
|
||||||
event.Skip();
|
WillBeDestroyed();
|
||||||
|
|
||||||
|
return wxWindow::Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNonOwnedWindow::WillBeDestroyed()
|
||||||
|
{
|
||||||
if ( m_nowpeer )
|
if ( m_nowpeer )
|
||||||
m_nowpeer->WillBeDestroyed();
|
m_nowpeer->WillBeDestroyed();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user