[gnome-control-center] online-accounts: Turn into a template class



commit 902ab4e44897b149f85607a1cc4c6259eddef4e1
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Nov 9 12:30:13 2016 -0200

    online-accounts: Turn into a template class
    
    https://bugzilla.gnome.org/show_bug.cgi?id=774222

 panels/online-accounts/cc-online-accounts-panel.c |   78 ++++++++-------------
 panels/online-accounts/online-accounts.ui         |   26 ++++---
 2 files changed, 45 insertions(+), 59 deletions(-)
---
diff --git a/panels/online-accounts/cc-online-accounts-panel.c 
b/panels/online-accounts/cc-online-accounts-panel.c
index 47cf97e..502ef94 100644
--- a/panels/online-accounts/cc-online-accounts-panel.c
+++ b/panels/online-accounts/cc-online-accounts-panel.c
@@ -39,12 +39,14 @@ struct _CcGoaPanel
 {
   CcPanel parent_instance;
 
-  GtkBuilder *builder;
-
   GoaClient *client;
 
   GoaPanelAccountsModel *accounts_model;
 
+  GtkWidget *accounts_notebook;
+  GtkWidget *accounts_tree_box;
+  GtkWidget *accounts_tree_label;
+  GtkWidget *add_account_button;
   GtkWidget *toolbar;
   GtkWidget *toolbar_add_button;
   GtkWidget *toolbar_remove_button;
@@ -185,7 +187,6 @@ cc_goa_panel_finalize (GObject *object)
 
   g_clear_object (&panel->accounts_model);
   g_clear_object (&panel->client);
-  g_clear_object (&panel->builder);
 
   G_OBJECT_CLASS (cc_goa_panel_parent_class)->finalize (object);
 }
@@ -193,8 +194,6 @@ cc_goa_panel_finalize (GObject *object)
 static void
 cc_goa_panel_init (CcGoaPanel *panel)
 {
-  GtkWidget *button;
-  GtkWidget *w;
   GError *error;
   GtkTreeViewColumn *column;
   GtkCellRenderer *renderer;
@@ -202,22 +201,11 @@ cc_goa_panel_init (CcGoaPanel *panel)
   GNetworkMonitor *monitor;
 
   g_resources_register (cc_online_accounts_get_resource ());
-  monitor = g_network_monitor_get_default();
 
-  panel->builder = gtk_builder_new ();
-  error = NULL;
-  if (gtk_builder_add_from_resource (panel->builder,
-                                     "/org/gnome/control-center/online-accounts/online-accounts.ui",
-                                     &error) == 0)
-    {
-      g_warning ("Error loading UI file: %s (%s, %d)",
-                 error->message, g_quark_to_string (error->domain), error->code);
-      g_error_free (error);
-      goto out;
-    }
+  gtk_widget_init_template (GTK_WIDGET (panel));
+
+  monitor = g_network_monitor_get_default();
 
-  panel->toolbar = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-tree-toolbar"));
-  panel->toolbar_add_button = GTK_WIDGET (gtk_builder_get_object (panel->builder, 
"accounts-tree-toolbutton-add"));
   g_object_bind_property (monitor, "network-available",
                           panel->toolbar_add_button, "sensitive",
                           G_BINDING_SYNC_CREATE);
@@ -225,29 +213,24 @@ cc_goa_panel_init (CcGoaPanel *panel)
                     "clicked",
                     G_CALLBACK (on_toolbar_add_button_clicked),
                     panel);
-  panel->toolbar_remove_button = GTK_WIDGET (gtk_builder_get_object (panel->builder, 
"accounts-tree-toolbutton-remove"));
   g_signal_connect (panel->toolbar_remove_button,
                     "clicked",
                     G_CALLBACK (on_toolbar_remove_button_clicked),
                     panel);
 
-  panel->accounts_treeview = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-tree-treeview"));
   g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (panel->accounts_treeview)),
                     "changed",
                     G_CALLBACK (on_tree_view_selection_changed),
                     panel);
 
-  button = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-button-add"));
   g_object_bind_property (monitor, "network-available",
-                          button, "sensitive",
+                          panel->add_account_button, "sensitive",
                           G_BINDING_SYNC_CREATE);
-  g_signal_connect (button,
+  g_signal_connect (panel->add_account_button,
                     "clicked",
                     G_CALLBACK (on_add_button_clicked),
                     panel);
 
-  panel->accounts_vbox = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-vbox"));
-
   /* TODO: probably want to avoid _sync() ... */
   error = NULL;
   panel->client = goa_client_new_sync (NULL /* GCancellable */, &error);
@@ -255,8 +238,7 @@ cc_goa_panel_init (CcGoaPanel *panel)
     {
       g_warning ("Error getting a GoaClient: %s (%s, %d)",
                  error->message, g_quark_to_string (error->domain), error->code);
-      w = GTK_WIDGET (gtk_builder_get_object (panel->builder, "goa-top-widget"));
-      gtk_widget_set_sensitive (w, FALSE);
+      gtk_widget_set_sensitive (GTK_WIDGET (panel), FALSE);
       g_error_free (error);
       goto out;
     }
@@ -312,9 +294,7 @@ cc_goa_panel_init (CcGoaPanel *panel)
                                     &iter);
 
  out:
-  w = GTK_WIDGET (gtk_builder_get_object (panel->builder, "goa-top-widget"));
-  gtk_container_add (GTK_CONTAINER (panel), w);
-  gtk_widget_show_all (w);
+  gtk_widget_show_all (GTK_WIDGET (panel));
 }
 
 static const char *
