diff options
author | Johan Dahlin <jdahlin@lozenge> | 2007-07-09 13:40:10 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2007-07-09 13:40:10 +0000 |
commit | 83b5d32aef1156246478250c0773d3fcf1853e13 (patch) | |
tree | 5328eee3b32dcaae1c8f8710aa52b145ef3c7cbc /gtk/gtkuimanager.c | |
parent | 8ba20f3ebe233f2987837fbd770516365e9b4566 (diff) | |
download | gtk+-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.c | 33 |
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); } |