[gimp/gimp-2-8] Bug 736746 - Alt+Number only switches to lower-numbered windows



commit ac9fdad83a9b8c4da0150ce65b3dedc5d517bbc8
Author: Kristian Rietveld <kris loopnest org>
Date:   Fri Jan 9 22:53:19 2015 +0100

    Bug 736746 - Alt+Number only switches to lower-numbered windows
    
    Add "action-group" signal to GimpActionGroup, such that we can
    properly set the accel group and connect the accelerator on actions
    that are created after the initial setup of the menus.
    
    (cherry picked from commit dd7d332fb832193271af7c534e6db326289718eb)

 app/widgets/gimpactiongroup.c |   24 ++++++++++++++++++++++++
 app/widgets/gimpactiongroup.h |    4 ++++
 app/widgets/gimpmenufactory.c |   13 +++++++++++++
 3 files changed, 41 insertions(+), 0 deletions(-)
---
diff --git a/app/widgets/gimpactiongroup.c b/app/widgets/gimpactiongroup.c
index a399c4b..0d83747 100644
--- a/app/widgets/gimpactiongroup.c
+++ b/app/widgets/gimpactiongroup.c
@@ -28,6 +28,7 @@
 #include "widgets-types.h"
 
 #include "core/gimp.h"
+#include "core/gimpmarshal.h"
 #include "core/gimpviewable.h"
 
 #include "gimpactiongroup.h"
@@ -40,6 +41,11 @@
 
 #include "gimp-intl.h"
 
+enum
+{
+  ACTION_ADDED,
+  LAST_SIGNAL
+};
 
 enum
 {
@@ -65,6 +71,8 @@ static void   gimp_action_group_get_property  (GObject      *object,
 
 G_DEFINE_TYPE (GimpActionGroup, gimp_action_group, GTK_TYPE_ACTION_GROUP)
 
+static guint signals[LAST_SIGNAL] = { 0, };
+
 #define parent_class gimp_action_group_parent_class
 
 
@@ -101,6 +109,16 @@ gimp_action_group_class_init (GimpActionGroupClass *klass)
                                                         G_PARAM_CONSTRUCT_ONLY));
 
   klass->groups = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+  signals[ACTION_ADDED] =
+    g_signal_new ("action-added",
+                  G_OBJECT_CLASS_TYPE (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GimpActionGroupClass, action_added),
+                  NULL, NULL,
+                  gimp_marshal_VOID__OBJECT,
+                  G_TYPE_NONE, 1,
+                  GTK_TYPE_ACTION);
 }
 
 static void
@@ -367,6 +385,7 @@ gimp_action_group_add_actions (GimpActionGroup       *group,
       gtk_action_group_add_action_with_accel (GTK_ACTION_GROUP (group),
                                               GTK_ACTION (action),
                                               entries[i].accelerator);
+      g_signal_emit (group, signals[ACTION_ADDED], 0, action);
 
       if (entries[i].help_id)
         g_object_set_qdata_full (G_OBJECT (action), GIMP_HELP_ID,
@@ -422,6 +441,7 @@ gimp_action_group_add_toggle_actions (GimpActionGroup             *group,
       gtk_action_group_add_action_with_accel (GTK_ACTION_GROUP (group),
                                               GTK_ACTION (action),
                                               entries[i].accelerator);
+      g_signal_emit (group, signals[ACTION_ADDED], 0, action);
 
       if (entries[i].help_id)
         g_object_set_qdata_full (G_OBJECT (action), GIMP_HELP_ID,
@@ -484,6 +504,7 @@ gimp_action_group_add_radio_actions (GimpActionGroup            *group,
       gtk_action_group_add_action_with_accel (GTK_ACTION_GROUP (group),
                                               GTK_ACTION (action),
                                               entries[i].accelerator);
+      g_signal_emit (group, signals[ACTION_ADDED], 0, action);
 
       if (entries[i].help_id)
         g_object_set_qdata_full (G_OBJECT (action), GIMP_HELP_ID,
@@ -547,6 +568,7 @@ gimp_action_group_add_enum_actions (GimpActionGroup           *group,
       gtk_action_group_add_action_with_accel (GTK_ACTION_GROUP (group),
                                               GTK_ACTION (action),
                                               entries[i].accelerator);
+      g_signal_emit (group, signals[ACTION_ADDED], 0, action);
 
       if (entries[i].help_id)
         g_object_set_qdata_full (G_OBJECT (action), GIMP_HELP_ID,
@@ -602,6 +624,7 @@ gimp_action_group_add_string_actions (GimpActionGroup             *group,
       gtk_action_group_add_action_with_accel (GTK_ACTION_GROUP (group),
                                               GTK_ACTION (action),
                                               entries[i].accelerator);
+      g_signal_emit (group, signals[ACTION_ADDED], 0, action);
 
       if (entries[i].help_id)
         g_object_set_qdata_full (G_OBJECT (action), GIMP_HELP_ID,
@@ -643,6 +666,7 @@ gimp_action_group_add_plug_in_actions (GimpActionGroup             *group,
       gtk_action_group_add_action_with_accel (GTK_ACTION_GROUP (group),
                                               GTK_ACTION (action),
                                               entries[i].accelerator);
+      g_signal_emit (group, signals[ACTION_ADDED], 0, action);
 
       if (entries[i].help_id)
         g_object_set_qdata_full (G_OBJECT (action), GIMP_HELP_ID,
diff --git a/app/widgets/gimpactiongroup.h b/app/widgets/gimpactiongroup.h
index 490918d..f84d963 100644
--- a/app/widgets/gimpactiongroup.h
+++ b/app/widgets/gimpactiongroup.h
@@ -50,6 +50,10 @@ struct _GimpActionGroupClass
   GtkActionGroupClass  parent_class;
 
   GHashTable          *groups;
+
+  /* signals */
+  void (* action_added) (GimpActionGroup *group,
+                         GtkAction       *action);
 };
 
 struct _GimpActionEntry
diff --git a/app/widgets/gimpmenufactory.c b/app/widgets/gimpmenufactory.c
index 731ebe6..e9db214 100644
--- a/app/widgets/gimpmenufactory.c
+++ b/app/widgets/gimpmenufactory.c
@@ -190,6 +190,15 @@ gimp_menu_factory_get_registered_menus (GimpMenuFactory *factory)
   return factory->p->registered_menus;
 }
 
+static void
+gimp_menu_factory_manager_action_added (GimpActionGroup *group,
+                                        GtkAction       *action,
+                                        GtkAccelGroup   *accel_group)
+{
+  gtk_action_set_accel_group (action, accel_group);
+  gtk_action_connect_accelerator (action);
+}
+
 GimpUIManager *
 gimp_menu_factory_manager_new (GimpMenuFactory *factory,
                                const gchar     *identifier,
@@ -239,6 +248,10 @@ gimp_menu_factory_manager_new (GimpMenuFactory *factory,
 
               g_list_free (actions);
 
+              g_signal_connect_object (group, "action-added",
+                                       G_CALLBACK (gimp_menu_factory_manager_action_added),
+                                       accel_group, 0);
+
               gtk_ui_manager_insert_action_group (GTK_UI_MANAGER (manager),
                                                   GTK_ACTION_GROUP (group),
                                                   -1);


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