@@ -326,6 +306,7 @@ cc_goa_panel_get_help_uri (CcPanel *panel)
 static void
 cc_goa_panel_class_init (CcGoaPanelClass *klass)
 {
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   CcPanelClass *panel_class = CC_PANEL_CLASS (klass);
 
@@ -335,6 +316,18 @@ cc_goa_panel_class_init (CcGoaPanelClass *klass)
   object_class->finalize = cc_goa_panel_finalize;
 
   g_object_class_override_property (object_class, PROP_PARAMETERS, "parameters");
+
+  gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/control-center/online-accounts/online-accounts.ui");
+
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, accounts_notebook);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, accounts_treeview);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, accounts_tree_box);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, accounts_tree_label);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, accounts_vbox);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, add_account_button);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, toolbar);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, toolbar_add_button);
+  gtk_widget_class_bind_template_child (widget_class, CcGoaPanel, toolbar_remove_button);
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
@@ -343,24 +336,16 @@ static void
 show_page (CcGoaPanel *panel,
            gint page_num)
 {
-  GtkNotebook *notebook;
-  notebook = GTK_NOTEBOOK (gtk_builder_get_object (panel->builder, "accounts-notebook"));
-  gtk_notebook_set_current_page (notebook, page_num);
+  gtk_notebook_set_current_page (GTK_NOTEBOOK (panel->accounts_notebook), page_num);
 }
 
 static void
 show_page_nothing_selected (CcGoaPanel *panel)
 {
-  GtkWidget *box;
-  GtkWidget *label;
-
   show_page (panel, 0);
 
-  box = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-tree-box"));
-  gtk_widget_set_sensitive (box, FALSE);
-
-  label = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-tree-label"));
-  gtk_widget_show (label);
+  gtk_widget_set_sensitive (panel->accounts_tree_box, FALSE);
+  gtk_widget_show (panel->accounts_tree_label);
 }
 
 static void
@@ -369,8 +354,6 @@ show_page_account (CcGoaPanel  *panel,
 {
   GList *children;
   GList *l;
-  GtkWidget *box;
-  GtkWidget *label;
   GoaProvider *provider;
   GoaAccount *account;
   const gchar *provider_type;
@@ -378,11 +361,8 @@ show_page_account (CcGoaPanel  *panel,
   provider = NULL;
 
   show_page (panel, 1);
-  box = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-tree-box"));
-  gtk_widget_set_sensitive (box, TRUE);
-
-  label = GTK_WIDGET (gtk_builder_get_object (panel->builder, "accounts-tree-label"));
-  gtk_widget_hide (label);
+  gtk_widget_set_sensitive (panel->accounts_tree_box, TRUE);
+  gtk_widget_hide (panel->accounts_tree_label);
 
   /* Out with the old */
   children = gtk_container_get_children (GTK_CONTAINER (panel->accounts_vbox));
diff --git a/panels/online-accounts/online-accounts.ui b/panels/online-accounts/online-accounts.ui
index 3bba624..add2a99 100644
--- a/panels/online-accounts/online-accounts.ui
+++ b/panels/online-accounts/online-accounts.ui
@@ -1,7 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <!-- interface-requires gtk+ 3.0 -->
-      <object class="GtkBox" id="goa-top-widget">
+  <template class="CcGoaPanel" parent="CcPanel">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkBox">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="spacing">18</property>
@@ -12,7 +16,7 @@
         <property name="margin-top">6</property>
         <property name="margin-bottom">6</property>
         <child>
-          <object class="GtkBox" id="accounts-tree-box">
+          <object class="GtkBox" id="accounts_tree_box">
             <property name="visible">True</property>
             <property name="orientation">vertical</property>
             <property name="spacing">0</property>
@@ -27,7 +31,7 @@
                     <property name="shadow_type">in</property>
                     <property name="min_content_height">300</property>
                     <child>
-                      <object class="GtkTreeView" id="accounts-tree-treeview">
+                      <object class="GtkTreeView" id="accounts_treeview">
                         <property name="width_request">278</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
@@ -44,7 +48,7 @@
                   </object>
                 </child>
                 <child type="overlay">
-                  <object class="GtkLabel" id="accounts-tree-label">
+                  <object class="GtkLabel" id="accounts_tree_label">
                     <property name="can_focus">False</property>
                     <property name="no-show-all">True</property>
                     <property name="justify">center</property>
@@ -61,7 +65,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkToolbar" id="accounts-tree-toolbar">
+              <object class="GtkToolbar" id="toolbar">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="toolbar_style">icons</property>
@@ -70,7 +74,7 @@
                   <class name="inline-toolbar"/>
                 </style>
                 <child>
-                  <object class="GtkToolButton" id="accounts-tree-toolbutton-add">
+                  <object class="GtkToolButton" id="toolbar_add_button">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="use_action_appearance">False</property>
@@ -83,7 +87,7 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkToolButton" id="accounts-tree-toolbutton-remove">
+                  <object class="GtkToolButton" id="toolbar_remove_button">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="use_action_appearance">False</property>
@@ -105,7 +109,7 @@
           </object>
         </child>
         <child>
-          <object class="GtkNotebook" id="accounts-notebook">
+          <object class="GtkNotebook" id="accounts_notebook">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="show_tabs">False</property>
@@ -124,7 +128,7 @@
                     <property name="orientation">vertical</property>
                     <property name="spacing">6</property>
                     <child>
-                      <object class="GtkButton" id="accounts-button-add">
+                      <object class="GtkButton" id="add_account_button">
                         <property name="label" translatable="yes">Add an online account</property>
                         <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
@@ -175,7 +179,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkBox" id="accounts-vbox">
+              <object class="GtkBox" id="accounts_vbox">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="orientation">vertical</property>
@@ -216,4 +220,6 @@
           </packing>
         </child>
       </object>
+    </child>
+  </template>
 </interface>


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