diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.c b/panels/keyboard/cc-keyboard-shortcut-dialog.c index 4163e324ec80c92c84cc2cdef25f1cf26e24009a..0d3e1d995ba440264fc75dd212701a62685a3ace 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.c +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.c @@ -58,13 +58,16 @@ struct _CcKeyboardShortcutDialog GtkDialog parent_instance; GtkSizeGroup *accelerator_sizegroup; - GtkRevealer *back_revealer; + GtkButton *back_button; + GtkStack *back_search_stack; GtkListBoxRow *custom_shortcut_add_row; guint custom_shortcut_count; GtkWidget *empty_custom_shortcuts_placeholder; GtkWidget *empty_search_placeholder; GtkHeaderBar *headerbar; GtkRevealer *reset_all_revealer; + GtkSearchBar *search_bar; + GtkButton *search_button; GtkSearchEntry *search_entry; GtkListBox *section_listbox; GtkListBoxRow *section_row; @@ -298,8 +301,9 @@ show_section_list (CcKeyboardShortcutDialog *self) gtk_header_bar_set_title (self->headerbar, _("Keyboard Shortcuts")); gtk_entry_set_text(GTK_ENTRY (self->search_entry), ""); gtk_revealer_set_reveal_child (self->reset_all_revealer, TRUE); - gtk_revealer_set_reveal_child (self->back_revealer, FALSE); - gtk_widget_set_visible (GTK_WIDGET (self->search_entry), TRUE); + gtk_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->search_button)); + gtk_search_bar_set_search_mode (self->search_bar, FALSE); + gtk_widget_set_visible (GTK_WIDGET (self->search_bar), TRUE); update_modified_counts (self); } @@ -336,9 +340,8 @@ show_shortcut_list (CcKeyboardShortcutDialog *self) gtk_header_bar_set_title (self->headerbar, title); set_custom_shortcut_placeholder_visibility (self); gtk_revealer_set_reveal_child (self->reset_all_revealer, FALSE); - gtk_revealer_set_reveal_child (self->back_revealer, TRUE); - gtk_widget_set_visible (GTK_WIDGET (self->search_entry), self->section_row == NULL); - + gtk_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->back_button)); + gtk_widget_set_visible (GTK_WIDGET (self->search_bar), self->section_row == NULL); } static void @@ -392,6 +395,26 @@ back_button_clicked_cb (CcKeyboardShortcutDialog *self) show_section_list (self); } +static void +search_button_clicked_cb (CcKeyboardShortcutDialog *self) +{ + gtk_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->back_button)); + gtk_search_bar_set_search_mode (self->search_bar, TRUE); +} + +static void +search_mode_enabled_cb (CcKeyboardShortcutDialog *self) +{ + GtkWidget *widget; + + if (gtk_search_bar_get_search_mode(self->search_bar)) + widget = GTK_WIDGET (self->back_button); + else + widget = GTK_WIDGET (self->search_button); + + gtk_stack_set_visible_child (self->back_search_stack, widget); +} + static void reset_all_shortcuts_cb (GtkWidget *widget, gpointer user_data) @@ -466,13 +489,6 @@ search_entry_cb (CcKeyboardShortcutDialog *self) gtk_list_box_invalidate_filter (self->shortcut_listbox); } -static void -key_press_cb (CcKeyboardShortcutDialog *self, GdkEvent *event) -{ - if (gtk_widget_get_visible (GTK_WIDGET (self->search_entry))) - gtk_search_entry_handle_event (self->search_entry, event); -} - static gboolean strv_contains_prefix_or_match (gchar **strv, const gchar *prefix) @@ -761,12 +777,15 @@ cc_keyboard_shortcut_dialog_class_init (CcKeyboardShortcutDialogClass *klass) gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/keyboard/cc-keyboard-shortcut-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, accelerator_sizegroup); - gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, back_revealer); + gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, back_button); + gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, back_search_stack); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, custom_shortcut_add_row); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, empty_custom_shortcuts_placeholder); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, empty_search_placeholder); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, headerbar); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, reset_all_revealer); + gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, search_bar); + gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, search_button); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, search_entry); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, section_listbox); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, section_scrolled_window); @@ -776,9 +795,10 @@ cc_keyboard_shortcut_dialog_class_init (CcKeyboardShortcutDialogClass *klass) gtk_widget_class_bind_template_callback (widget_class, add_custom_shortcut_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, back_button_clicked_cb); - gtk_widget_class_bind_template_callback (widget_class, key_press_cb); gtk_widget_class_bind_template_callback (widget_class, reset_all_clicked_cb); + gtk_widget_class_bind_template_callback (widget_class, search_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, search_entry_cb); + gtk_widget_class_bind_template_callback (widget_class, search_mode_enabled_cb); gtk_widget_class_bind_template_callback (widget_class, section_row_activated); gtk_widget_class_bind_template_callback (widget_class, shortcut_row_activated); } diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.ui b/panels/keyboard/cc-keyboard-shortcut-dialog.ui index 7aefc4b7279b200dc4eb394f56e2a60e5ba9fe5f..c51651c58fac13b4b7a21eac34ee4caf48c0340d 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.ui +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.ui @@ -3,17 +3,22 @@