diff --git a/app/widgets/gimpactiongroup.c b/app/widgets/gimpactiongroup.c index f540d14d18..0437be1aaa 100644 --- a/app/widgets/gimpactiongroup.c +++ b/app/widgets/gimpactiongroup.c @@ -29,6 +29,7 @@ #include "widgets-types.h" #include "core/gimp.h" +#include "core/gimpmarshal.h" #include "core/gimpviewable.h" #include "gimpactiongroup.h" @@ -41,6 +42,11 @@ #include "gimp-intl.h" +enum +{ + ACTION_ADDED, + LAST_SIGNAL +}; enum { @@ -66,6 +72,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 @@ -102,6 +110,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 2ffc5008f6..298ce873ae 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 6aaaf51626..9db82b8546 100644 --- a/app/widgets/gimpmenufactory.c +++ b/app/widgets/gimpmenufactory.c @@ -191,6 +191,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, @@ -240,6 +249,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);