Send wxEVT_DESTROY to children of wxAuiManager-associated window
This fixes a regression introduced in f646532889
(Call
wxAuiManager::UnInit() if associated frame is destroyed, 2020-07-18)
since when children of a window managed by wxAuiManager didn't receive
wxEVT_DESTROY any more because the manager intercepted it for its own
needs.
Closes #18938.
This commit is contained in:
@@ -3961,7 +3961,23 @@ void wxAuiManager::Repaint(wxDC* dc)
|
|||||||
void wxAuiManager::OnDestroy(wxWindowDestroyEvent& event)
|
void wxAuiManager::OnDestroy(wxWindowDestroyEvent& event)
|
||||||
{
|
{
|
||||||
if ( event.GetEventObject() == m_frame )
|
if ( event.GetEventObject() == m_frame )
|
||||||
|
{
|
||||||
|
wxWindow* const frame = m_frame;
|
||||||
|
|
||||||
UnInit();
|
UnInit();
|
||||||
|
|
||||||
|
// Just calling Skip() would be insufficient in this case, as by
|
||||||
|
// removing the event handler from the event handlers chain in UnInit()
|
||||||
|
// we'd still prevent the frame from getting this event, so we need to
|
||||||
|
// forward it to it manually. Note that this must be done after calling
|
||||||
|
// UnInit() to prevent infinite recursion.
|
||||||
|
if ( frame )
|
||||||
|
frame->ProcessWindowEventLocally(event);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxAuiManager::OnPaint(wxPaintEvent& WXUNUSED(event))
|
void wxAuiManager::OnPaint(wxPaintEvent& WXUNUSED(event))
|
||||||
|
Reference in New Issue
Block a user