diff options
author | Ian Douglas Scott <idscott@system76.com> | 2020-07-01 10:23:04 -0700 |
---|---|---|
committer | Ian Douglas Scott <idscott@system76.com> | 2020-07-01 10:38:30 -0700 |
commit | 7244bd997db2c5a72d058d2bb8f891cd4cb23a69 (patch) | |
tree | 7c71b16ef26053559fa055cda317e17fd3f3e294 /panels/keyboard | |
parent | 107eb008a0c364b8c18623a997a8a04209ea2b63 (diff) | |
download | gnome-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.c | 53 | ||||
-rw-r--r-- | 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> |