[balsa/gtk4] application-helpers: Use a single controller



commit 5784d5d4cf2f6fe2ca29fb3597a363711dd004fb
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Wed Jan 12 12:23:12 2022 -0500

    application-helpers: Use a single controller
    
    for shortcuts.
    
    Which still do not work, BTW.

 libbalsa/application-helpers.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/libbalsa/application-helpers.c b/libbalsa/application-helpers.c
index 493ba4e3d..897cd0d59 100644
--- a/libbalsa/application-helpers.c
+++ b/libbalsa/application-helpers.c
@@ -156,15 +156,30 @@ libbalsa_window_get_menu_bar(GtkApplicationWindow * window,
  * menumodel    the GMenuModel
  */
 
+static GtkEventController *
+get_controller_from_window(GtkApplicationWindow * window)
+{
+    GtkEventController *controller;
+
+    controller = g_object_get_data(G_OBJECT(window), "libbalsa-shortcut-controller");
+
+    if (controller == NULL) {
+        controller = gtk_shortcut_controller_new();
+        gtk_widget_add_controller(GTK_WIDGET(window), controller);
+        g_object_set_data(G_OBJECT(window), "libbalsa-shortcut-controller", controller);
+    }
+
+    return controller;
+}
+
 void
 libbalsa_window_set_accels(GtkApplicationWindow * window,
                            GMenuModel           * menu_model)
 {
     GtkEventController *controller;
 
-    controller = gtk_shortcut_controller_new();
+    controller = get_controller_from_window(window);
     extract_accels_from_menu(menu_model, GTK_SHORTCUT_CONTROLLER(controller));
-    gtk_widget_add_controller(GTK_WIDGET(window), controller);
 }
 
 void
@@ -203,7 +218,6 @@ libbalsa_window_add_accelerator(GtkApplicationWindow * window,
 
     shortcut = gtk_shortcut_new(trigger, action);
 
-    controller = gtk_shortcut_controller_new();
+    controller = get_controller_from_window(window);
     gtk_shortcut_controller_add_shortcut(GTK_SHORTCUT_CONTROLLER(controller), shortcut);
-    gtk_widget_add_controller(GTK_WIDGET(window), controller);
 }


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