Blame SOURCES/gnome-terminal-keypad-accels.patch

c8b51e
From 6858b70c0ad36a1a072ec545b2e8bea8e926b06d Mon Sep 17 00:00:00 2001
c8b51e
From: Egmont Koblinger <egmont@gmail.com>
c8b51e
Date: Wed, 18 Sep 2019 13:46:47 +0200
c8b51e
Subject: [PATCH 1/2] build: Bump gtk min-req version to 3.18
c8b51e
c8b51e
https://gitlab.gnome.org/GNOME/gnome-terminal/issues/162
c8b51e
---
c8b51e
 configure.ac          |  2 +-
c8b51e
 src/terminal-accels.c | 26 ++++++++++++--------------
c8b51e
 2 files changed, 13 insertions(+), 15 deletions(-)
c8b51e
c8b51e
diff --git a/configure.ac b/configure.ac
c8b51e
index 00028858c654..5b5bd4133970 100644
c8b51e
--- a/configure.ac
c8b51e
+++ b/configure.ac
c8b51e
@@ -61,7 +61,7 @@ AC_MSG_RESULT([$with_gtk])
c8b51e
 case "$with_gtk" in
c8b51e
   3.0) GTK_API_VERSION=3.0
c8b51e
        GTK_REQUIRED=3.12.0
c8b51e
-       GTK_MIN_REQUIRED=3.8
c8b51e
+       GTK_MIN_REQUIRED=3.18
c8b51e
        GTK_MAX_ALLOWED=3.22
c8b51e
        VTE_API_VERSION=2.91
c8b51e
        VTE_REQUIRED=0.52.2
c8b51e
diff --git a/src/terminal-accels.c b/src/terminal-accels.c
c8b51e
index 2ce4635d09cd..1871037f7fab 100644
c8b51e
--- a/src/terminal-accels.c
c8b51e
+++ b/src/terminal-accels.c
c8b51e
@@ -259,6 +259,7 @@ key_changed_cb (GSettings *settings,
c8b51e
                 gpointer user_data)
