[gnome-control-center] mouse: Make a GtkTemplate for the panel



commit 37e7fd6ada261c3f07e254f234b881f25e65094a
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Nov 9 12:02:08 2018 +1300

    mouse: Make a GtkTemplate for the panel

 panels/mouse/cc-mouse-panel.c    | 63 +++++++++++++++++-----------------------
 panels/mouse/cc-mouse-panel.ui   | 32 ++++++++++++++++++++
 panels/mouse/meson.build         |  1 +
 panels/mouse/mouse.gresource.xml |  1 +
 po/POTFILES.in                   |  3 +-
 5 files changed, 62 insertions(+), 38 deletions(-)
---
diff --git a/panels/mouse/cc-mouse-panel.c b/panels/mouse/cc-mouse-panel.c
index 5b44e270c..e28008d93 100644
--- a/panels/mouse/cc-mouse-panel.c
+++ b/panels/mouse/cc-mouse-panel.c
@@ -21,20 +21,21 @@
  *
  */
 
+#include <gtk/gtk.h>
+
 #include "cc-mouse-panel.h"
 #include "cc-mouse-resources.h"
-
 #include "gnome-mouse-properties.h"
 #include "gnome-mouse-test.h"
-#include <gtk/gtk.h>
-
-#include <glib/gi18n.h>
 
 struct _CcMousePanel
 {
-  CcPanel    parent_instance;
+  CcPanel            parent_instance;
 
-  GtkWidget *stack;
+  CcMouseProperties *mouse_properties;
+  CcMouseTest       *mouse_test;
+  GtkStack          *stack;
+  GtkButton         *test_button;
 };
 
 CC_PANEL_REGISTER (CcMousePanel, cc_mouse_panel)
@@ -52,67 +53,55 @@ cc_mouse_panel_get_help_uri (CcPanel *panel)
 }
 
 static void
-shell_test_button_toggled (GtkToggleButton *button, CcMousePanel *panel)
+test_button_toggled_cb (CcMousePanel *self)
 {
-  gboolean active;
-
-  active = gtk_toggle_button_get_active (button);
-  gtk_stack_set_visible_child_name (GTK_STACK (panel->stack), active ? "test_widget" : "prefs_widget");
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->test_button)))
+    gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->mouse_test));
+  else
+    gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->mouse_properties));
 }
 
 static void
 cc_mouse_panel_constructed (GObject *object)
 {
   CcMousePanel *self = CC_MOUSE_PANEL (object);
-  GtkWidget *button;
   CcShell *shell;
 
   G_OBJECT_CLASS (cc_mouse_panel_parent_class)->constructed (object);
 
   /* Add test area button to shell header. */
   shell = cc_panel_get_shell (CC_PANEL (self));
-
-  button = gtk_toggle_button_new_with_mnemonic (_("Test Your _Settings"));
-  gtk_style_context_add_class (gtk_widget_get_style_context (button),
-                               "text-button");
-  gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
-  gtk_widget_set_visible (button, TRUE);
-
-  cc_shell_embed_widget_in_header (shell, button, GTK_POS_RIGHT);
-
-  g_signal_connect (GTK_BUTTON (button), "toggled",
-                    G_CALLBACK (shell_test_button_toggled),
-                    self);
+  cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->test_button), GTK_POS_RIGHT);
 }
 
 static void
 cc_mouse_panel_init (CcMousePanel *self)
 {
-  GtkWidget *prefs_widget, *test_widget;
-
   g_resources_register (cc_mouse_get_resource ());
 
-  prefs_widget = cc_mouse_properties_new ();
-  gtk_widget_show (prefs_widget);
-  test_widget = cc_mouse_test_new ();
-  gtk_widget_show (test_widget);
-
-  self->stack = gtk_stack_new ();
-  gtk_widget_show (self->stack);
-  gtk_stack_add_named (GTK_STACK (self->stack), prefs_widget, "prefs_widget");
-  gtk_stack_add_named (GTK_STACK (self->stack), test_widget, "test_widget");
-
-  gtk_container_add (GTK_CONTAINER (self), self->stack);
+  cc_mouse_properties_get_type ();
+  cc_mouse_test_get_type ();
+  gtk_widget_init_template (GTK_WIDGET (self));
 }
 
 static void
 cc_mouse_panel_class_init (CcMousePanelClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
   CcPanelClass *panel_class = CC_PANEL_CLASS (klass);
 
   panel_class->get_help_uri = cc_mouse_panel_get_help_uri;
 
   object_class->dispose = cc_mouse_panel_dispose;
   object_class->constructed = cc_mouse_panel_constructed;
+
+  gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/control-center/mouse/cc-mouse-panel.ui");
+
+  gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_properties);
+  gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_test);
+  gtk_widget_class_bind_template_child (widget_class, CcMousePanel, stack);
+  gtk_widget_class_bind_template_child (widget_class, CcMousePanel, test_button);
+
+  gtk_widget_class_bind_template_callback (widget_class, test_button_toggled_cb);
 }
