[gnome-control-center] window: Reorganize functions



commit a5d3af3a259c4ea9cceb47777790213406a565ff
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun Jan 21 09:46:12 2018 -0200

    window: Reorganize functions
    
    In an attempt to make the CcWindow code more organized and
    structured, this commit reorganizes the source code to match
    a recent pattern:
    
     * Structure declarations, G_DEFINE_TYPE
     * Function prototypes
     * Auxiliary methods
     * Callbacks
     * Vfunc overrides
     * class_init() + init()
     * Public API

 shell/cc-window.c |  555 +++++++++++++++++++++++++++-------------------------
 1 files changed, 288 insertions(+), 267 deletions(-)
---
diff --git a/shell/cc-window.c b/shell/cc-window.c
index 0c6be28..b3800ac 100644
--- a/shell/cc-window.c
+++ b/shell/cc-window.c
@@ -87,11 +87,32 @@ enum
   PROP_ACTIVE_PANEL
 };
 
-static gboolean cc_window_set_active_panel_from_id (CcShell      *shell,
-                                                    const gchar  *start_id,
-                                                    GVariant     *parameters,
-                                                    GError      **err);
+static void     panel_list_view_changed_cb  (CcPanelList  *panel_list,
+                                             GParamSpec   *pspec,
+                                             CcWindow     *self);
 
+static gboolean set_active_panel_from_id    (CcShell      *shell,
+                                             const gchar  *start_id,
+                                             GVariant     *parameters,
+                                             GError      **error);
+
+static void     show_panel_cb               (CcPanelList  *panel_list,
+                                             const gchar  *panel_id,
+                                             CcWindow     *self);
+
+static void     split_decorations_cb        (GtkSettings  *settings,
+                                             GParamSpec   *pspec,
+                                             CcWindow     *self);
+
+static gboolean window_key_press_event_cb   (GtkWidget    *win,
+                                             GdkEventKey  *event,
+                                             CcWindow     *self);
+
+static gboolean window_button_release_event_cb (GtkWidget      *win,
+                                                GdkEventButton *event,
+                                                CcWindow       *self);
+
+/* Auxiliary methods */
 static const gchar *
 get_icon_name_from_g_icon (GIcon *gicon)
 {
@@ -162,7 +183,7 @@ activate_panel (CcWindow    *self,
 }
 
 static void
-_shell_remove_all_custom_widgets (CcWindow *self)
+remove_all_custom_widgets (CcWindow *self)
 {
   GtkWidget *widget;
   guint i;
@@ -201,33 +222,6 @@ shell_show_overview_page (CcWindow *self)
   cc_panel_list_set_view (CC_PANEL_LIST (self->panel_list), CC_PANEL_LIST_MAIN);
 }
 
-void
-cc_window_set_overview_page (CcWindow *center)
-{
-  shell_show_overview_page (center);
-}
-
-void
-cc_window_set_search_item (CcWindow   *center,
-                           const char *search)
-{
-  shell_show_overview_page (center);
-  gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (center->search_bar), TRUE);
-  gtk_entry_set_text (GTK_ENTRY (center->search_entry), search);
-  gtk_editable_set_position (GTK_EDITABLE (center->search_entry), -1);
-}
-
-static void
-show_panel_cb (CcPanelList *panel_list,
-               const gchar *panel_id,
-               CcWindow    *self)
-{
-  if (panel_id)
-    cc_window_set_active_panel_from_id (CC_SHELL (self), panel_id, NULL, NULL);
-  else
-    shell_show_overview_page (self);
-}
-
 static void
 update_list_title (CcWindow *self)
 {
@@ -261,33 +255,6 @@ update_list_title (CcWindow *self)
 }
 
 static void
