Make adjustment setters behave
authorMatthias Clasen <mclasen@redhat.com>
Fri, 31 Mar 2023 01:18:35 +0000 (21:18 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 31 Mar 2023 01:39:55 +0000 (21:39 -0400)
gtk/gtkrange.c
gtk/gtkscalebutton.c
gtk/gtkscrollbar.c
gtk/gtkscrolledwindow.c
gtk/gtkspinbutton.c

index bae4a2b79676cdaba51a1f88e58fe422f74f21a5..a51c7d447d552dbbbaabd424b73c5a16db106cc6 100644 (file)
@@ -376,7 +376,7 @@ gtk_range_class_init (GtkRangeClass *class)
   properties[PROP_ADJUSTMENT] =
       g_param_spec_object ("adjustment", NULL, NULL,
                            GTK_TYPE_ADJUSTMENT,
-                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT);
+                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * GtkRange:inverted: (attributes org.gtk.Property.get=gtk_range_get_inverted org.gtk.Property.set=gtk_range_set_inverted)
index 7b2c2a11a0d67d8ffe8d5b907174da06a37349c4..e1a78b1bfe88e2148e26937973b12d9f2ab1b007 100644 (file)
@@ -229,7 +229,7 @@ gtk_scale_button_class_init (GtkScaleButtonClass *klass)
                                    PROP_ADJUSTMENT,
                                    g_param_spec_object ("adjustment", NULL, NULL,
                                                         GTK_TYPE_ADJUSTMENT,
-                                                        GTK_PARAM_READWRITE));
+                                                        GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
 
   /**
    * GtkScaleButton:icons: (attributes org.gtk.Property.set=gtk_scale_button_set_icons)
index 20b49a78a210c2bb0f4aa6c68f08d6a257e42904..ec9702ae9cb6abfafcea65e8603f0f1949ab8b19 100644 (file)
@@ -218,7 +218,7 @@ gtk_scrollbar_class_init (GtkScrollbarClass *class)
   props[PROP_ADJUSTMENT] =
       g_param_spec_object ("adjustment", NULL, NULL,
                            GTK_TYPE_ADJUSTMENT,
-                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT);
+                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
 
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
@@ -310,6 +310,9 @@ gtk_scrollbar_set_adjustment (GtkScrollbar  *self,
   g_return_if_fail (adjustment == NULL || GTK_IS_ADJUSTMENT (adjustment));
 
   adj = gtk_range_get_adjustment (GTK_RANGE (priv->range));
+  if (adj == adjustment)
+    return;
+
   if (adj)
     {
       g_signal_handlers_disconnect_by_func (adj, gtk_scrollbar_adjustment_changed, self);
index 40e4379f694524d9d33b81b632245771bf07d7fb..b81777784b58ebee5022d871d8fb97a23220f48b 100644 (file)
@@ -587,7 +587,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
   properties[PROP_HADJUSTMENT] =
       g_param_spec_object ("hadjustment", NULL, NULL,
                            GTK_TYPE_ADJUSTMENT,
-                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT);
+                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * GtkScrolleWindow:vadjustment: (attributes org.gtk.Property.get=gtk_scrolled_window_get_vadjustment org.gtk.Property.set=gtk_scrolled_window_set_vadjustment)
@@ -597,7 +597,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
   properties[PROP_VADJUSTMENT] =
       g_param_spec_object ("vadjustment", NULL, NULL,
                            GTK_TYPE_ADJUSTMENT,
-                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT);
+                           GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * GtkScrolledWindow:hscrollbar-policy:
index e56265a15ba3712e075aecbf475a3739e29a08f2..d5a2e6c79880961c2eaf4adb931d0fa833dae1d5 100644 (file)
@@ -374,7 +374,7 @@ gtk_spin_button_class_init (GtkSpinButtonClass *class)
   spinbutton_props[PROP_ADJUSTMENT] =
     g_param_spec_object ("adjustment", NULL, NULL,
                          GTK_TYPE_ADJUSTMENT,
-                         GTK_PARAM_READWRITE);
+                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * GtkSpinButton:climb-rate: (attributes org.gtk.Property.get=gtk_spin_button_get_climb_rate org.gtk.Property.set=gtk_spin_button_set_climb_rate)
@@ -1860,6 +1860,8 @@ gtk_spin_button_set_adjustment (GtkSpinButton *spin_button,
 
   if (!adjustment)
     adjustment = gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
+  else if (spin_button->adjustment == adjustment)
+    return;
 
   gtk_spin_button_configure (spin_button,
                              adjustment,