[gnome-terminal] accels: Sync app and menu accelerators



commit 6e0bcf62bdb8b1c5e3f1fe2b7d339b674138f8c6
Author: Christian Persch <chpe gnome org>
Date:   Fri Apr 25 10:00:14 2014 +0200

    accels: Sync app and menu accelerators
    
    When porting to using gtkapplication accelerators, there was a regression
    in that the in-menu accelerators were not changed/disabled accordingly, which
    meant that they were still being activated even when the global accelerator
    was disabled.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=728121

 src/terminal-accels.c |   50 +++++++++++++++++++++++++++++++++++++++++++++++-
 src/terminal-app.c    |    7 ++++++
 2 files changed, 55 insertions(+), 2 deletions(-)
---
diff --git a/src/terminal-accels.c b/src/terminal-accels.c
index 65d56bd..81f5c9a 100644
--- a/src/terminal-accels.c
+++ b/src/terminal-accels.c
@@ -76,6 +76,35 @@
 #define KEY_ZOOM_OUT            "zoom-out"
 #define KEY_SWITCH_TAB_PREFIX   "switch-to-tab-"
 
+/* Accel paths for the gtkuimanager based menus */
+#define ACCEL_PATH_ROOT "<Actions>/Main/"
+#define ACCEL_PATH_KEY_CLOSE_TAB            ACCEL_PATH_ROOT "FileCloseTab"
+#define ACCEL_PATH_KEY_CLOSE_WINDOW         ACCEL_PATH_ROOT "FileCloseWindow"
+#define ACCEL_PATH_KEY_COPY                 ACCEL_PATH_ROOT "EditCopy"
+#define ACCEL_PATH_KEY_DETACH_TAB           ACCEL_PATH_ROOT "TabsDetach"
+#define ACCEL_PATH_KEY_FIND                 ACCEL_PATH_ROOT "SearchFind"
+#define ACCEL_PATH_KEY_FIND_CLEAR           ACCEL_PATH_ROOT "SearchClearHighlight"
+#define ACCEL_PATH_KEY_FIND_PREV            ACCEL_PATH_ROOT "SearchFindPrevious"
+#define ACCEL_PATH_KEY_FIND_NEXT            ACCEL_PATH_ROOT "SearchFindNext"
+#define ACCEL_PATH_KEY_FULL_SCREEN          ACCEL_PATH_ROOT "ViewFullscreen"
+#define ACCEL_PATH_KEY_HELP                 ACCEL_PATH_ROOT "HelpContents"
+#define ACCEL_PATH_KEY_MOVE_TAB_LEFT        ACCEL_PATH_ROOT "TabsMoveLeft"
+#define ACCEL_PATH_KEY_MOVE_TAB_RIGHT       ACCEL_PATH_ROOT "TabsMoveRight"
+#define ACCEL_PATH_KEY_NEW_PROFILE          ACCEL_PATH_ROOT "FileNewProfile"
+#define ACCEL_PATH_KEY_NEW_TAB              ACCEL_PATH_ROOT "FileNewTab"
+#define ACCEL_PATH_KEY_NEW_WINDOW           ACCEL_PATH_ROOT "FileNewWindow"
+#define ACCEL_PATH_KEY_NEXT_TAB             ACCEL_PATH_ROOT "TabsNext"
+#define ACCEL_PATH_KEY_PASTE                ACCEL_PATH_ROOT "EditPaste"
+#define ACCEL_PATH_KEY_PREV_TAB             ACCEL_PATH_ROOT "TabsPrevious"
+#define ACCEL_PATH_KEY_RESET                ACCEL_PATH_ROOT "TerminalReset"
+#define ACCEL_PATH_KEY_RESET_AND_CLEAR      ACCEL_PATH_ROOT "TerminalResetClear"
+#define ACCEL_PATH_KEY_SAVE_CONTENTS        ACCEL_PATH_ROOT "FileSaveContents"
+#define ACCEL_PATH_KEY_TOGGLE_MENUBAR       ACCEL_PATH_ROOT "ViewMenubar"
+#define ACCEL_PATH_KEY_ZOOM_IN              ACCEL_PATH_ROOT "ViewZoomIn"
+#define ACCEL_PATH_KEY_ZOOM_NORMAL          ACCEL_PATH_ROOT "ViewZoom100"
+#define ACCEL_PATH_KEY_ZOOM_OUT             ACCEL_PATH_ROOT "ViewZoomOut"
+#define ACCEL_PATH_KEY_SWITCH_TAB_PREFIX    ACCEL_PATH_ROOT "TabsSwitch"
+
 #if 1
 /*
 * We don't want to enable content saving until vte supports it async.
@@ -99,6 +128,10 @@ typedef struct
   const char *action_parameter;
   GVariant *parameter;
   gboolean installed;
+#if 1
+  /* Legacy gtkuimanager menu accelerator */
+  const char *legacy_accel_path;
+#endif
 } KeyEntry;
 
 typedef struct
@@ -108,8 +141,8 @@ typedef struct
   const char *user_visible_name;
 } KeyEntryList;
 
-#define ENTRY(name, key, action, type, parameter)       \
-  { name, key, "win." action, (const GVariantType *) type, parameter, NULL, FALSE }
+#define ENTRY(name, key, action, type, parameter) \
+  { name, key, "win." action, (const GVariantType *) type, parameter, NULL, FALSE, ACCEL_PATH_##key }
 
 static KeyEntry file_entries[] = {
   ENTRY (N_("New Terminal in New Tab"),    KEY_NEW_TAB,       "new-terminal",  "(ss)",  "('tab','current')"  
 ),
@@ -251,6 +284,19 @@ key_changed_cb (GSettings *settings,
                                      key_entry->parameter);
     key_entry->installed = TRUE;
   }
+
+#if 1
+  /* Legacy gtkuimanager menu accelerator */
+  {
+    GdkModifierType mods = 0;
+    guint key = 0;
+
+    if (!g_str_equal (value, "disabled"))
+      gtk_accelerator_parse (value, &key, &mods);
+
+    gtk_accel_map_change_entry (key_entry->legacy_accel_path, key, mods, TRUE);
+  }
+#endif
 }
 
 void
diff --git a/src/terminal-app.c b/src/terminal-app.c
index 57a6f15..01af322 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -380,6 +380,13 @@ terminal_app_init (TerminalApp *app)
 
   settings = g_settings_get_child (app->global_settings, "keybindings");
   terminal_accels_init (G_APPLICATION (app), settings);
+
+#if 1
+  /* Legacy gtkuimanager menu accelerator */
+  /* Disallow in-place menu accel changes. Only needed on gtk 3.8,
+   * it's unused and ignored from 3.10 onward. */
+  g_object_set (gtk_settings_get_default (), "gtk-can-change-accels", FALSE, NULL);
+#endif
 }
 
 static void


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