-panel_list_view_changed_cb (CcPanelList *panel_list,
-                            GParamSpec  *pspec,
-                            CcWindow    *self)
-{
-  gboolean is_main_view;
-
-  is_main_view = cc_panel_list_get_view (panel_list) == CC_PANEL_LIST_MAIN;
-
-  gtk_widget_set_visible (self->previous_button, !is_main_view);
-  gtk_widget_set_visible (self->search_button, is_main_view);
-
-  update_list_title (self);
-}
-
-static void
-search_entry_activate_cb (GtkEntry *entry,
-                          CcWindow *self)
-{
-  gboolean changed;
-
-  changed = cc_panel_list_activate (CC_PANEL_LIST (self->panel_list));
-
-  gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (self->search_bar), !changed);
-}
-
-
-static void
 setup_model (CcWindow *shell)
 {
   GtkTreeModel *model;
@@ -337,39 +304,12 @@ setup_model (CcWindow *shell)
     }
 }
 
-static void
-previous_button_clicked_cb (GtkButton *button,
-                            CcWindow  *shell)
-{
-  g_debug ("Num previous panels? %d", g_queue_get_length (shell->previous_panels));
-
-  /* When in search, simply unsed the search mode */
-  if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (shell->search_bar)))
-    gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (shell->search_bar), FALSE);
-  else
-    cc_panel_list_set_view (CC_PANEL_LIST (shell->panel_list), CC_PANEL_LIST_MAIN);
-}
-
-/* CcShell implementation */
-static void
-_shell_embed_widget_in_header (CcShell      *shell,
-                               GtkWidget    *widget)
-{
-  CcWindow *self = CC_WINDOW (shell);
-
-  /* add to header */
-  gtk_box_pack_end (GTK_BOX (self->top_right_box), widget, FALSE, FALSE, 0);
-  g_ptr_array_add (self->custom_widgets, g_object_ref (widget));
-
-  gtk_size_group_add_widget (self->header_sizegroup, widget);
-}
 
-/* CcShell implementation */
 static gboolean
-cc_window_set_active_panel_from_id (CcShell      *shell,
-                                    const gchar  *start_id,
-                                    GVariant     *parameters,
-                                    GError      **err)
+set_active_panel_from_id (CcShell      *shell,
+                          const gchar  *start_id,
+                          GVariant     *parameters,
+                          GError      **error)
 {
   GtkTreeIter iter;
   gboolean iter_valid;
@@ -386,7 +326,7 @@ cc_window_set_active_panel_from_id (CcShell      *shell,
     }
 
   /* clear any custom widgets */
-  _shell_remove_all_custom_widgets (self);
+  remove_all_custom_widgets (self);
 
   iter_valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter);
 
@@ -439,77 +379,9 @@ cc_window_set_active_panel_from_id (CcShell      *shell,
   return TRUE;
 }
 
