[ 1865141 ] wxNotebook::DeletePage can result in invalid page selection

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@51074 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2008-01-07 13:04:19 +00:00
parent 7f45b76c62
commit 462c155465

View File

@@ -563,7 +563,12 @@ bool wxNotebook::DeleteAllPages()
wxNotebookPage *wxNotebook::DoRemovePage( size_t page )
{
wxNotebookPage *client = wxNotebookBase::DoRemovePage(page);
// We cannot remove the page yet, as GTK sends the "switch_page"
// signal before it has removed the notebook-page from its
// corresponding list. Thus, if we were to remove the page from
// m_pages at this point, the two lists of pages would be out
// of sync during the PAGE_CHANGING/PAGE_CHANGED events.
wxNotebookPage *client = GetPage(page);
if ( !client )
return NULL;
@@ -572,13 +577,16 @@ wxNotebookPage *wxNotebook::DoRemovePage( size_t page )
// we don't need to unparent the client->m_widget; GTK+ will do
// that for us (and will throw a warning if we do it!)
gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page );
// It's safe to remove the page now.
wxASSERT_MSG(GetPage(page) == client, wxT("pages changed during delete"));
wxNotebookBase::DoRemovePage(page);
wxGtkNotebookPage* p = GetNotebookPage(page);
m_pagesData.DeleteObject(p);
delete p;
return client;
}