From ea928e42129e0f7b77712dc1d2bbe7208768a37b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 26 Mar 2011 17:00:36 +0100 Subject: [PATCH] notebook: Only reset style on tab labels when it actually changes --- gtk/gtknotebook.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index e4194dfd6a..896703696e 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -6308,6 +6308,9 @@ gtk_notebook_update_tab_states (GtkNotebook *notebook) { GtkNotebookPrivate *priv = notebook->priv; GList *list; + int pos; + + pos = gtk_widget_path_length (gtk_widget_get_path (GTK_WIDGET (notebook))) - 1; for (list = priv->children; list != NULL; list = list->next) { @@ -6315,12 +6318,21 @@ gtk_notebook_update_tab_states (GtkNotebook *notebook) if (page->tab_label) { + GtkRegionFlags current_flags; + if (page == priv->cur_page) gtk_widget_set_state_flags (page->tab_label, GTK_STATE_FLAG_ACTIVE, FALSE); else gtk_widget_unset_state_flags (page->tab_label, GTK_STATE_FLAG_ACTIVE); - gtk_widget_reset_style (page->tab_label); + /* FIXME: We should store these flags somewhere instead of poking + * the widget's path */ + if (!gtk_widget_path_iter_has_region (gtk_widget_get_path (page->tab_label), + pos, + GTK_STYLE_REGION_TAB, + ¤t_flags) + || current_flags != _gtk_notebook_get_tab_flags (notebook, page)) + gtk_widget_reset_style (page->tab_label); } } }