[gnome-control-center] keyboard: unify `standard_edit_box` and `custom_edit_box`
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] keyboard: unify `standard_edit_box` and `custom_edit_box`
- Date: Wed, 1 Jul 2020 21:16:04 +0000 (UTC)
commit 7244bd997db2c5a72d058d2bb8f891cd4cb23a69
Author: Ian Douglas Scott <idscott system76 com>
Date: Wed Jul 1 10:23:04 2020 -0700
keyboard: unify `standard_edit_box` and `custom_edit_box`
The redundant design here seemed awkward when I was thinking about how
to implement support for displaying multiple conflicts as needed by
https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/776
and https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1041.
This should be more maintainable.
panels/keyboard/cc-keyboard-shortcut-editor.c | 53 +++-----
panels/keyboard/cc-keyboard-shortcut-editor.ui | 180 +++++++++----------------
2 files changed, 84 insertions(+), 149 deletions(-)
---
diff --git a/panels/keyboard/cc-keyboard-shortcut-editor.c b/panels/keyboard/cc-keyboard-shortcut-editor.c
index 5e96af3a8..4a4d21f04 100644
--- a/panels/keyboard/cc-keyboard-shortcut-editor.c
+++ b/panels/keyboard/cc-keyboard-shortcut-editor.c
@@ -32,7 +32,6 @@ struct _CcKeyboardShortcutEditor
GtkButton *cancel_button;
GtkButton *change_custom_shortcut_button;
GtkEntry *command_entry;
- GtkBox *custom_edit_box;
GtkGrid *custom_grid;
GtkShortcutLabel *custom_shortcut_accel_label;
GtkStack *custom_shortcut_stack;
@@ -48,8 +47,6 @@ struct _CcKeyboardShortcutEditor
GtkShortcutLabel *shortcut_accel_label;
GtkLabel *shortcut_conflict_label;
GtkBox *standard_box;
- GtkBox *standard_edit_box;
- GtkStack *standard_shortcut_stack;
GtkStack *stack;
GtkLabel *top_info_label;
@@ -96,9 +93,8 @@ typedef enum
typedef enum
{
PAGE_CUSTOM,
- PAGE_CUSTOM_EDIT,
+ PAGE_EDIT,
PAGE_STANDARD,
- PAGE_STANDARD_EDIT
} ShortcutEditorPage;
static GParamSpec *properties [N_PROPS] = { NULL, };
@@ -107,18 +103,12 @@ static GParamSpec *properties [N_PROPS] = { NULL, };
static ShortcutEditorPage
get_shortcut_editor_page (CcKeyboardShortcutEditor *self)
{
- if (gtk_stack_get_visible_child (self->stack) == GTK_WIDGET (self->custom_edit_box))
- return PAGE_CUSTOM_EDIT;
+ if (gtk_stack_get_visible_child (self->stack) == GTK_WIDGET (self->edit_box))
+ return PAGE_EDIT;
if (gtk_stack_get_visible_child (self->stack) == GTK_WIDGET (self->custom_grid))
return PAGE_CUSTOM;
- if (gtk_stack_get_visible_child (self->stack) == GTK_WIDGET (self->edit_box) &&
- gtk_stack_get_visible_child (self->standard_shortcut_stack) == GTK_WIDGET (self->standard_edit_box))
- {
- return PAGE_STANDARD_EDIT;
- }
-
return PAGE_STANDARD;
}
@@ -132,23 +122,19 @@ set_shortcut_editor_page (CcKeyboardShortcutEditor *self,
gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->custom_grid));
break;
- case PAGE_CUSTOM_EDIT:
- gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->custom_edit_box));
- break;
-
- case PAGE_STANDARD:
+ case PAGE_EDIT:
gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->edit_box));
- gtk_stack_set_visible_child (self->standard_shortcut_stack, GTK_WIDGET (self->standard_box));
break;
- case PAGE_STANDARD_EDIT:
- gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->edit_box));
- gtk_stack_set_visible_child (self->standard_shortcut_stack, GTK_WIDGET (self->standard_edit_box));
+ case PAGE_STANDARD:
+ gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->standard_box));
break;
default:
g_assert_not_reached ();
}
+
+ gtk_widget_set_visible (GTK_WIDGET (self->top_info_label), page != PAGE_CUSTOM);
}
static void
@@ -217,9 +203,8 @@ cancel_editing (CcKeyboardShortcutEditor *self)
}
static gboolean
-is_custom_shortcut (CcKeyboardShortcutEditor *self)
-{
- return gtk_stack_get_visible_child (self->stack) != GTK_WIDGET (self->edit_box);
+is_custom_shortcut (CcKeyboardShortcutEditor *self) {
+ return self->item == NULL || cc_keyboard_item_get_item_type (self->item) ==
CC_KEYBOARD_ITEM_TYPE_GSETTINGS_PATH;
}
static void
@@ -483,7 +468,7 @@ static void
change_custom_shortcut_button_clicked_cb (CcKeyboardShortcutEditor *self)
{
grab_seat (self);
- set_shortcut_editor_page (self, PAGE_CUSTOM_EDIT);
+ set_shortcut_editor_page (self, PAGE_EDIT);
set_header_mode (self, HEADER_MODE_NONE);
}
@@ -558,8 +543,10 @@ setup_keyboard_item (CcKeyboardShortcutEditor *self,
g_autofree gchar *description_text = NULL;
g_autofree gchar *text = NULL;
- if (!item)
+ if (!item) {
+ gtk_label_set_text (self->top_info_label, _("Enter the new shortcut"));
return;
+ }
combo = cc_keyboard_item_get_primary_combo (item);
is_custom = cc_keyboard_item_get_item_type (item) == CC_KEYBOARD_ITEM_TYPE_GSETTINGS_PATH;
@@ -631,7 +618,7 @@ setup_keyboard_item (CcKeyboardShortcutEditor *self,
}
/* Show the apropriate view */
- set_shortcut_editor_page (self, is_custom ? PAGE_CUSTOM : PAGE_STANDARD_EDIT);
+ set_shortcut_editor_page (self, is_custom ? PAGE_CUSTOM : PAGE_EDIT);
}
static void
@@ -707,8 +694,7 @@ cc_keyboard_shortcut_editor_key_press_event (GtkWidget *widget,
/* Being in the "change-shortcut" page is the only check we must
* perform to decide if we're editing a shortcut. */
- editing = get_shortcut_editor_page (self) == PAGE_CUSTOM_EDIT ||
- get_shortcut_editor_page (self) == PAGE_STANDARD_EDIT;
+ editing = get_shortcut_editor_page (self) == PAGE_EDIT;
if (!editing)
return GTK_WIDGET_CLASS (cc_keyboard_shortcut_editor_parent_class)->key_press_event (widget, event);
@@ -887,7 +873,6 @@ cc_keyboard_shortcut_editor_class_init (CcKeyboardShortcutEditorClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, cancel_button);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor,
change_custom_shortcut_button);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, command_entry);
- gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, custom_edit_box);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, custom_grid);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, custom_shortcut_accel_label);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, custom_shortcut_stack);
@@ -903,8 +888,6 @@ cc_keyboard_shortcut_editor_class_init (CcKeyboardShortcutEditorClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, shortcut_accel_label);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, shortcut_conflict_label);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, standard_box);
- gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, standard_edit_box);
- gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, standard_shortcut_stack);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, stack);
gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutEditor, top_info_label);
@@ -978,11 +961,11 @@ cc_keyboard_shortcut_editor_set_item (CcKeyboardShortcutEditor *self,
{
g_return_if_fail (CC_IS_KEYBOARD_SHORTCUT_EDITOR (self));
+ setup_keyboard_item (self, item);
+
if (!g_set_object (&self->item, item))
return;
- setup_keyboard_item (self, item);
-
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_KEYBOARD_ITEM]);
}
diff --git a/panels/keyboard/cc-keyboard-shortcut-editor.ui b/panels/keyboard/cc-keyboard-shortcut-editor.ui
index bdb6b7e2d..c84ce0349 100644
--- a/panels/keyboard/cc-keyboard-shortcut-editor.ui
+++ b/panels/keyboard/cc-keyboard-shortcut-editor.ui
@@ -15,121 +15,109 @@
<object class="GtkBox">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <property name="border_width">12</property>
+ <child>
+ <object class="GtkLabel" id="top_info_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="width_chars">15</property>
+ <property name="max_width_chars">20</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <property name="border_width">12</property>
<child>
<object class="GtkBox" id="edit_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">18</property>
+ <property name="expand">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
<child>
- <object class="GtkLabel" id="top_info_label">
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property
name="resource">/org/gnome/control-center/keyboard/enter-keyboard-shortcut.svg</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="wrap">True</property>
- <property name="wrap_mode">word-char</property>
- <property name="width_chars">15</property>
- <property name="max_width_chars">20</property>
+ <property name="label" translatable="yes">Press Esc to cancel or Backspace to disable
the keyboard shortcut.</property>
+ <style>
+ <class name="dim-label" />
+ </style>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="standard_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
<child>
- <object class="GtkStack" id="standard_shortcut_stack">
+ <object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="expand">True</property>
- <property name="transition_type">crossfade</property>
- <child>
- <object class="GtkBox" id="standard_edit_box">
+ <property name="spacing">18</property>
+ <child type="center">
+ <object class="GtkShortcutLabel" id="shortcut_accel_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <property name="expand">True</property>
<property name="halign">center</property>
- <property name="valign">center</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property
name="resource">/org/gnome/control-center/keyboard/enter-keyboard-shortcut.svg</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="wrap">True</property>
- <property name="label" translatable="yes">Press Esc to cancel or Backspace to
disable the keyboard shortcut.</property>
- <style>
- <class name="dim-label" />
- </style>
- </object>
- </child>
+ <property name="disabled-text" translatable="yes">Disabled</property>
</object>
</child>
<child>
- <object class="GtkBox" id="standard_box">
+ <object class="GtkButton" id="reset_button">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">18</property>
- <child type="center">
- <object class="GtkShortcutLabel" id="shortcut_accel_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">center</property>
- <property name="disabled-text" translatable="yes">Disabled</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="reset_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="relief">none</property>
- <property name="halign">end</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon-name">edit-clear-symbolic</property>
- </object>
- </child>
- <signal name="clicked" handler="reset_item_clicked_cb"
object="CcKeyboardShortcutEditor" swapped="yes" />
- </object>
- <packing>
- <property name="pack_type">end</property>
- </packing>
- </child>
- </object>
- </child>
+ <property name="can_focus">True</property>
+ <property name="relief">none</property>
+ <property name="halign">end</property>
<child>
- <object class="GtkLabel" id="shortcut_conflict_label">
+ <object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="wrap">True</property>
- <property name="wrap_mode">word-char</property>
- <property name="width_chars">15</property>
- <property name="max_width_chars">20</property>
- <property name="xalign">0</property>
+ <property name="icon-name">edit-clear-symbolic</property>
</object>
</child>
+ <signal name="clicked" handler="reset_item_clicked_cb"
object="CcKeyboardShortcutEditor" swapped="yes" />
</object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
</child>
</object>
</child>
+ <child>
+ <object class="GtkLabel" id="shortcut_conflict_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="width_chars">15</property>
+ <property name="max_width_chars">20</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
</object>
</child>
<child>
@@ -268,42 +256,6 @@
</child>
</object>
</child>
- <child>
- <object class="GtkBox" id="custom_edit_box">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <property name="expand">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Enter the new shortcut</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property
name="resource">/org/gnome/control-center/keyboard/enter-keyboard-shortcut.svg</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="wrap">True</property>
- <property name="label" translatable="yes">Press Esc to cancel or Backspace to disable
the keyboard shortcut.</property>
- <style>
- <class name="dim-label" />
- </style>
- </object>
- </child>
- </object>
- </child>
</object>
<packing>
<property name="expand">False</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]