summaryrefslogtreecommitdiff
path: root/panels/keyboard
diff options
context:
space:
mode:
authorIan Douglas Scott <idscott@system76.com>2020-07-01 10:23:04 -0700
committerIan Douglas Scott <idscott@system76.com>2020-07-01 10:38:30 -0700
commit7244bd997db2c5a72d058d2bb8f891cd4cb23a69 (patch)
tree7c71b16ef26053559fa055cda317e17fd3f3e294 /panels/keyboard
parent107eb008a0c364b8c18623a997a8a04209ea2b63 (diff)
downloadgnome-control-center-7244bd997db2c5a72d058d2bb8f891cd4cb23a69.tar.gz
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.
Diffstat (limited to 'panels/keyboard')
-rw-r--r--panels/keyboard/cc-keyboard-shortcut-editor.c53
-rw-r--r--panels/keyboard/cc-keyboard-shortcut-editor.ui180
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>