keyboard: manage shortcut editor state with pages
The current shortcut editor state is managed by setting and comparing the page name directly, making the code look more complicated than it should. Fix this by introducing the concept of pages, and using this to set and get the current shortcut editor dialog state. https://bugzilla.gnome.org/show_bug.cgi?id=777845
This commit is contained in:
parent
147a1e814d
commit
1e13e97556
1 changed files with 64 additions and 14 deletions
|
@ -89,8 +89,64 @@ typedef enum
|
|||
HEADER_MODE_CUSTOM_EDIT
|
||||
} HeaderMode;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
PAGE_CUSTOM,
|
||||
PAGE_CUSTOM_EDIT,
|
||||
PAGE_STANDARD,
|
||||
PAGE_STANDARD_EDIT
|
||||
} ShortcutEditorPage;
|
||||
|
||||
static GParamSpec *properties [N_PROPS] = { NULL, };
|
||||
|
||||
/* Getter and setter for ShortcutEditorPage */
|
||||
static ShortcutEditorPage
|
||||
get_shortcut_editor_page (CcKeyboardShortcutEditor *self)
|
||||
{
|
||||
if (g_str_equal (gtk_stack_get_visible_child_name (GTK_STACK (self->stack)), "change-shortcut"))
|
||||
return PAGE_CUSTOM_EDIT;
|
||||
|
||||
if (g_str_equal (gtk_stack_get_visible_child_name (GTK_STACK (self->stack)), "custom"))
|
||||
return PAGE_CUSTOM;
|
||||
|
||||
if (g_str_equal (gtk_stack_get_visible_child_name (GTK_STACK (self->stack)), "edit") &&
|
||||
g_str_equal (gtk_stack_get_visible_child_name (GTK_STACK (self->standard_shortcut_stack)), "change-shortcut"))
|
||||
{
|
||||
return PAGE_STANDARD_EDIT;
|
||||
}
|
||||
|
||||
return PAGE_STANDARD;
|
||||
}
|
||||
|
||||
static void
|
||||
set_shortcut_editor_page (CcKeyboardShortcutEditor *self,
|
||||
ShortcutEditorPage page)
|
||||
{
|
||||
switch (page)
|
||||
{
|
||||
case PAGE_CUSTOM:
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "custom");
|
||||
break;
|
||||
|
||||
case PAGE_CUSTOM_EDIT:
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "change-shortcut");
|
||||
break;
|
||||
|
||||
case PAGE_STANDARD:
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "edit");
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->standard_shortcut_stack), "main");
|
||||
break;
|
||||
|
||||
case PAGE_STANDARD_EDIT:
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "edit");
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->standard_shortcut_stack), "change-shortcut");
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
apply_custom_item_fields (CcKeyboardShortcutEditor *self,
|
||||
CcKeyboardItem *item)
|
||||
|
@ -291,7 +347,7 @@ setup_custom_shortcut (CcKeyboardShortcutEditor *self)
|
|||
{
|
||||
if (accel_valid)
|
||||
{
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "custom");
|
||||
set_shortcut_editor_page (self, PAGE_CUSTOM);
|
||||
|
||||
/* We have to check if the current accelerator is empty in order to
|
||||
* decide if we show the "Set Shortcut" button or the accelerator label */
|
||||
|
@ -318,7 +374,7 @@ setup_custom_shortcut (CcKeyboardShortcutEditor *self)
|
|||
|
||||
/* Valid shortcut, show it in the standard page */
|
||||
if (!is_custom)
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->standard_shortcut_stack), "main");
|
||||
set_shortcut_editor_page (self, PAGE_STANDARD);
|
||||
|
||||
shortcut_label = get_current_shortcut_label (self);
|
||||
|
||||
|
@ -424,7 +480,7 @@ cancel_button_clicked_cb (GtkWidget *button,
|
|||
static void
|
||||
change_custom_shortcut_button_clicked_cb (CcKeyboardShortcutEditor *self)
|
||||
{
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "change-shortcut");
|
||||
set_shortcut_editor_page (self, PAGE_CUSTOM_EDIT);
|
||||
set_header_mode (self, HEADER_MODE_NONE);
|
||||
}
|
||||
|
||||
|
@ -578,10 +634,7 @@ setup_keyboard_item (CcKeyboardShortcutEditor *self,
|
|||
g_free (text);
|
||||
|
||||
/* Show the apropriate view */
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), is_custom ? "custom" : "edit");
|
||||
|
||||
if (!is_custom)
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->standard_shortcut_stack), "change-shortcut");
|
||||
set_shortcut_editor_page (self, is_custom ? PAGE_CUSTOM : PAGE_STANDARD_EDIT);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -649,18 +702,15 @@ cc_keyboard_shortcut_editor_key_press_event (GtkWidget *widget,
|
|||
{
|
||||
CcKeyboardShortcutEditor *self;
|
||||
GdkModifierType real_mask;
|
||||
gboolean editing, is_custom;
|
||||
gboolean editing;
|
||||
guint keyval_lower;
|
||||
|
||||
self = CC_KEYBOARD_SHORTCUT_EDITOR (widget);
|
||||
is_custom = is_custom_shortcut (self);
|
||||
|
||||
/* Being in the "change-shortcut" page is the only check we must
|
||||
* perform to decide if we're editing a shortcut. */
|
||||
if (is_custom)
|
||||
editing = g_str_equal (gtk_stack_get_visible_child_name (GTK_STACK (self->stack)), "change-shortcut");
|
||||
else
|
||||
editing = g_str_equal (gtk_stack_get_visible_child_name (GTK_STACK (self->standard_shortcut_stack)), "change-shortcut");
|
||||
editing = get_shortcut_editor_page (self) == PAGE_CUSTOM_EDIT ||
|
||||
get_shortcut_editor_page (self) == PAGE_STANDARD_EDIT;
|
||||
|
||||
if (!editing)
|
||||
return GTK_WIDGET_CLASS (cc_keyboard_shortcut_editor_parent_class)->key_press_event (widget, event);
|
||||
|
@ -963,9 +1013,9 @@ cc_keyboard_shortcut_editor_set_mode (CcKeyboardShortcutEditor *self,
|
|||
clear_custom_entries (self);
|
||||
|
||||
set_header_mode (self, HEADER_MODE_ADD);
|
||||
set_shortcut_editor_page (self, PAGE_CUSTOM);
|
||||
gtk_header_bar_set_title (GTK_HEADER_BAR (self->headerbar), _("Add Custom Shortcut"));
|
||||
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "custom");
|
||||
gtk_widget_set_sensitive (self->command_entry, TRUE);
|
||||
gtk_widget_set_sensitive (self->name_entry, TRUE);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue