[gnome-control-center] keyboard: Improve Empty Search State.
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] keyboard: Improve Empty Search State.
- Date: Fri, 12 Feb 2021 02:44:00 +0000 (UTC)
commit fccfb52cad36a19fca5f43bc7b12c6ac101328a2
Author: Rachit Keerti Das <rachitkdas gmail com>
Date: Sat Feb 6 20:24:37 2021 +0530
keyboard: Improve Empty Search State.
The empty search state looks out-of place due to it being nested inside
a listbox. This is because we can only detect empty states through
gtk_list_filter_func().
Refine it by making the empty search placeholder a child of the main stack.
Introduce an additional helper function to detect when all the listbox
rows would be hidden by the filter.
As a part of https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1222
panels/keyboard/cc-keyboard-shortcut-dialog.c | 28 ++++++--
panels/keyboard/cc-keyboard-shortcut-dialog.ui | 92 +++++++++++++-------------
2 files changed, 68 insertions(+), 52 deletions(-)
---
diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.c b/panels/keyboard/cc-keyboard-shortcut-dialog.c
index 178ee8692..c52013a79 100644
--- a/panels/keyboard/cc-keyboard-shortcut-dialog.c
+++ b/panels/keyboard/cc-keyboard-shortcut-dialog.c
@@ -79,6 +79,9 @@ struct _CcKeyboardShortcutDialog
};
G_DEFINE_TYPE (CcKeyboardShortcutDialog, cc_keyboard_shortcut_dialog, GTK_TYPE_DIALOG)
+static gboolean
+is_matched_shortcut_present (GtkListBox *listbox,
+ gpointer user_data);
static SectionRowData*
section_row_data_new (const gchar *section_id,
@@ -320,12 +323,6 @@ show_shortcut_list (CcKeyboardShortcutDialog *self)
is_custom_shortcuts = (strcmp (section_data->section_id, "custom") == 0);
gtk_stack_set_transition_type (self->stack, GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT);
}
-
- if (is_custom_shortcuts)
- gtk_list_box_set_placeholder (self->shortcut_listbox, NULL);
- else
- gtk_list_box_set_placeholder (self->shortcut_listbox, self->empty_search_placeholder);
-
gtk_list_box_invalidate_filter (self->shortcut_listbox);
if (is_custom_shortcuts && (self->custom_shortcut_count == 0))
@@ -458,7 +455,10 @@ reset_all_clicked_cb (CcKeyboardShortcutDialog *self)
static void
search_entry_cb (CcKeyboardShortcutDialog *self)
{
- if (gtk_entry_get_text_length (GTK_ENTRY (self->search_entry)) == 0 && self->section_row == NULL)
+ gboolean is_shortcut = is_matched_shortcut_present (self->shortcut_listbox, self);
+ if (!is_shortcut)
+ gtk_stack_set_visible_child (self->stack, self->empty_search_placeholder);
+ else if (gtk_entry_get_text_length (GTK_ENTRY (self->search_entry)) == 0 && self->section_row == NULL)
show_section_list (self);
else if (gtk_stack_get_visible_child (self->stack) != GTK_WIDGET (self->shortcut_scrolled_window))
show_shortcut_list (self);
@@ -664,6 +664,20 @@ shortcut_filter_function (GtkListBoxRow *row,
return retval;
}
+static gboolean
+is_matched_shortcut_present (GtkListBox* listbox,
+ gpointer user_data)
+{
+ for (gint i = 0; ; i++)
+ {
+ GtkListBoxRow *current = gtk_list_box_get_row_at_index (listbox, i);
+ if (!current)
+ return FALSE;
+ if (shortcut_filter_function (current, user_data))
+ return TRUE;
+ }
+}
+
static void
shortcut_header_function (GtkListBoxRow *row,
GtkListBoxRow *before,
diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.ui b/panels/keyboard/cc-keyboard-shortcut-dialog.ui
index 7aefc4b72..269e97ece 100644
--- a/panels/keyboard/cc-keyboard-shortcut-dialog.ui
+++ b/panels/keyboard/cc-keyboard-shortcut-dialog.ui
@@ -28,7 +28,7 @@
<property name="hscrollbar_policy">never</property>
<property name="propagate_natural_width">True</property>
<property name="propagate_natural_height">True</property>
- <property name="max_content_height">350</property>
+ <property name="max_content_height">450</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@@ -58,7 +58,7 @@
<property name="hscrollbar_policy">never</property>
<property name="propagate_natural_width">True</property>
<property name="propagate_natural_height">True</property>
- <property name="max_content_height">350</property>
+ <property name="max_content_height">450</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@@ -137,6 +137,51 @@
</child>
</object>
</child>
+ <child>
+ <object class="GtkBox" id="empty_search_placeholder">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="border_width">18</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">80</property>
+ <property name="icon_name">edit-find-symbolic</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">No keyboard shortcut found</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ <attribute name="scale" value="1.44"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Try a different search</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -200,48 +245,5 @@
</object>
</child>
</template>
- <object class="GtkBox" id="empty_search_placeholder">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="border_width">18</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="pixel_size">80</property>
- <property name="icon_name">edit-find-symbolic</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">No keyboard shortcut found</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- <attribute name="scale" value="1.44"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Try a different search</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- </object>
<object class="GtkSizeGroup" id="accelerator_sizegroup" />
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]