scrolledwindow: Pick up gtk-overlay-scrolling changes on the fly
authorAlexander Mikhaylenko <alexm@gnome.org>
Sat, 16 Apr 2022 12:56:17 +0000 (16:56 +0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 21 Apr 2022 23:26:25 +0000 (19:26 -0400)
gtk/gtkscrolledwindow.c

index 230cd1d178b973bcde2075e6c2e73d6ea71b5fe2..77c5832e02465dfb647e9676e2843b07deea194a 100644 (file)
@@ -379,6 +379,7 @@ static void     gtk_scrolled_window_measure (GtkWidget      *widget,
 static void  gtk_scrolled_window_map                   (GtkWidget           *widget);
 static void  gtk_scrolled_window_unmap                 (GtkWidget           *widget);
 static void  gtk_scrolled_window_realize               (GtkWidget           *widget);
+static void  gtk_scrolled_window_unrealize             (GtkWidget           *widget);
 static void _gtk_scrolled_window_set_adjustment_value  (GtkScrolledWindow *scrolled_window,
                                                         GtkAdjustment     *adjustment,
                                                         double             value);
@@ -587,6 +588,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
   widget_class->map = gtk_scrolled_window_map;
   widget_class->unmap = gtk_scrolled_window_unmap;
   widget_class->realize = gtk_scrolled_window_realize;
+  widget_class->unrealize = gtk_scrolled_window_unrealize;
   widget_class->direction_changed = gtk_scrolled_window_direction_changed;
   widget_class->compute_expand = gtk_scrolled_window_compute_expand;
   widget_class->get_request_mode = gtk_scrolled_window_get_request_mode;
@@ -3849,15 +3851,32 @@ gtk_scrolled_window_realize (GtkWidget *widget)
 {
   GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
   GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
+  GtkSettings *settings;
 
   priv->hindicator.scrollbar = priv->hscrollbar;
   priv->vindicator.scrollbar = priv->vscrollbar;
 
   gtk_scrolled_window_sync_use_indicators (scrolled_window);
 
+  settings = gtk_widget_get_settings (widget);
+  g_signal_connect_swapped (settings, "notify::gtk-overlay-scrolling",
+                            G_CALLBACK (gtk_scrolled_window_update_use_indicators), widget);
+
   GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->realize (widget);
 }
 
+static void
+gtk_scrolled_window_unrealize (GtkWidget *widget)
+{
+  GtkSettings *settings;
+
+  settings = gtk_widget_get_settings (widget);
+
+  g_signal_handlers_disconnect_by_func (settings, gtk_scrolled_window_sync_use_indicators, widget);
+
+  GTK_WIDGET_CLASS (gtk_scrolled_window_parent_class)->unrealize (widget);
+}
+
 /**
  * gtk_scrolled_window_get_min_content_width: (attributes org.gtk.Method.get_property=min-content-width)
  * @scrolled_window: a `GtkScrolledWindow`