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

gtk/gtkpaned.c

index ef5a8830a92c8ade02e54c62e3a30e7c47de45c6..f1689302ca0defdc80732a15d990a2de41302389 100644 (file)
@@ -230,6 +230,7 @@ static void     gtk_paned_size_allocate         (GtkWidget           *widget,
 static void     gtk_paned_unrealize             (GtkWidget        *widget);
 static gboolean gtk_paned_focus                 (GtkWidget        *widget,
                                                 GtkDirectionType  direction);
+static void     gtk_paned_style_updated         (GtkWidget        *widget);
 static void     gtk_paned_add                   (GtkContainer     *container,
                                                 GtkWidget        *widget);
 static void     gtk_paned_remove                (GtkContainer     *container,
@@ -354,6 +355,7 @@ gtk_paned_class_init (GtkPanedClass *class)
   widget_class->size_allocate = gtk_paned_size_allocate;
   widget_class->unrealize = gtk_paned_unrealize;
   widget_class->focus = gtk_paned_focus;
+  widget_class->style_updated = gtk_paned_style_updated;
 
   container_class->add = gtk_paned_add;
   container_class->remove = gtk_paned_remove;
@@ -1462,6 +1464,29 @@ gtk_paned_focus (GtkWidget        *widget,
   return retval;
 }
 
+static void
+gtk_paned_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_paned_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);
+    }
+}
+
 /**
  * gtk_paned_new:
  * @orientation: the paned’s orientation.