c8b51e
 {
c8b51e
   GtkApplication *application = user_data;
c8b51e
+  const gchar *accels[2] = { NULL, NULL };
c8b51e
 
c8b51e
   _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
c8b51e
                          "key %s changed\n",
c8b51e
@@ -278,6 +279,8 @@ key_changed_cb (GSettings *settings,
c8b51e
   gs_free char *detailed = g_action_print_detailed_name (key_entry->action_name,
c8b51e
                                                          key_entry->parameter);
c8b51e
   gs_unref_variant GVariant *shadow_parameter = g_variant_new_string (detailed);
c8b51e
+  gs_free char *shadow_detailed = g_action_print_detailed_name (key_entry->shadow_action_name,
c8b51e
+                                                                shadow_parameter);
c8b51e
 
c8b51e
   /* We want to always consume the action's accelerators, even if the corresponding
c8b51e
    * action is insensitive, so the corresponding shortcut key escape code isn't sent
c8b51e
@@ -289,22 +292,17 @@ key_changed_cb (GSettings *settings,
c8b51e
    */
c8b51e
 
c8b51e
   if (g_str_equal (value, "disabled")) {
c8b51e
-    gtk_application_remove_accelerator (application,
c8b51e
-                                        key_entry->action_name,
c8b51e
-                                        key_entry->parameter);
c8b51e
-    gtk_application_remove_accelerator (application,
c8b51e
-                                        key_entry->shadow_action_name,
c8b51e
-                                        shadow_parameter);
c8b51e
+    accels[0] = NULL;
c8b51e
   } else {
c8b51e
-    gtk_application_add_accelerator (application,
c8b51e
-                                     value,
c8b51e
-                                     key_entry->action_name,
c8b51e
-                                     key_entry->parameter);
c8b51e
-    gtk_application_add_accelerator (application,
c8b51e
-                                     value,
c8b51e
-                                     key_entry->shadow_action_name,
c8b51e
-                                     shadow_parameter);
c8b51e
+    accels[0] = value;
c8b51e
   }
c8b51e
+
c8b51e
+  gtk_application_set_accels_for_action (application,
c8b51e
+                                         detailed,
c8b51e
+                                         accels);
c8b51e
+  gtk_application_set_accels_for_action (application,
c8b51e
+                                         shadow_detailed,
c8b51e
+                                         accels);
c8b51e
 }
c8b51e
 
c8b51e
 void
c8b51e
-- 
c8b51e
2.28.0
c8b51e
c8b51e
c8b51e
From 0a273ebcd6945c6da9b58f4183ff2ccc300d2278 Mon Sep 17 00:00:00 2001
c8b51e
From: Debarshi Ray <debarshir@gnome.org>
c8b51e
Date: Thu, 19 Nov 2020 19:25:05 +0100
c8b51e
Subject: [PATCH 2/2] accels: Support using the '0', '+' and '-' keys from the
c8b51e
 numeric keypad
c8b51e
c8b51e
Currently, the default accelerators for zooming (ie., Ctrl+0, Ctrl++
c8b51e
and Ctrl+-) only work with the alphanumeric keys, not the numeric
c8b51e
keypad, which can confuse users. From now on, any accelerator that has
c8b51e
the '0', '+' or '-' key will work with both sets of keys.
c8b51e
c8b51e
https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/313
c8b51e
---
c8b51e
 src/terminal-accels.c | 51 +++++++++++++++++++++++++++++++++++++++++--
c8b51e
 1 file changed, 49 insertions(+), 2 deletions(-)
c8b51e
c8b51e
diff --git a/src/terminal-accels.c b/src/terminal-accels.c
c8b51e
index 1871037f7fab..ab319a83f334 100644
c8b51e
--- a/src/terminal-accels.c
c8b51e
+++ b/src/terminal-accels.c
c8b51e
@@ -22,6 +22,7 @@
c8b51e
 
c8b51e
 #include <glib.h>
c8b51e
 #include <glib/gi18n.h>
c8b51e
+#include <gdk/gdk.h>
c8b51e
 #include <gtk/gtk.h>
c8b51e
 
c8b51e
 #include "terminal-accels.h"
c8b51e
@@ -253,13 +254,45 @@ binding_name (guint            keyval,
c8b51e
   return g_strdup ("disabled");
c8b51e
 }
c8b51e
 
c8b51e
+static guint
c8b51e
+get_alternate_accel_key (guint key)
c8b51e
+{
c8b51e
+  guint retval = 0;
c8b51e
+
c8b51e
+  switch (key) {
c8b51e
+    case GDK_KEY_0:
c8b51e
+      retval = GDK_KEY_KP_0;
c8b51e
+      break;
c8b51e
+    case GDK_KEY_minus:
c8b51e
+      retval = GDK_KEY_KP_Subtract;
c8b51e
+      break;
c8b51e
+    case GDK_KEY_plus:
c8b51e
+      retval = GDK_KEY_KP_Add;
c8b51e
+      break;
c8b51e
+    case GDK_KEY_KP_0:
c8b51e
+      retval = GDK_KEY_0;
c8b51e
+      break;
c8b51e
+    case GDK_KEY_KP_Add:
c8b51e
+      retval = GDK_KEY_plus;
c8b51e
+      break;
c8b51e
+    case GDK_KEY_KP_Subtract:
c8b51e
+      retval = GDK_KEY_minus;
c8b51e
+      break;
c8b51e
+    default:
c8b51e
+      break;
c8b51e
+  }
c8b51e
+
c8b51e
+  return retval;
c8b51e
+}
c8b51e
+
c8b51e
 static void
c8b51e
 key_changed_cb (GSettings *settings,
c8b51e
                 const char *settings_key,
c8b51e
                 gpointer user_data)
c8b51e
 {
c8b51e
   GtkApplication *application = user_data;
c8b51e
-  const gchar *accels[2] = { NULL, NULL };
c8b51e
+  const gchar *accels[3] = { NULL, NULL, NULL };
c8b51e
+  gsize accels_offset = 0;
c8b51e
 
c8b51e
   _terminal_debug_print (TERMINAL_DEBUG_ACCELS,
c8b51e
                          "key %s changed\n",
c8b51e
@@ -275,6 +308,7 @@ key_changed_cb (GSettings *settings,
c8b51e
     }
c8b51e
 
c8b51e
   gs_free char *value = g_settings_get_string (settings, settings_key);
c8b51e
+  gs_free char *alternate_value = NULL;
c8b51e
 
c8b51e
   gs_free char *detailed = g_action_print_detailed_name (key_entry->action_name,
c8b51e
                                                          key_entry->parameter);
c8b51e
@@ -294,7 +328,20 @@ key_changed_cb (GSettings *settings,
c8b51e
   if (g_str_equal (value, "disabled")) {
c8b51e
     accels[0] = NULL;
c8b51e
   } else {
c8b51e
-    accels[0] = value;
c8b51e
+    accels[accels_offset] = value;
c8b51e
+    accels_offset++;
c8b51e
+
c8b51e
+    GdkModifierType mods;
c8b51e
+    guint key;
c8b51e
+    gtk_accelerator_parse (value, &key, &mods;;
c8b51e
+
c8b51e
+    guint alternate_key = get_alternate_accel_key (key);
c8b51e
+
c8b51e
+    if (alternate_key != 0) {
c8b51e
+      alternate_value = gtk_accelerator_name (alternate_key, mods);
c8b51e
+      accels[accels_offset] = alternate_value;
c8b51e
+      accels_offset++;
c8b51e
+    }
c8b51e
   }
c8b51e
 
c8b51e
   gtk_application_set_accels_for_action (application,
c8b51e
-- 
c8b51e
2.28.0
c8b51e