-static gboolean
-_shell_set_active_panel_from_id (CcShell      *shell,
-                                 const gchar  *start_id,
-                                 GVariant     *parameters,
-                                 GError      **err)
-{
-  add_current_panel_to_history (shell, start_id);
-  return cc_window_set_active_panel_from_id (shell, start_id, parameters, err);
-}
-
-static GtkWidget *
-_shell_get_toplevel (CcShell *shell)
-{
-  return GTK_WIDGET (shell);
-}
-
-static void
-gdk_window_set_cb (GObject    *object,
-                   GParamSpec *pspec,
-                   CcWindow   *self)
-{
-  GdkWindow *window;
-  gchar *str;
-
-  if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
-    return;
-
-  window = gtk_widget_get_window (GTK_WIDGET (self));
-
-  if (!window)
-    return;
-
-  str = g_strdup_printf ("%u", (guint) GDK_WINDOW_XID (window));
-  g_setenv ("GNOME_CONTROL_CENTER_XID", str, TRUE);
-  g_free (str);
-}
-
-static gboolean
-window_map_event_cb (GtkWidget *widget,
-                     GdkEvent  *event,
-                     CcWindow  *self)
-{
-  /* If focus ends up in a category icon view one of the items is
-   * immediately selected which looks odd when we are starting up, so
-   * we explicitly unset the focus here. */
-  gtk_window_set_focus (GTK_WINDOW (self), NULL);
-  return GDK_EVENT_PROPAGATE;
-}
-
-/* GObject Implementation */
-static void
-cc_window_get_property (GObject    *object,
-                        guint       property_id,
-                        GValue     *value,
-                        GParamSpec *pspec)
-{
-  CcWindow *self = CC_WINDOW (object);
-
-  switch (property_id)
-    {
-    case PROP_ACTIVE_PANEL:
-      g_value_set_object (value, self->active_panel);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-    }
-}
-
 static void
 set_active_panel (CcWindow *shell,
-                  CcPanel *panel)
+                  CcPanel  *panel)
 {
   g_return_if_fail (CC_IS_SHELL (shell));
   g_return_if_fail (panel == NULL || CC_IS_PANEL (panel));
@@ -533,97 +405,149 @@ set_active_panel (CcWindow *shell,
 }
 
 static void
-cc_window_set_property (GObject      *object,
-                        guint         property_id,
-                        const GValue *value,
-                        GParamSpec   *pspec)
+create_window (CcWindow *self)
 {
-  CcWindow *shell = CC_WINDOW (object);
+  GtkSettings *settings;
+  AtkObject *accessible;
 
-  switch (property_id)
-    {
-    case PROP_ACTIVE_PANEL:
-      set_active_panel (shell, g_value_get_object (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-    }
+  /* previous button */
+  accessible = gtk_widget_get_accessible (self->previous_button);
+  atk_object_set_name (accessible, _("All Settings"));
+
+  gtk_window_set_titlebar (GTK_WINDOW (self), self->header_box);
+  gtk_widget_show_all (self->header_box);
+
+  /*
+   * We have to create the listbox here because declaring it in window.ui
+   * and letting GtkBuilder handle it would hit the bug where the focus is
+   * not tracked.
+   */
+  self->panel_list = cc_panel_list_new ();
+
+  g_signal_connect (self->panel_list, "show-panel", G_CALLBACK (show_panel_cb), self);
+  g_signal_connect (self->panel_list, "notify::view", G_CALLBACK (panel_list_view_changed_cb), self);
+
+  g_object_bind_property (self->search_bar,
+                          "search-mode-enabled",
+                          self->panel_list,
+                          "search-mode",
+                          G_BINDING_BIDIRECTIONAL);
+
+  g_object_bind_property (self->search_entry,
+                          "text",
+                          self->panel_list,
+                          "search-query",
+                          G_BINDING_DEFAULT);
+
+  gtk_container_add (GTK_CONTAINER (self->list_scrolled), self->panel_list);
+  gtk_widget_show (self->panel_list);
+
+  setup_model (self);
+
+  /* connect various signals */
+  gtk_widget_add_events (GTK_WIDGET (self), GDK_BUTTON_RELEASE_MASK);
+
+  g_signal_connect_after (self, "key_press_event", G_CALLBACK (window_key_press_event_cb), self);
+  g_signal_connect (self, "button-release-event", G_CALLBACK (window_button_release_event_cb), self);
+
+  /* handle decorations for the split headers. */
+  settings = gtk_settings_get_default ();
+  g_signal_connect (settings,
+                    "notify::gtk-decoration-layout",
+                    G_CALLBACK (split_decorations_cb),
+                    self);
+
+  split_decorations_cb (settings, NULL, self);
 }
 
+/* Callbacks */
 static void
-cc_window_dispose (GObject *object)
+show_panel_cb (CcPanelList *panel_list,
+               const gchar *panel_id,
+               CcWindow    *self)
 {
-  CcWindow *self = CC_WINDOW (object);
+  if (panel_id)
+    set_active_panel_from_id (CC_SHELL (self), panel_id, NULL, NULL);
+  else
+    shell_show_overview_page (self);
+}
 
-  g_clear_pointer (&self->current_panel_id, g_free);
-  g_clear_pointer (&self->custom_widgets, g_ptr_array_unref);
-  g_clear_object (&self->store);
-  g_clear_object (&self->active_panel);
+static void
+panel_list_view_changed_cb (CcPanelList *panel_list,
+                            GParamSpec  *pspec,
+                            CcWindow    *self)
+{
+  gboolean is_main_view;
 
-  G_OBJECT_CLASS (cc_window_parent_class)->dispose (object);
+  is_main_view = cc_panel_list_get_view (panel_list) == CC_PANEL_LIST_MAIN;
+
+  gtk_widget_set_visible (self->previous_button, !is_main_view);
+  gtk_widget_set_visible (self->search_button, is_main_view);
+
+  update_list_title (self);
 }
 
 static void
-cc_window_finalize (GObject *object)
+search_entry_activate_cb (GtkEntry *entry,
+                          CcWindow *self)
 {
-  CcWindow *self = CC_WINDOW (object);
+  gboolean changed;
 
-  if (self->previous_panels)
-    {
-      g_queue_free_full (self->previous_panels, g_free);
-      self->previous_panels = NULL;
-    }
+  changed = cc_panel_list_activate (CC_PANEL_LIST (self->panel_list));
 
-  G_OBJECT_CLASS (cc_window_parent_class)->finalize (object);
+  gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (self->search_bar), !changed);
 }
 
 static void
-cc_shell_iface_init (CcShellInterface *iface)
+previous_button_clicked_cb (GtkButton *button,
+                            CcWindow  *shell)
 {
-  iface->set_active_panel_from_id = _shell_set_active_panel_from_id;
-  iface->embed_widget_in_header = _shell_embed_widget_in_header;
-  iface->get_toplevel = _shell_get_toplevel;
+  g_debug ("Num previous panels? %d", g_queue_get_length (shell->previous_panels));
+
+  /* When in search, simply unsed the search mode */
+  if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (shell->search_bar)))
+    gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (shell->search_bar), FALSE);
+  else
+    cc_panel_list_set_view (CC_PANEL_LIST (shell->panel_list), CC_PANEL_LIST_MAIN);
 }
 
 static void
