X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6abf7b639c8f6827c7784d5707ea4733a375d4eb..8a07956565ddccd1720abf4e510945593128d774:/src/gtk/mdi.cpp?ds=sidebyside diff --git a/src/gtk/mdi.cpp b/src/gtk/mdi.cpp index 1a3c3f570d..760a4ac4ef 100644 --- a/src/gtk/mdi.cpp +++ b/src/gtk/mdi.cpp @@ -27,10 +27,7 @@ extern "C" { static void -gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), - GtkNotebookPage *page, - gint WXUNUSED(page_num), - wxMDIParentFrame *parent ) +switch_page(GtkNotebook* widget, GtkNotebookPage*, guint page_num, wxMDIParentFrame* parent) { // send deactivate event to old child @@ -49,6 +46,7 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), return; child = NULL; + GtkWidget* page = gtk_notebook_get_nth_page(widget, page_num); wxWindowList::compatibility_iterator node = client_window->GetChildren().GetFirst(); while ( node ) @@ -58,7 +56,7 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), // child_frame can be NULL when this is called from dtor, probably // because g_signal_connect (m_widget, "switch_page", (see below) // isn't deleted early enough - if ( child_frame && child_frame->m_page == page ) + if (child_frame && child_frame->m_widget == page) { child = child_frame; break; @@ -114,7 +112,7 @@ void wxMDIParentFrame::OnInternalIdle() if (m_justInserted) { GtkNotebook *notebook = GTK_NOTEBOOK(m_clientWindow->m_widget); - gtk_notebook_set_current_page( notebook, g_list_length( notebook->children ) - 1 ); + gtk_notebook_set_current_page(notebook, -1); /* need to set the menubar of the child */ wxMDIChildFrame *active_child_frame = GetActiveChild(); @@ -220,7 +218,7 @@ wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const gint i = gtk_notebook_get_current_page( notebook ); if (i < 0) return NULL; - GtkNotebookPage* page = (GtkNotebookPage*) (g_list_nth(notebook->children,i)->data); + GtkWidget* page = gtk_notebook_get_nth_page(notebook, i); if (!page) return NULL; wxWindowList::compatibility_iterator node = m_clientWindow->GetChildren().GetFirst(); @@ -234,7 +232,7 @@ wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const if (!child_frame) return NULL; - if (child_frame->m_page == page) + if (child_frame->m_widget == page) return child_frame; node = node->GetNext(); @@ -269,7 +267,6 @@ END_EVENT_TABLE() void wxMDIChildFrame::Init() { m_menuBar = NULL; - m_page = NULL; } bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, @@ -391,9 +388,7 @@ wxMDIClientWindow::~wxMDIClientWindow() // a call to gtk_mdi_page_change_callback with an invalid parent // (because gtk_mdi_page_change_callback expects a wxMDIClientWindow but // at that point of the dtor chain we are a simple wxWindow!) - g_signal_handlers_disconnect_by_func(m_widget, - (gpointer)gtk_mdi_page_change_callback, - GetParent()); + g_signal_handlers_disconnect_by_func(m_widget, (void*)switch_page, GetParent()); } bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) @@ -409,8 +404,7 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) m_widget = gtk_notebook_new(); g_object_ref(m_widget); - g_signal_connect (m_widget, "switch_page", - G_CALLBACK (gtk_mdi_page_change_callback), parent); + g_signal_connect(m_widget, "switch_page", G_CALLBACK(switch_page), parent); gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 ); @@ -437,8 +431,6 @@ void wxMDIClientWindow::AddChildGTK(wxWindowGTK* child) gtk_notebook_append_page( notebook, child->m_widget, label_widget ); - child_frame->m_page = (GtkNotebookPage*) (g_list_last(notebook->children)->data); - wxMDIParentFrame* parent_frame = static_cast(GetParent()); parent_frame->m_justInserted = true; }