diff --git a/panels/mouse/cc-mouse-panel.ui b/panels/mouse/cc-mouse-panel.ui
new file mode 100644
index 000000000..be72e0ba0
--- /dev/null
+++ b/panels/mouse/cc-mouse-panel.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <template class="CcMousePanel" parent="CcPanel">
+    <property name="visible">True</property>
+    <child>
+      <object class="GtkStack" id="stack">
+        <property name="visible">True</property>
+        <child>
+          <object class="CcMouseProperties" id="mouse_properties">
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="CcMouseTest" id="mouse_test">
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+  <object class="GtkToggleButton" id="test_button">
+    <property name="visible">True</property>
+    <property name="use_underline">True</property>
+    <property name="valign">center</property>
+    <property name="label" translatable="yes">Test Your _Settings</property>
+    <signal name="toggled" handler="test_button_toggled_cb" object="CcMousePanel" swapped="yes"/>
+    <style>
+      <class name="text-button"/>
+    </style>
+  </object>
+</interface>
diff --git a/panels/mouse/meson.build b/panels/mouse/meson.build
index cf79fc784..8fa65b924 100644
--- a/panels/mouse/meson.build
+++ b/panels/mouse/meson.build
@@ -18,6 +18,7 @@ i18n.merge_file(
 )
 
 resource_data = files(
+  'cc-mouse-panel.ui',
   'gnome-mouse-properties.ui',
   'gnome-mouse-test.ui',
   'scroll-test-gegl.svg',
diff --git a/panels/mouse/mouse.gresource.xml b/panels/mouse/mouse.gresource.xml
index 2b3e6f772..c65783596 100644
--- a/panels/mouse/mouse.gresource.xml
+++ b/panels/mouse/mouse.gresource.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/gnome/control-center/mouse">
+    <file preprocess="xml-stripblanks">cc-mouse-panel.ui</file>
     <file preprocess="xml-stripblanks">gnome-mouse-properties.ui</file>
     <file preprocess="xml-stripblanks">gnome-mouse-test.ui</file>
     <file>scroll-test.svg</file>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4a75e2d0d..a87e72c6e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -60,7 +60,8 @@ panels/keyboard/cc-keyboard-shortcut-editor.c
 panels/keyboard/cc-keyboard-shortcut-editor.ui
 panels/keyboard/gnome-keyboard-panel.desktop.in.in
 panels/keyboard/keyboard-shortcuts.c
-panels/mouse/cc-mouse-panel.c
+panels/keyboard/shortcut-editor.ui
+panels/mouse/cc-mouse-panel.ui
 panels/mouse/gnome-mouse-panel.desktop.in.in
 panels/mouse/gnome-mouse-properties.c
 panels/mouse/gnome-mouse-properties.ui


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