From c9fdc0ea2b08d3133e2c4497c9dd516e57867dfa Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Mon, 28 Dec 2020 10:28:50 -0800 Subject: [PATCH 1/2] keyboard: Hide search in shortcut dialog behind search button Suggested in https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/785#note_988406 Seeing how this works now that I tried implementing it, I like it. --- panels/keyboard/cc-keyboard-shortcut-dialog.c | 23 ++++++++++++++---- .../keyboard/cc-keyboard-shortcut-dialog.ui | 24 +++++++++++++++++-- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.c b/panels/keyboard/cc-keyboard-shortcut-dialog.c index 4163e324e..0932f2be7 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.c +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.c @@ -58,13 +58,15 @@ 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; + GtkButton *search_button; GtkSearchEntry *search_entry; GtkListBox *section_listbox; GtkListBoxRow *section_row; @@ -298,8 +300,8 @@ 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_widget_set_visible (GTK_WIDGET (self->search_entry), FALSE); update_modified_counts (self); } @@ -336,7 +338,7 @@ 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_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->back_button)); gtk_widget_set_visible (GTK_WIDGET (self->search_entry), self->section_row == NULL); } @@ -392,6 +394,14 @@ 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_widget_set_visible (GTK_WIDGET (self->search_entry), TRUE); + gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); +} + static void reset_all_shortcuts_cb (GtkWidget *widget, gpointer user_data) @@ -761,12 +771,14 @@ 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_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); @@ -778,6 +790,7 @@ cc_keyboard_shortcut_dialog_class_init (CcKeyboardShortcutDialogClass *klass) 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, 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 7aefc4b72..e117d0f67 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.ui +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.ui @@ -146,12 +146,32 @@ True True - + True False crossfade - + + True + False + False + center + + + + + True + False + system-search-symbolic + 1 + + + + + + True False False -- GitLab From c0a38f1b386b59e3e35bc923d807776c1f463ee7 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Mon, 28 Dec 2020 10:54:46 -0800 Subject: [PATCH 2/2] keyboard: Use GtkSearchBar in shortcut dialog Like previous design. --- panels/keyboard/cc-keyboard-shortcut-dialog.c | 33 +++++++++++-------- .../keyboard/cc-keyboard-shortcut-dialog.ui | 17 ++++++---- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.c b/panels/keyboard/cc-keyboard-shortcut-dialog.c index 0932f2be7..0d3e1d995 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.c +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.c @@ -66,6 +66,7 @@ struct _CcKeyboardShortcutDialog GtkWidget *empty_search_placeholder; GtkHeaderBar *headerbar; GtkRevealer *reset_all_revealer; + GtkSearchBar *search_bar; GtkButton *search_button; GtkSearchEntry *search_entry; GtkListBox *section_listbox; @@ -301,7 +302,8 @@ show_section_list (CcKeyboardShortcutDialog *self) gtk_entry_set_text(GTK_ENTRY (self->search_entry), ""); gtk_revealer_set_reveal_child (self->reset_all_revealer, TRUE); gtk_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->search_button)); - gtk_widget_set_visible (GTK_WIDGET (self->search_entry), FALSE); + gtk_search_bar_set_search_mode (self->search_bar, FALSE); + gtk_widget_set_visible (GTK_WIDGET (self->search_bar), TRUE); update_modified_counts (self); } @@ -339,8 +341,7 @@ show_shortcut_list (CcKeyboardShortcutDialog *self) set_custom_shortcut_placeholder_visibility (self); gtk_revealer_set_reveal_child (self->reset_all_revealer, FALSE); gtk_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->back_button)); - gtk_widget_set_visible (GTK_WIDGET (self->search_entry), self->section_row == NULL); - + gtk_widget_set_visible (GTK_WIDGET (self->search_bar), self->section_row == NULL); } static void @@ -398,8 +399,20 @@ static void search_button_clicked_cb (CcKeyboardShortcutDialog *self) { gtk_stack_set_visible_child (self->back_search_stack, GTK_WIDGET (self->back_button)); - gtk_widget_set_visible (GTK_WIDGET (self->search_entry), TRUE); - gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); + 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 @@ -476,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) @@ -778,6 +784,7 @@ cc_keyboard_shortcut_dialog_class_init (CcKeyboardShortcutDialogClass *klass) 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); @@ -788,10 +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 e117d0f67..c51651c58 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.ui +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.ui @@ -3,17 +3,22 @@