[gtk/state-saving: 2/14] range: Add default state saving
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/state-saving: 2/14] range: Add default state saving
- Date: Thu, 3 Jun 2021 14:09:33 +0000 (UTC)
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]