[gnome-control-center] shell: Use a search bar for the search entry
- From: Yosef Or Boczko <yoseforb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] shell: Use a search bar for the search entry
- Date: Sun, 18 Aug 2013 20:21:52 +0000 (UTC)
commit ef995c072897d6a36fc2173b79cfa6347badc6d0
Author: Yosef Or Boczko <yoseforb gmail com>
Date: Sun Aug 18 23:13:46 2013 +0300
shell: Use a search bar for the search entry
https://bugzilla.gnome.org/show_bug.cgi?id=704217
shell/cc-window.c | 52 ++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 38 insertions(+), 14 deletions(-)
---
diff --git a/shell/cc-window.c b/shell/cc-window.c
index 2caa54b..8f239b3 100644
--- a/shell/cc-window.c
+++ b/shell/cc-window.c
@@ -79,6 +79,8 @@ struct _CcWindowPrivate
GtkWidget *search_scrolled;
GtkWidget *previous_button;
GtkWidget *top_right_box;
+ GtkWidget *search_button;
+ GtkWidget *search_bar;
GtkWidget *search_entry;
GtkWidget *lock_button;
GtkWidget *current_panel_box;
@@ -233,7 +235,8 @@ shell_show_overview_page (CcWindow *self)
g_free (priv->filter_string);
priv->filter_string = g_strdup ("");
gtk_entry_set_text (GTK_ENTRY (priv->search_entry), "");
- gtk_widget_grab_focus (priv->search_entry);
+ if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (self->priv->search_bar)))
+ gtk_widget_grab_focus (priv->search_entry);
gtk_lock_button_set_permission (GTK_LOCK_BUTTON (priv->lock_button), NULL);
@@ -260,6 +263,7 @@ 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->priv->search_bar), TRUE);
gtk_entry_set_text (GTK_ENTRY (center->priv->search_entry), search);
gtk_editable_set_position (GTK_EDITABLE (center->priv->search_entry), -1);
}
@@ -656,6 +660,7 @@ search_entry_key_press_event_cb (GtkEntry *entry,
if (event->keyval == GDK_KEY_Escape)
{
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->search_bar), FALSE);
gtk_entry_set_text (entry, "");
return TRUE;
}
@@ -899,7 +904,8 @@ stack_page_notify_cb (GtkStack *stack,
gint header_height, maximum_height;
gtk_widget_hide (priv->previous_button);
- gtk_widget_show (priv->search_entry);
+ gtk_widget_show (priv->search_button);
+ gtk_widget_show (priv->search_bar);
gtk_widget_hide (priv->lock_button);
gtk_widget_get_preferred_height_for_width (GTK_WIDGET (priv->main_vbox),
@@ -920,7 +926,8 @@ stack_page_notify_cb (GtkStack *stack,
else
{
gtk_widget_show (priv->previous_button);
- gtk_widget_hide (priv->search_entry);
+ gtk_widget_hide (priv->search_button);
+ gtk_widget_hide (priv->search_bar);
/* set the scrolled window small so that it doesn't force
the window to be larger than this panel */
gtk_widget_get_preferred_height_for_width (GTK_WIDGET (self),
@@ -1217,11 +1224,10 @@ window_key_press_event (GtkWidget *win,
case GDK_KEY_S:
case GDK_KEY_f:
case GDK_KEY_F:
- if (gtk_widget_get_visible (self->priv->search_entry))
- {
- gtk_widget_grab_focus (self->priv->search_entry);
- retval = TRUE;
- }
+ retval = !gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (self->priv->search_bar));
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (self->priv->search_bar), retval);
+ if (retval)
+ gtk_widget_grab_focus (self->priv->search_entry);
break;
case GDK_KEY_Q:
case GDK_KEY_q:
@@ -1430,6 +1436,7 @@ static void
create_header (CcWindow *self)
{
CcWindowPrivate *priv = self->priv;
+ GtkWidget *image;
AtkObject *accessible;
gboolean rtl;
@@ -1438,6 +1445,7 @@ create_header (CcWindow *self)
priv->header = gtk_header_bar_new ();
gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (priv->header), TRUE);
+ /* previous button */
priv->previous_button = gtk_button_new_from_icon_name (rtl ? "go-previous-rtl-symbolic" :
"go-previous-symbolic",
GTK_ICON_SIZE_MENU);
@@ -1451,12 +1459,14 @@ create_header (CcWindow *self)
priv->top_right_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_header_bar_pack_end (GTK_HEADER_BAR (priv->header), priv->top_right_box);
- priv->search_entry = gtk_search_entry_new ();
- gtk_container_add (GTK_CONTAINER (priv->top_right_box), priv->search_entry);
- gtk_entry_set_width_chars (GTK_ENTRY (priv->search_entry), 30);
- gtk_entry_set_invisible_char (GTK_ENTRY (priv->search_entry), 9679);
- g_signal_connect (priv->search_entry, "search-changed", G_CALLBACK (search_entry_changed_cb), self);
- g_signal_connect (priv->search_entry, "key-press-event", G_CALLBACK (search_entry_key_press_event_cb),
self);
+ /* toggle search button */
+ priv->search_button = gtk_toggle_button_new ();
+ image = gtk_image_new_from_icon_name ("edit-find-symbolic", GTK_ICON_SIZE_MENU);
+ gtk_button_set_image (GTK_BUTTON (priv->search_button), image);
+ gtk_widget_set_valign (priv->search_button, GTK_ALIGN_CENTER);
+ gtk_style_context_add_class (gtk_widget_get_style_context (priv->search_button),
+ "image-button");
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (priv->header), priv->search_button);
priv->lock_button = gtk_lock_button_new (NULL);
gtk_style_context_add_class (gtk_widget_get_style_context (priv->lock_button),
@@ -1480,6 +1490,20 @@ create_window (CcWindow *self)
gtk_header_bar_set_title (GTK_HEADER_BAR (priv->header), _(DEFAULT_WINDOW_TITLE));
gtk_widget_show_all (priv->header);
+ /* search bar */
+ priv->search_bar = gtk_search_bar_new ();
+ priv->search_entry = gtk_search_entry_new ();
+ gtk_entry_set_width_chars (GTK_ENTRY (priv->search_entry), 30);
+ gtk_entry_set_invisible_char (GTK_ENTRY (priv->search_entry), 9679);
+ g_signal_connect (priv->search_entry, "search-changed", G_CALLBACK (search_entry_changed_cb), self);
+ g_signal_connect (priv->search_entry, "key-press-event", G_CALLBACK (search_entry_key_press_event_cb),
self);
+ gtk_container_add (GTK_CONTAINER (priv->search_bar), priv->search_entry);
+ gtk_container_add (GTK_CONTAINER (box), priv->search_bar);
+
+ g_object_bind_property (priv->search_button, "active",
+ priv->search_bar, "search-mode-enabled",
+ G_BINDING_BIDIRECTIONAL);
+
priv->stack = gtk_stack_new ();
gtk_stack_set_homogeneous (GTK_STACK (priv->stack), TRUE);
gtk_stack_set_transition_type (GTK_STACK (priv->stack), GTK_STACK_TRANSITION_TYPE_CROSSFADE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]