diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index 0649844562..6b8ccad3b7 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -497,6 +497,8 @@ static void gtk_notebook_menu_switch_page (GtkWidget *widget, /*** GtkNotebook Menu Functions ***/ static void gtk_notebook_menu_item_create (GtkNotebook *notebook, GList *list); +static void gtk_notebook_menu_item_recreate (GtkNotebook *notebook, + GList *list); static void gtk_notebook_menu_label_unparent (GtkWidget *widget, gpointer data); static void gtk_notebook_menu_detacher (GtkWidget *widget, @@ -5481,6 +5483,7 @@ gtk_notebook_menu_switch_page (GtkWidget *widget, /* Private GtkNotebook Menu Functions: * * gtk_notebook_menu_item_create + * gtk_notebook_menu_item_recreate * gtk_notebook_menu_label_unparent * gtk_notebook_menu_detacher */ @@ -5514,6 +5517,19 @@ gtk_notebook_menu_item_create (GtkNotebook *notebook, gtk_widget_show (menu_item); } +static void +gtk_notebook_menu_item_recreate (GtkNotebook *notebook, + GList *list) +{ + GtkNotebookPrivate *priv = notebook->priv; + GtkNotebookPage *page = list->data; + GtkWidget *menu_item = gtk_widget_get_parent (page->menu_label); + + gtk_container_remove (GTK_CONTAINER (menu_item), page->menu_label); + gtk_container_remove (GTK_CONTAINER (priv->menu), menu_item); + gtk_notebook_menu_item_create (notebook, list); +} + static void gtk_notebook_menu_label_unparent (GtkWidget *widget, gpointer data) @@ -6476,7 +6492,6 @@ gtk_notebook_set_tab_label (GtkNotebook *notebook, if (page->tab_label == tab_label) return; - gtk_notebook_remove_tab_label (notebook, page); if (tab_label) @@ -6516,6 +6531,9 @@ gtk_notebook_set_tab_label (GtkNotebook *notebook, gtk_widget_queue_resize (GTK_WIDGET (notebook)); } + if (priv->menu) + gtk_notebook_menu_item_recreate (notebook, list); + child_notify (notebook, child, "tab-label"); } @@ -6720,14 +6738,7 @@ gtk_notebook_child_reordered (GtkNotebook *notebook, list = g_list_find (priv->children, page); if (priv->menu) - { - GtkWidget *menu_item; - - menu_item = gtk_widget_get_parent (page->menu_label); - gtk_container_remove (GTK_CONTAINER (menu_item), page->menu_label); - gtk_container_remove (GTK_CONTAINER (priv->menu), menu_item); - gtk_notebook_menu_item_create (notebook, list); - } + gtk_notebook_menu_item_recreate (notebook, list); if (list->prev) sibling = gtk_widget_get_css_node (GTK_NOTEBOOK_PAGE (list->prev)->tab_widget);