]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/notebook.cpp
remove unused wxMenuBar::m_style
[wxWidgets.git] / src / gtk / notebook.cpp
index 2c8241b1494a319cdf9f4610b90c86d5241282ce..ee0dec46a74813e33941636d0251bc368afd2470 100644 (file)
@@ -169,9 +169,9 @@ static void wxInsertChildInNotebook(wxWindow* parent, wxWindow* child)
 // wxNotebook
 //-----------------------------------------------------------------------------
 
-IMPLEMENT_DYNAMIC_CLASS(wxNotebook,wxControl)
+IMPLEMENT_DYNAMIC_CLASS(wxNotebook,wxBookCtrlBase)
 
-BEGIN_EVENT_TABLE(wxNotebook, wxControl)
+BEGIN_EVENT_TABLE(wxNotebook, wxBookCtrlBase)
     EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
 END_EVENT_TABLE()
 
@@ -465,7 +465,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;
 
@@ -474,13 +479,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;
 }