GtkFileChooserButton: Don't update icon/label so often
authorTimm Bäder <mail@baedert.org>
Thu, 16 Jul 2015 19:47:13 +0000 (21:47 +0200)
committerTimm Bäder <mail@baedert.org>
Fri, 17 Jul 2015 03:36:44 +0000 (05:36 +0200)
They were updated in style-changed, causing the label to get set to
(None), then to the actual file name again a frame later, both of the
updates cause the GtkFileChooserButton to resize, possibly to the
minimal width, causing the layout to jump. Fix this by only updating
icon/label in style-updated when the icon theme actually changed, which
is the only case we care about here.

https://bugzilla.gnome.org/show_bug.cgi?id=752509

gtk/gtkfilechooserbutton.c

index b81e076e52dd8b18895c0430b7a8c892bdcb907a..ad3d136bed2978097c9cbdb50c3907b09ebf26dc 100644 (file)
@@ -55,7 +55,8 @@
 #include "gtktypebuiltins.h"
 #include "gtkprivate.h"
 #include "gtksettings.h"
-
+#include "gtkstylecontextprivate.h"
+#include "gtkbitmaskprivate.h"
 
 /**
  * SECTION:gtkfilechooserbutton
@@ -1473,7 +1474,14 @@ gtk_file_chooser_button_style_updated (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_file_chooser_button_parent_class)->style_updated (widget);
 
   if (gtk_widget_has_screen (widget))
-    change_icon_theme (GTK_FILE_CHOOSER_BUTTON (widget));
+    {
+      /* We need to update the icon surface, but only in case
+       * the icon theme really changed. */
+      GtkStyleContext *context = gtk_widget_get_style_context (widget);
+      const GtkBitmask *changes = _gtk_style_context_get_changes (context);
+      if (!changes || _gtk_bitmask_get (changes, GTK_CSS_PROPERTY_ICON_THEME))
+        change_icon_theme (GTK_FILE_CHOOSER_BUTTON (widget));
+    }
 }
 
 static void