-cc_window_class_init (CcWindowClass *klass)
+gdk_window_set_cb (GObject    *object,
+                   GParamSpec *pspec,
+                   CcWindow   *self)
 {
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GdkWindow *window;
+  gchar *str;
 
-  object_class->get_property = cc_window_get_property;
-  object_class->set_property = cc_window_set_property;
-  object_class->dispose = cc_window_dispose;
-  object_class->finalize = cc_window_finalize;
+  if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
+    return;
 
-  g_object_class_override_property (object_class, PROP_ACTIVE_PANEL, "active-panel");
+  window = gtk_widget_get_window (GTK_WIDGET (self));
 
-  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/ControlCenter/gtk/window.ui");
+  if (!window)
+    return;
 
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, header);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, header_box);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, header_sizegroup);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, list_scrolled);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, lock_button);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, panel_headerbar);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, previous_button);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, search_bar);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, search_button);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, search_entry);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, stack);
-  gtk_widget_class_bind_template_child (widget_class, CcWindow, top_right_box);
+  str = g_strdup_printf ("%u", (guint) GDK_WINDOW_XID (window));
+  g_setenv ("GNOME_CONTROL_CENTER_XID", str, TRUE);
+  g_free (str);
+}
 
-  gtk_widget_class_bind_template_callback (widget_class, previous_button_clicked_cb);
-  gtk_widget_class_bind_template_callback (widget_class, gdk_window_set_cb);
-  gtk_widget_class_bind_template_callback (widget_class, search_entry_activate_cb);
-  gtk_widget_class_bind_template_callback (widget_class, update_list_title);
-  gtk_widget_class_bind_template_callback (widget_class, window_map_event_cb);
+static gboolean
+window_map_event_cb (GtkWidget *widget,
+                     GdkEvent  *event,
+                     CcWindow  *self)
+{
+  /* If focus ends up in a category icon view one of the items is
+   * immediately selected which looks odd when we are starting up, so
+   * we explicitly unset the focus here. */
+  gtk_window_set_focus (GTK_WINDOW (self), NULL);
+  return GDK_EVENT_PROPAGATE;
 }
 
 static gboolean
