summaryrefslogtreecommitdiff
path: root/gtk/gtkuimanager.c
diff options
context:
space:
mode:
authorJohan Dahlin <jdahlin@lozenge>2007-07-09 13:40:10 +0000
committerJohan Dahlin <johan@src.gnome.org>2007-07-09 13:40:10 +0000
commit83b5d32aef1156246478250c0773d3fcf1853e13 (patch)
tree5328eee3b32dcaae1c8f8710aa52b145ef3c7cbc /gtk/gtkuimanager.c
parent8ba20f3ebe233f2987837fbd770516365e9b4566 (diff)
downloadgtk+-83b5d32aef1156246478250c0773d3fcf1853e13.tar.gz
|___* demos/gtk-demo/demo.ui: |___* gtk/gtk-builder-convert: |___*
2007-07-09 Johan Dahlin,,, <jdahlin@lozenge> |___* demos/gtk-demo/demo.ui: |___* gtk/gtk-builder-convert: |___* gtk/gtkactiongroup.c: (gtk_action_group_buildable_init), |___(gtk_action_group_buildable_add_child), |___(accelerator_start_element), |___(gtk_action_group_buildable_custom_tag_start), |___(gtk_action_group_buildable_custom_tag_end): |___* gtk/gtkuimanager.c: (child_hierarchy_changed_cb), |___(gtk_ui_manager_buildable_construct_child): |___* tests/buildertest.c: (test_uimanager_simple): |___Add actiongroup/action accelerator support for builder. #454654 svn path=/trunk/; revision=18408
Diffstat (limited to 'gtk/gtkuimanager.c')
-rw-r--r--gtk/gtkuimanager.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/gtk/gtkuimanager.c b/gtk/gtkuimanager.c
index 3e0ac69be6..687567d3d5 100644
--- a/gtk/gtkuimanager.c
+++ b/gtk/gtkuimanager.c
@@ -453,6 +453,29 @@ gtk_ui_manager_buildable_add_child (GtkBuildable *buildable,
pos);
}
+static void
+child_hierarchy_changed_cb (GtkWidget *widget,
+ GtkWidget *unused,
+ GtkUIManager *uimgr)
+{
+ GtkWidget *toplevel;
+ GtkAccelGroup *group;
+ GSList *groups;
+
+ toplevel = gtk_widget_get_toplevel (widget);
+ if (!toplevel || !GTK_IS_WINDOW (toplevel))
+ return;
+
+ group = gtk_ui_manager_get_accel_group (uimgr);
+ groups = gtk_accel_groups_from_object (toplevel);
+ if (g_slist_find (groups, group) == NULL)
+ gtk_window_add_accel_group (GTK_WINDOW (toplevel), group);
+
+ g_signal_handlers_disconnect_by_func (widget,
+ child_hierarchy_changed_cb,
+ uimgr);
+}
+
static GObject *
gtk_ui_manager_buildable_construct_child (GtkBuildable *buildable,
GtkBuilder *builder,
@@ -464,10 +487,16 @@ gtk_ui_manager_buildable_construct_child (GtkBuildable *buildable,
name = g_strdup_printf ("ui/%s", id);
widget = gtk_ui_manager_get_widget (GTK_UI_MANAGER (buildable), name);
if (!widget)
- g_error ("Unknown ui manager child: %s\n", name);
-
+ {
+ g_error ("Unknown ui manager child: %s\n", name);
+ g_free (name);
+ return NULL;
+ }
g_free (name);
+ g_signal_connect (widget, "hierarchy-changed",
+ G_CALLBACK (child_hierarchy_changed_cb),
+ GTK_UI_MANAGER (buildable));
return G_OBJECT (widget);
}