[gnome-builder] preferences: Global search should clear per page search



commit 16e719f00430cd5fc60cdc960b172713ff89899b
Author: Dimitris Zenios <dimitris zenios gmail com>
Date:   Tue May 12 15:12:35 2015 +0300

    preferences: Global search should clear per page search

 src/preferences/gb-preferences-page-language.c |   12 +++++++++
 src/preferences/gb-preferences-page.c          |    9 +++++++
 src/preferences/gb-preferences-page.h          |   30 ++++++++++++++++--------
 src/preferences/gb-preferences-window.c        |   28 ++++++++++++++++++++++
 4 files changed, 69 insertions(+), 10 deletions(-)
---
diff --git a/src/preferences/gb-preferences-page-language.c b/src/preferences/gb-preferences-page-language.c
index dc919ff..542bf03 100644
--- a/src/preferences/gb-preferences-page-language.c
+++ b/src/preferences/gb-preferences-page-language.c
@@ -191,6 +191,16 @@ back_button_clicked_cb (GbPreferencesPageLanguage *page,
 }
 
 static void
+gb_preferences_page_language_clear_search (GbPreferencesPage *self)
+{
+  GbPreferencesPageLanguage *page = (GbPreferencesPageLanguage *)self;
+
+  g_assert (GB_IS_PREFERENCES_PAGE_LANGUAGE (page));
+
+  gtk_entry_set_text (GTK_ENTRY (page->search_entry), "");
+}
+
+static void
 gb_preferences_page_language_constructed (GObject *object)
 {
   GtkSourceLanguageManager *manager;
@@ -266,9 +276,11 @@ gb_preferences_page_language_class_init (GbPreferencesPageLanguageClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+  GbPreferencesPageClass *preferences_page_class = GB_PREFERENCES_PAGE_CLASS (klass);
 
   object_class->constructed = gb_preferences_page_language_constructed;
   object_class->finalize = gb_preferences_page_language_finalize;
+  preferences_page_class->clear_search = gb_preferences_page_language_clear_search;
 
   gtk_widget_class_set_template_from_resource (widget_class,
                                                "/org/gnome/builder/ui/gb-preferences-page-language.ui");
diff --git a/src/preferences/gb-preferences-page.c b/src/preferences/gb-preferences-page.c
index 47293e8..de3a416 100644
--- a/src/preferences/gb-preferences-page.c
+++ b/src/preferences/gb-preferences-page.c
@@ -185,6 +185,15 @@ gb_preferences_page_reset_title (GbPreferencesPage *page)
   gb_preferences_page_set_title (page, priv->default_title);
 }
 
+void
+gb_preferences_page_clear_search (GbPreferencesPage *page)
+{
+  g_return_if_fail (GB_IS_PREFERENCES_PAGE (page));
+
+  if (GB_PREFERENCES_PAGE_GET_CLASS (page)->clear_search)
+    return GB_PREFERENCES_PAGE_GET_CLASS (page)->clear_search (page);
+}
+
 static const gchar *
 gb_preferences_page_get_title (GbPreferencesPage *page)
 {
diff --git a/src/preferences/gb-preferences-page.h b/src/preferences/gb-preferences-page.h
index 4994615..d838d36 100644
--- a/src/preferences/gb-preferences-page.h
+++ b/src/preferences/gb-preferences-page.h
@@ -30,18 +30,28 @@ G_DECLARE_DERIVABLE_TYPE (GbPreferencesPage, gb_preferences_page, GB, PREFERENCE
 struct _GbPreferencesPageClass
 {
   GtkBinClass parent;
+
+  /**
+   * GbPreferencesPage::clear_search:
+   *
+   * Signal to let each preferences page clear
+   * its local search when a global search is
+   * about to be started
+   */
+  void (*clear_search) (GbPreferencesPage *self);
 };
 
-guint        gb_preferences_page_set_keywords            (GbPreferencesPage   *page,
-                                                          const gchar * const *keywords);
-void         gb_preferences_page_set_keywords_for_widget (GbPreferencesPage   *page,
-                                                          const gchar         *keywords,
-                                                          gpointer             first_widget,
-                                                          ...) G_GNUC_NULL_TERMINATED;
-void         gb_preferences_page_set_title               (GbPreferencesPage *page,
-                                                          const gchar       *title);
-void         gb_preferences_page_reset_title             (GbPreferencesPage *page);
-GtkWidget   *gb_preferences_page_get_controls            (GbPreferencesPage *page);
+guint                  gb_preferences_page_set_keywords            (GbPreferencesPage   *page,
+                                                                    const gchar * const *keywords);
+void                   gb_preferences_page_set_keywords_for_widget (GbPreferencesPage   *page,
+                                                                    const gchar         *keywords,
+                                                                    gpointer             first_widget,
+                                                                    ...) G_GNUC_NULL_TERMINATED;
+void                   gb_preferences_page_set_title               (GbPreferencesPage *page,
+                                                                    const gchar       *title);
+void                   gb_preferences_page_reset_title             (GbPreferencesPage *page);
+GtkWidget             *gb_preferences_page_get_controls            (GbPreferencesPage *page);
+void                   gb_preferences_page_clear_search            (GbPreferencesPage *page);
 
 G_END_DECLS
 
diff --git a/src/preferences/gb-preferences-window.c b/src/preferences/gb-preferences-window.c
index dddef77..f71f512 100644
--- a/src/preferences/gb-preferences-window.c
+++ b/src/preferences/gb-preferences-window.c
@@ -116,6 +116,28 @@ gb_preferences_window_close (GbPreferencesWindow *self)
 }
 
 static void
+gb_preferences_window_search_bar_enable_changed (GbPreferencesWindow *self,
+                                                 GParamSpec          *pspec,
+                                                 EggSearchBar        *search_bar)
+{
+  g_return_if_fail (GB_IS_PREFERENCES_WINDOW (self));
+  g_return_if_fail (EGG_IS_SEARCH_BAR (search_bar));
+
+  if(egg_search_bar_get_search_mode_enabled (search_bar))
+    {
+      GList *pages;
+      GList *iter;
+
+      pages = gtk_container_get_children (GTK_CONTAINER (self->stack));
+
+      for (iter = pages; iter; iter = iter->next)
+        gb_preferences_page_clear_search (GB_PREFERENCES_PAGE (iter->data));
+
+      g_list_free (pages);
+    }
+}
+
+static void
 gb_preferences_window_search_changed (GbPreferencesWindow *self,
                                       GtkSearchEntry      *entry)
 {
@@ -195,6 +217,12 @@ gb_preferences_window_constructed (GObject *object)
                            G_CALLBACK (gb_preferences_window_search_changed),
                            self,
                            G_CONNECT_SWAPPED);
+
+  g_signal_connect_object (self->search_bar,
+                           "notify::search-mode-enabled",
+                           G_CALLBACK (gb_preferences_window_search_bar_enable_changed),
+                           self,
+                           G_CONNECT_SWAPPED);
 }
 
 static void


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