GtkIcon: Pay attention to style changes
authorMatthias Clasen <mclasen@redhat.com>
Sat, 25 Jan 2020 01:53:16 +0000 (20:53 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 25 Jan 2020 01:55:42 +0000 (20:55 -0500)
Make GtkIcon redraw and resize when style changes
require it.

gtk/gtkicon.c

index 8661a6994380bbf12182e485d1e8e69bbb1a074e..3c33ba5bcfa023ca3eb19df305431dce421d35c0 100644 (file)
@@ -54,6 +54,29 @@ gtk_icon_snapshot (GtkWidget   *widget,
     gtk_css_style_snapshot_icon (style, snapshot, width, height);
 }
 
+static void
+gtk_icon_style_updated (GtkWidget *widget)
+{
+  GtkStyleContext *context;
+  GtkCssStyleChange *change = NULL;
+
+  context = gtk_widget_get_style_context (widget);
+  change = gtk_style_context_get_change (context);
+
+  GTK_WIDGET_CLASS (gtk_icon_parent_class)->style_updated (widget);
+
+  if (change == NULL ||
+      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_SIZE))
+    {
+      gtk_widget_queue_resize (widget);
+    }
+  else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_TEXTURE) ||
+           gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_REDRAW))
+    {
+      gtk_widget_queue_draw (widget);
+    }
+}
+
 static void
 gtk_icon_measure (GtkWidget      *widget,
                   GtkOrientation  orientation,
@@ -76,6 +99,7 @@ gtk_icon_class_init (GtkIconClass *klass)
 
   wclass->snapshot = gtk_icon_snapshot;
   wclass->measure = gtk_icon_measure;
+  wclass->style_updated = gtk_icon_style_updated;
 }
 
 static void