[gnome-builder] prefs: return to original page after clearning search query



commit 70c2a7a16c608af76eeb2485c9841e817c06aa1b
Author: Christian Hergert <christian hergert me>
Date:   Sun Feb 1 08:37:30 2015 +0100

    prefs: return to original page after clearning search query

 src/preferences/gb-preferences-window.c |   34 +++++++++++++++++++++++++++++-
 1 files changed, 32 insertions(+), 2 deletions(-)
---
diff --git a/src/preferences/gb-preferences-window.c b/src/preferences/gb-preferences-window.c
index 99040ca..20d8ab6 100644
--- a/src/preferences/gb-preferences-window.c
+++ b/src/preferences/gb-preferences-window.c
@@ -34,6 +34,7 @@
 
 struct _GbPreferencesWindowPrivate
 {
+  GtkWidget       *return_to_page;
   GtkHeaderBar    *right_header_bar;
   GtkSearchEntry  *search_entry;
   GtkSearchBar    *search_bar;
@@ -57,6 +58,22 @@ gb_preferences_window_new (void)
 }
 
 static void
+gb_preferences_window_notify_search_mode (GbPreferencesWindow *window,
+                                          GParamSpec          *pspec,
+                                          GtkSearchBar        *search_bar)
+{
+  g_return_if_fail (GB_IS_PREFERENCES_WINDOW (window));
+
+  if (!gtk_search_bar_get_search_mode (search_bar) &&
+      window->priv->return_to_page)
+    {
+      gtk_stack_set_visible_child (window->priv->stack,
+                                   window->priv->return_to_page);
+      window->priv->return_to_page = NULL;
+    }
+}
+
+static void
 gb_preferences_window_section_changed (GtkStack            *stack,
                                        GParamSpec          *pspec,
                                        GbPreferencesWindow *window)
@@ -187,7 +204,7 @@ gb_preferences_window_key_press_event (GtkWidget   *widget,
   ret = GTK_WIDGET_CLASS (gb_preferences_window_parent_class)->key_press_event (widget, event);
 
   /*
-   * Check of the focus widget is editable.
+   * Check if the focus widget is a GtkEditable.
    */
   editable = GTK_IS_EDITABLE (gtk_window_get_focus (GTK_WINDOW (widget)));
 
@@ -203,9 +220,16 @@ gb_preferences_window_key_press_event (GtkWidget   *widget,
                    !is_space_event (event) &&
                    !is_tab_event (event))
             {
+              GtkWidget *current_page;
+
+              current_page = gtk_stack_get_visible_child (self->priv->stack);
+
               if (gtk_search_bar_handle_event (GTK_SEARCH_BAR (self->priv->search_bar),
                                                (GdkEvent*) event) == GDK_EVENT_STOP)
-                ret = TRUE;
+                {
+                  self->priv->return_to_page = current_page;
+                  ret = TRUE;
+                }
               else
                 ret = FALSE;
             }
@@ -239,6 +263,12 @@ gb_preferences_window_constructed (GObject *object)
                     window);
   gb_preferences_window_section_changed (window->priv->stack, NULL, window);
 
+  g_signal_connect_object (window->priv->search_bar,
+                           "notify::search-mode-enabled",
+                           G_CALLBACK (gb_preferences_window_notify_search_mode),
+                           window,
+                           G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+
   g_signal_connect_object (window->priv->search_entry,
                            "changed",
                            G_CALLBACK (gb_preferences_window_search_changed),


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