From a1dfaddd014997e702b88d7bf2eb2e1abdda3c0b Mon Sep 17 00:00:00 2001
From: Bruce Cowan <bruce@bcowan.me.uk>
Date: Tue, 4 Feb 2020 22:03:49 +0000
Subject: [PATCH] Use GObject bind

---
 data/interface.ui      |  3 +--
 src/rugby-app-window.c | 15 ++++++---------
 2 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/data/interface.ui b/data/interface.ui
index dbfa66f..9c10b6b 100644
--- a/data/interface.ui
+++ b/data/interface.ui
@@ -64,12 +64,11 @@
           </object>
         </child>
         <child>
-          <object class="GtkSpinButton">
+          <object class="GtkSpinButton" id="scorespin">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="text" translatable="yes">0</property>
             <property name="adjustment">adjustment1</property>
-            <signal name="value-changed" handler="scorespin_value_changed_cb" swapped="no"/>
           </object>
           <packing>
             <property name="position">1</property>
diff --git a/src/rugby-app-window.c b/src/rugby-app-window.c
index 9200cda..ed8563d 100644
--- a/src/rugby-app-window.c
+++ b/src/rugby-app-window.c
@@ -16,19 +16,12 @@ struct _RugbyAppWindow
 
     RugbyListStore *store;
 
+    GtkWidget *scorespin;
     GtkWidget *listbox;
 };
 
 G_DEFINE_TYPE (RugbyAppWindow, rugby_app_window, GTK_TYPE_APPLICATION_WINDOW)
 
-static void
-scorespin_value_changed_cb (GtkSpinButton  *spin,
-                            RugbyAppWindow *self)
-{
-    int score = gtk_spin_button_get_value_as_int (spin);
-    rugby_list_store_set_score (self->store, score);
-}
-
 static GtkWidget *
 listbox_widget_func (gpointer item,
                      gpointer user_data)
@@ -49,6 +42,10 @@ rugby_app_window_init (RugbyAppWindow *self)
                              listbox_widget_func,
                              NULL,
                              NULL);
+
+  g_object_bind_property (self->scorespin, "value",
+                          self->store, "score",
+                          G_BINDING_DEFAULT);
 }
 
 static void
@@ -72,8 +69,8 @@ rugby_app_window_class_init (RugbyAppWindowClass *klass)
     gtk_widget_class_set_template_from_resource (widget_class,
                                                  "/uk/me/bcowan/rugby/interface.ui");
 
+    gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, scorespin);
     gtk_widget_class_bind_template_child (widget_class, RugbyAppWindow, listbox);
-    gtk_widget_class_bind_template_callback (widget_class, scorespin_value_changed_cb);
 }
 
 RugbyAppWindow *
-- 
GitLab