[gtk/state-saving: 2/14] range: Add default state saving




commit 1962f535e8094fc8975d0c56265e035b032aeaad
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jun 2 21:47:50 2021 -0400

    range: Add default state saving
    
    Add default handlers for ::save/restore-state. All that is
    needed to make state saving work now is setting save-id.

 gtk/gtkrange.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
---
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 82d008f7a0..33a029e2c2 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -245,6 +245,12 @@ static gboolean      gtk_range_scroll_controller_scroll (GtkEventControllerScrol
 static void          gtk_range_set_orientation          (GtkRange       *range,
                                                          GtkOrientation  orientation);
 
+static gboolean      gtk_range_save_state               (GtkWidget    *range,
+                                                         GVariantDict *dict,
+                                                         gboolean     *save);
+static gboolean      gtk_range_restore_state            (GtkWidget    *range,
+                                                         GVariant     *data);
+
 G_DEFINE_TYPE_WITH_CODE (GtkRange, gtk_range, GTK_TYPE_WIDGET,
                          G_ADD_PRIVATE (GtkRange)
                          G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
@@ -271,6 +277,8 @@ gtk_range_class_init (GtkRangeClass *class)
   widget_class->size_allocate = gtk_range_size_allocate;
   widget_class->unmap = gtk_range_unmap;
   widget_class->direction_changed = gtk_range_direction_changed;
+  widget_class->save_state = gtk_range_save_state;
+  widget_class->restore_state = gtk_range_restore_state;
 
   class->move_slider = gtk_range_move_slider;
   class->change_value = gtk_range_real_change_value;
@@ -2859,6 +2867,29 @@ _gtk_range_get_stop_positions (GtkRange  *range,
   return priv->n_marks;
 }
 
+static gboolean
+gtk_range_save_state (GtkWidget    *range,
+                      GVariantDict *dict,
+                      gboolean     *save_children)
+{
+  g_variant_dict_insert (dict, "value", "d", gtk_range_get_value (GTK_RANGE (range)));
+  *save_children = FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+gtk_range_restore_state (GtkWidget *range,
+                         GVariant  *data)
+{
+  double value;
+
+  if (g_variant_lookup (data, "value", "d", &value))
+    gtk_range_set_value (GTK_RANGE (range), value);
+
+  return TRUE;
+}
+
 /**
  * gtk_range_set_round_digits: (attributes org.gtk.Method.set_property=round-digits)
  * @range: a `GtkRange`


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]