-window_button_release_event (GtkWidget      *win,
-                             GdkEventButton *event,
-                             CcWindow       *self)
+window_button_release_event_cb (GtkWidget      *win,
+                                GdkEventButton *event,
+                                CcWindow       *self)
 {
   /* back button */
   if (event->button == MOUSE_BACK_BUTTON)
@@ -632,9 +556,9 @@ window_button_release_event (GtkWidget      *win,
 }
 
 static gboolean
-window_key_press_event (GtkWidget   *win,
-                        GdkEventKey *event,
-                        CcWindow    *self)
+window_key_press_event_cb (GtkWidget   *win,
+                           GdkEventKey *event,
+                           CcWindow    *self)
 {
   GdkKeymap *keymap;
   gboolean retval;
@@ -699,9 +623,9 @@ window_key_press_event (GtkWidget   *win,
 }
 
 static void
-split_decorations (GtkSettings *settings,
-                   GParamSpec  *pspec,
-                   CcWindow    *self)
+split_decorations_cb (GtkSettings *settings,
+                      GParamSpec  *pspec,
+                      CcWindow    *self)
 {
   g_autofree gchar *layout = NULL;
   g_autofree gchar *layout_start = NULL;
@@ -722,60 +646,141 @@ split_decorations (GtkSettings *settings,
   gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (self->panel_headerbar), layout_end);
 }
 
+/* CcShell implementation */
+static gboolean
+cc_window_set_active_panel_from_id (CcShell      *shell,
+                                    const gchar  *start_id,
+                                    GVariant     *parameters,
+                                    GError      **error)
+{
+  add_current_panel_to_history (shell, start_id);
+  return set_active_panel_from_id (shell, start_id, parameters, error);
+}
+
 static void
-create_window (CcWindow *self)
+cc_window_embed_widget_in_header (CcShell   *shell,
+                                  GtkWidget *widget)
 {
-  GtkSettings *settings;
-  AtkObject *accessible;
+  CcWindow *self = CC_WINDOW (shell);
 
-  /* previous button */
-  accessible = gtk_widget_get_accessible (self->previous_button);
-  atk_object_set_name (accessible, _("All Settings"));
+  /* add to header */
+  gtk_box_pack_end (GTK_BOX (self->top_right_box), widget, FALSE, FALSE, 0);
+  g_ptr_array_add (self->custom_widgets, g_object_ref (widget));
 
-  gtk_window_set_titlebar (GTK_WINDOW (self), self->header_box);
-  gtk_widget_show_all (self->header_box);
+  gtk_size_group_add_widget (self->header_sizegroup, widget);
+}
 
-  /*
-   * We have to create the listbox here because declaring it in window.ui
-   * and letting GtkBuilder handle it would hit the bug where the focus is
-   * not tracked.
-   */
-  self->panel_list = cc_panel_list_new ();
+static GtkWidget *
+cc_window_get_toplevel (CcShell *shell)
+{
+  return GTK_WIDGET (shell);
+}
 
-  g_signal_connect (self->panel_list, "show-panel", G_CALLBACK (show_panel_cb), self);
-  g_signal_connect (self->panel_list, "notify::view", G_CALLBACK (panel_list_view_changed_cb), self);
+static void
+cc_shell_iface_init (CcShellInterface *iface)
+{
+  iface->set_active_panel_from_id = cc_window_set_active_panel_from_id;
+  iface->embed_widget_in_header = cc_window_embed_widget_in_header;
+  iface->get_toplevel = cc_window_get_toplevel;
+}
 
-  g_object_bind_property (self->search_bar,
-                          "search-mode-enabled",
-                          self->panel_list,
-                          "search-mode",
-                          G_BINDING_BIDIRECTIONAL);
+/* GObject Implementation */
+static void
+cc_window_get_property (GObject    *object,
+                        guint       property_id,
+                        GValue     *value,
+                        GParamSpec *pspec)
+{
+  CcWindow *self = CC_WINDOW (object);
 
-  g_object_bind_property (self->search_entry,
-                          "text",
-                          self->panel_list,
-                          "search-query",
-                          G_BINDING_DEFAULT);
+  switch (property_id)
+    {
+    case PROP_ACTIVE_PANEL:
+      g_value_set_object (value, self->active_panel);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
+}
 
-  gtk_container_add (GTK_CONTAINER (self->list_scrolled), self->panel_list);
-  gtk_widget_show (self->panel_list);
+static void
+cc_window_set_property (GObject      *object,
+                        guint         property_id,
+                        const GValue *value,
+                        GParamSpec   *pspec)
+{
+  CcWindow *shell = CC_WINDOW (object);
 
-  setup_model (self);
+  switch (property_id)
+    {
+    case PROP_ACTIVE_PANEL:
+      set_active_panel (shell, g_value_get_object (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
+}
 
-  /* connect various signals */
-  gtk_widget_add_events (GTK_WIDGET (self), GDK_BUTTON_RELEASE_MASK);
+static void
+cc_window_dispose (GObject *object)
+{
+  CcWindow *self = CC_WINDOW (object);
 
-  g_signal_connect_after (self, "key_press_event", G_CALLBACK (window_key_press_event), self);
-  g_signal_connect (self, "button-release-event", G_CALLBACK (window_button_release_event), self);
+  g_clear_pointer (&self->current_panel_id, g_free);
+  g_clear_pointer (&self->custom_widgets, g_ptr_array_unref);
+  g_clear_object (&self->store);
+  g_clear_object (&self->active_panel);
 
-  /* handle decorations for the split headers. */
-  settings = gtk_settings_get_default ();
-  g_signal_connect (settings,
-                    "notify::gtk-decoration-layout",
-                    G_CALLBACK (split_decorations),
-                    self);
+  G_OBJECT_CLASS (cc_window_parent_class)->dispose (object);
+}
 
-  split_decorations (settings, NULL, self);
+static void
+cc_window_finalize (GObject *object)
+{
+  CcWindow *self = CC_WINDOW (object);
+
+  if (self->previous_panels)
+    {
+      g_queue_free_full (self->previous_panels, g_free);
+      self->previous_panels = NULL;
+    }
+
+  G_OBJECT_CLASS (cc_window_parent_class)->finalize (object);
+}
+
+static void
+cc_window_class_init (CcWindowClass *klass)
+{
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->get_property = cc_window_get_property;
+  object_class->set_property = cc_window_set_property;
+  object_class->dispose = cc_window_dispose;
+  object_class->finalize = cc_window_finalize;
+
+  g_object_class_override_property (object_class, PROP_ACTIVE_PANEL, "active-panel");
+
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/ControlCenter/gtk/window.ui");
+
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, header);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, header_box);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, header_sizegroup);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, list_scrolled);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, lock_button);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, panel_headerbar);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, previous_button);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, search_bar);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, search_button);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, search_entry);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, stack);
+  gtk_widget_class_bind_template_child (widget_class, CcWindow, top_right_box);
+
+  gtk_widget_class_bind_template_callback (widget_class, previous_button_clicked_cb);
+  gtk_widget_class_bind_template_callback (widget_class, gdk_window_set_cb);
+  gtk_widget_class_bind_template_callback (widget_class, search_entry_activate_cb);
+  gtk_widget_class_bind_template_callback (widget_class, update_list_title);
+  gtk_widget_class_bind_template_callback (widget_class, window_map_event_cb);
 }
 
 static void
@@ -820,3 +825,19 @@ cc_window_show (CcWindow *center)
 {
   gtk_window_present (GTK_WINDOW (center));
 }
+
+void
+cc_window_set_overview_page (CcWindow *center)
+{
+  shell_show_overview_page (center);
+}
+
+void
+cc_window_set_search_item (CcWindow   *center,
+                           const char *search)
+{
+  shell_show_overview_page (center);
+  gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (center->search_bar), TRUE);
+  gtk_entry_set_text (GTK_ENTRY (center->search_entry), search);
+  gtk_editable_set_position (GTK_EDITABLE (center->search_entry), -1);
+}
\ No newline at end of file


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