[gnome-software] Switch to using GtkSearchBar
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Switch to using GtkSearchBar
- Date: Thu, 2 Jun 2016 12:05:53 +0000 (UTC)
commit d479fe2e9e2bcd2e13813642f4d39010b9722b81
Author: Richard Hughes <richard hughsie com>
Date: Thu Jun 2 13:01:00 2016 +0100
Switch to using GtkSearchBar
Fixes:
https://bugzilla.gnome.org/show_bug.cgi?id=767143
https://bugzilla.gnome.org/show_bug.cgi?id=767144
https://bugzilla.gnome.org/show_bug.cgi?id=767146
https://bugzilla.gnome.org/show_bug.cgi?id=767148
src/gnome-software.ui | 84 +++++--------------------------
src/gs-shell-overview.c | 21 +++-----
src/gs-shell.c | 127 +++--------------------------------------------
3 files changed, 27 insertions(+), 205 deletions(-)
---
diff --git a/src/gnome-software.ui b/src/gnome-software.ui
index 4207bd6..52755ee 100644
--- a/src/gnome-software.ui
+++ b/src/gnome-software.ui
@@ -250,82 +250,22 @@
</child>
<child>
- <object class="GtkRevealer" id="search_bar">
+ <object class="GtkSearchBar" id="search_bar">
<property name="visible">True</property>
- <property name="transition-type">slide-up</property>
-
<child>
- <object class="GtkToolbar" id="search_bar_toolbar">
+ <object class="GtkSearchEntry" id="entry_search">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <style>
- <class name="search-bar"/>
- </style>
- <child>
- <object class="GtkToolItem" id="search_toolitem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkBox" id="search_toolbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkBox" id="box_left">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="hexpand">True</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSearchEntry" id="entry_search">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="activates_default">True</property>
- <property name="width_request">500</property>
- <property name="hexpand">True</property>
- <property name="halign">center</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box_right">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="hexpand">True</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ <property name="width_request">500</property>
+ <property name="hexpand">True</property>
+ <property name="halign">center</property>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
<packing>
diff --git a/src/gs-shell-overview.c b/src/gs-shell-overview.c
index a200a4b..43f5716 100644
--- a/src/gs-shell-overview.c
+++ b/src/gs-shell-overview.c
@@ -497,10 +497,6 @@ gs_shell_overview_switch_to (GsPage *page, gboolean scroll_up)
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main"));
gtk_widget_show (widget);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
- gtk_revealer_set_reveal_child (GTK_REVEALER (widget), FALSE);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
- gtk_entry_set_text (GTK_ENTRY (widget), "");
/* hide the expander */
gtk_revealer_set_transition_duration (GTK_REVEALER (priv->categories_expander), 0);
@@ -524,15 +520,14 @@ static void
gs_shell_overview_search_button_cb (GtkButton *button, GsShellOverview *self)
{
GsShellOverviewPrivate *priv = gs_shell_overview_get_instance_private (self);
- GtkToggleButton *search_button = GTK_TOGGLE_BUTTON (priv->search_button);
- GtkRevealer *search_bar;
- gboolean show_search;
-
- show_search = gtk_toggle_button_get_active (search_button);
-
- search_bar = GTK_REVEALER (gtk_builder_get_object (priv->builder,
- "search_bar"));
- gtk_revealer_set_reveal_child (search_bar, show_search);
+ GtkSearchBar *search_bar;
+ GtkToggleButton *search_button;
+
+ search_button = GTK_TOGGLE_BUTTON (priv->search_button);
+ search_bar = GTK_SEARCH_BAR (gtk_builder_get_object (priv->builder,
+ "search_bar"));
+ gtk_search_bar_set_search_mode (search_bar,
+ gtk_toggle_button_get_active (search_button));
}
static void
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 382d11f..5c4595d 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -247,8 +247,12 @@ gs_shell_change_mode (GsShell *shell,
gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header_selection_menu_button"));
gtk_widget_hide (widget);
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
- gtk_revealer_set_reveal_child (GTK_REVEALER (widget), FALSE);
+
+ /* hide unless we're going to search */
+ if (mode != GS_SHELL_MODE_SEARCH) {
+ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (widget), FALSE);
+ }
context = gtk_widget_get_style_context (GTK_WIDGET (gtk_builder_get_object (priv->builder,
"header")));
gtk_style_context_remove_class (context, "selection-mode");
@@ -419,125 +423,13 @@ initial_overview_load_done (GsShellOverview *shell_overview, gpointer data)
g_signal_emit (shell, signals[SIGNAL_LOADED], 0);
}
-static void
-gs_shell_search_activated_cb (GtkEntry *entry, GsShell *shell)
-{
- GsShellPrivate *priv = gs_shell_get_instance_private (shell);
- const gchar *text;
-
- text = gtk_entry_get_text (entry);
- if (text[0] == '\0')
- return;
-
- if (gs_shell_get_mode (shell) == GS_SHELL_MODE_SEARCH) {
- gs_shell_search_set_text (priv->shell_search, text);
- gs_page_switch_to (GS_PAGE (priv->shell_search), TRUE);
- } else {
- gs_shell_change_mode (shell, GS_SHELL_MODE_SEARCH, NULL, NULL, TRUE);
- }
-}
-
-static gboolean
-is_keynav_event (GdkEvent *event, guint keyval)
-{
- GdkModifierType state = 0;
-
- gdk_event_get_state (event, &state);
-
- if (keyval == GDK_KEY_Tab ||
- keyval == GDK_KEY_KP_Tab ||
- keyval == GDK_KEY_Up ||
- keyval == GDK_KEY_KP_Up ||
- keyval == GDK_KEY_Down ||
- keyval == GDK_KEY_KP_Down ||
- keyval == GDK_KEY_Left ||
- keyval == GDK_KEY_KP_Left ||
- keyval == GDK_KEY_Right ||
- keyval == GDK_KEY_KP_Right ||
- keyval == GDK_KEY_Home ||
- keyval == GDK_KEY_KP_Home ||
- keyval == GDK_KEY_End ||
- keyval == GDK_KEY_KP_End ||
- keyval == GDK_KEY_Page_Up ||
- keyval == GDK_KEY_KP_Page_Up ||
- keyval == GDK_KEY_Page_Down ||
- keyval == GDK_KEY_KP_Page_Down ||
- ((state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) != 0))
- return TRUE;
-
- return FALSE;
-}
-
-static gboolean
-entry_keypress_handler (GtkWidget *widget, GdkEvent *event, GsShell *shell)
-{
- GsShellPrivate *priv = gs_shell_get_instance_private (shell);
- guint keyval;
- GtkWidget *entry;
-
- if (!gdk_event_get_keyval (event, &keyval) ||
- keyval != GDK_KEY_Escape)
- return GDK_EVENT_PROPAGATE;
-
- entry = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
- gtk_entry_set_text (GTK_ENTRY (entry), "");
-
- return GDK_EVENT_STOP;
-}
-
-static void
-preedit_changed_cb (GtkEntry *entry, GtkWidget *popup, gboolean *preedit_changed)
-{
- *preedit_changed = TRUE;
-}
-
static gboolean
window_keypress_handler (GtkWidget *window, GdkEvent *event, GsShell *shell)
{
GsShellPrivate *priv = gs_shell_get_instance_private (shell);
- GtkWidget *entry;
GtkWidget *widget;
- guint keyval;
- gboolean handled;
- gboolean preedit_changed;
- guint preedit_change_id;
- gboolean res;
- g_autofree gchar *old_text = NULL;
- g_autofree gchar *new_text = NULL;
-
- if (gs_shell_get_mode (shell) != GS_SHELL_MODE_OVERVIEW &&
- gs_shell_get_mode (shell) != GS_SHELL_MODE_SEARCH)
- return GDK_EVENT_PROPAGATE;
-
- if (!gdk_event_get_keyval (event, &keyval) ||
- is_keynav_event (event, keyval) ||
- keyval == GDK_KEY_space ||
- keyval == GDK_KEY_Menu)
- return GDK_EVENT_PROPAGATE;
-
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar"));
- gtk_revealer_set_reveal_child (GTK_REVEALER (widget), TRUE);
-
- entry = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
-
- handled = GDK_EVENT_PROPAGATE;
- preedit_changed = FALSE;
- preedit_change_id = g_signal_connect (entry, "preedit-changed",
- G_CALLBACK (preedit_changed_cb), &preedit_changed);
-
- old_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
- res = gtk_widget_event (entry, event);
- new_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
-
- g_signal_handler_disconnect (entry, preedit_change_id);
-
- if ((res && g_strcmp0 (new_text, old_text) != 0) ||
- preedit_changed) {
- gtk_entry_grab_focus_without_selecting (GTK_ENTRY (entry));
- handled = GDK_EVENT_STOP;
- }
-
- return handled;
+ return gtk_search_bar_handle_event (GTK_SEARCH_BAR (widget), event);
}
static void
@@ -813,14 +705,9 @@ gs_shell_setup (GsShell *shell, GsPluginLoader *plugin_loader, GCancellable *can
priv->cancellable);
/* set up search */
- widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
- g_signal_connect (GTK_EDITABLE (widget), "activate",
- G_CALLBACK (gs_shell_search_activated_cb), shell);
g_signal_connect (priv->main_window, "key-press-event",
G_CALLBACK (window_keypress_handler), shell);
widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search"));
- g_signal_connect (widget, "key-press-event",
- G_CALLBACK (entry_keypress_handler), shell);
g_signal_connect (widget, "search-changed",
G_CALLBACK (search_changed_handler), shell);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]