[gnome-control-center] keyboard: manage shortcut editor state with pages



commit 1e13e97556401c39881a44074161439048eb06cc
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Mon Jan 30 09:24:30 2017 -0200

    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

 panels/keyboard/cc-keyboard-shortcut-editor.c |   78 ++++++++++++++++++++-----
 1 files changed, 64 insertions(+), 14 deletions(-)
---
diff --git a/panels/keyboard/cc-keyboard-shortcut-editor.c b/panels/keyboard/cc-keyboard-shortcut-editor.c
index 647f22d..861e710 100644
--- a/panels/keyboard/cc-keyboard-shortcut-editor.c
+++ b/panels/keyboard/cc-keyboard-shortcut-editor.c
@@ -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);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]