diff --git a/ChangeLog b/ChangeLog index e93de9456b..ebcfb4c3b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2004-05-05 Michael Natterer + + Finally enable global accelerators in all docks: + + * app/widgets/gimpimagedock.c (gimp_image_dock_constructor): + iterate all of the UI manager's actions and enable their + accelerators manually. Fixes bug #119878. + 2004-05-05 Sven Neumann * app/widgets/gimpviewabledialog.c: added construct properties to diff --git a/app/widgets/gimpimagedock.c b/app/widgets/gimpimagedock.c index b44e21f131..81581689be 100644 --- a/app/widgets/gimpimagedock.c +++ b/app/widgets/gimpimagedock.c @@ -224,6 +224,9 @@ gimp_image_dock_constructor (GType type, GObject *object; GimpImageDock *dock; GimpMenuFactory *menu_factory; + GtkUIManager *ui_manager; + GtkAccelGroup *accel_group; + GList *groups; object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params); @@ -234,8 +237,31 @@ gimp_image_dock_constructor (GType type, dock->ui_manager = gimp_menu_factory_manager_new (menu_factory, "", dock, FALSE); - gtk_window_add_accel_group (GTK_WINDOW (object), - gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (dock->ui_manager))); + ui_manager = GTK_UI_MANAGER (dock->ui_manager); + + accel_group = gtk_ui_manager_get_accel_group (ui_manager); + + for (groups = gtk_ui_manager_get_action_groups (ui_manager); + groups; + groups = g_list_next (groups)) + { + GList *actions; + GList *list; + + actions = gtk_action_group_list_actions (groups->data); + + for (list = actions; list; list = g_list_next (list)) + { + GtkAction *action = list->data; + + gtk_action_set_accel_group (action, accel_group); + gtk_action_connect_accelerator (action); + } + + g_list_free (actions); + } + + gtk_window_add_accel_group (GTK_WINDOW (object), accel_group); return object; } diff --git a/app/widgets/gimpmenudock.c b/app/widgets/gimpmenudock.c index b44e21f131..81581689be 100644 --- a/app/widgets/gimpmenudock.c +++ b/app/widgets/gimpmenudock.c @@ -224,6 +224,9 @@ gimp_image_dock_constructor (GType type, GObject *object; GimpImageDock *dock; GimpMenuFactory *menu_factory; + GtkUIManager *ui_manager; + GtkAccelGroup *accel_group; + GList *groups; object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params); @@ -234,8 +237,31 @@ gimp_image_dock_constructor (GType type, dock->ui_manager = gimp_menu_factory_manager_new (menu_factory, "", dock, FALSE); - gtk_window_add_accel_group (GTK_WINDOW (object), - gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (dock->ui_manager))); + ui_manager = GTK_UI_MANAGER (dock->ui_manager); + + accel_group = gtk_ui_manager_get_accel_group (ui_manager); + + for (groups = gtk_ui_manager_get_action_groups (ui_manager); + groups; + groups = g_list_next (groups)) + { + GList *actions; + GList *list; + + actions = gtk_action_group_list_actions (groups->data); + + for (list = actions; list; list = g_list_next (list)) + { + GtkAction *action = list->data; + + gtk_action_set_accel_group (action, accel_group); + gtk_action_connect_accelerator (action); + } + + g_list_free (actions); + } + + gtk_window_add_accel_group (GTK_WINDOW (object), accel_group); return object; }