summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2018-10-16 20:52:04 +0000
committerMatthias Clasen <mclasen@redhat.com>2018-10-16 20:52:04 +0000
commitc0b5d66069dc5ab8633c5240dbac79b6b145c8d5 (patch)
tree5756fb97fc08d21d3f78aeaa0fa4a878db45eb16
parent2453e71fd3731d27d92f2d5d358bf84704ee8acb (diff)
parent80a3d7090a3dadef15f9c320373758429226525d (diff)
downloadgtk+-c0b5d66069dc5ab8633c5240dbac79b6b145c8d5.tar.gz
Merge branch '1397-gtknotebook-built-in-popup-menu-listing-tabs-doesn-t-use-tab-label-text-for-the-last-tab' into 'gtk-3-24'
Notebook: Ensure menu label updates with tab_label See merge request GNOME/gtk!385
-rw-r--r--gtk/gtknotebook.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index 3c5871e6af..51d9f5b65c 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -562,6 +562,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,
@@ -6335,6 +6337,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
*/
@@ -6369,6 +6372,19 @@ gtk_notebook_menu_item_create (GtkNotebook *notebook,
}
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)
{
@@ -7363,7 +7379,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)
@@ -7405,6 +7420,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);
+
gtk_widget_child_notify (child, "tab-label");
}
@@ -7609,14 +7627,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_css_gadget_get_node (GTK_NOTEBOOK_PAGE (list->prev)->gadget);