diff --git a/include/wx/aui/framemanager.h b/include/wx/aui/framemanager.h index fa3b98dabd..f910101346 100644 --- a/include/wx/aui/framemanager.h +++ b/include/wx/aui/framemanager.h @@ -555,6 +555,7 @@ public: protected: // protected events + void OnDestroy(wxWindowDestroyEvent& evt); void OnPaint(wxPaintEvent& evt); void OnEraseBackground(wxEraseEvent& evt); void OnSize(wxSizeEvent& evt); diff --git a/src/aui/framemanager.cpp b/src/aui/framemanager.cpp index dda8873922..247ab756e2 100644 --- a/src/aui/framemanager.cpp +++ b/src/aui/framemanager.cpp @@ -593,6 +593,7 @@ bool wxAuiPaneInfo::IsValid() const wxBEGIN_EVENT_TABLE(wxAuiManager, wxEvtHandler) EVT_AUI_PANE_BUTTON(wxAuiManager::OnPaneButton) EVT_AUI_RENDER(wxAuiManager::OnRender) + EVT_WINDOW_DESTROY(wxAuiManager::OnDestroy) EVT_PAINT(wxAuiManager::OnPaint) EVT_ERASE_BACKGROUND(wxAuiManager::OnEraseBackground) EVT_SIZE(wxAuiManager::OnSize) @@ -914,6 +915,8 @@ void wxAuiManager::SetManagedWindow(wxWindow* wnd) { wxASSERT_MSG(wnd, wxT("specified window must be non-NULL")); + UnInit(); + m_frame = wnd; m_frame->PushEventHandler(this); @@ -958,6 +961,7 @@ void wxAuiManager::UnInit() if (m_frame) { m_frame->RemoveEventHandler(this); + m_frame = NULL; } } @@ -3951,6 +3955,12 @@ void wxAuiManager::Repaint(wxDC* dc) delete client_dc; } +void wxAuiManager::OnDestroy(wxWindowDestroyEvent& event) +{ + if ( event.GetEventObject() == m_frame ) + UnInit(); +} + void wxAuiManager::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(m_frame);