diff --git a/ChangeLog b/ChangeLog index b6c801da26..26ee54d8d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2004-04-13 Matthias Clasen + * gtk/gtkuimanager.c (get_child_node): Don't crash if a node + has no name. + (start_element_handler): Accept separators without unique + names. (#133302, Anders Carlsson) + * gtk/gtkactiongroup.c (gtk_action_group_add_action): Document possible accelerator gotcha when using this function. (#139641, Christian Persch) diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index b6c801da26..26ee54d8d5 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,10 @@ 2004-04-13 Matthias Clasen + * gtk/gtkuimanager.c (get_child_node): Don't crash if a node + has no name. + (start_element_handler): Accept separators without unique + names. (#133302, Anders Carlsson) + * gtk/gtkactiongroup.c (gtk_action_group_add_action): Document possible accelerator gotcha when using this function. (#139641, Christian Persch) diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index b6c801da26..26ee54d8d5 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,10 @@ 2004-04-13 Matthias Clasen + * gtk/gtkuimanager.c (get_child_node): Don't crash if a node + has no name. + (start_element_handler): Accept separators without unique + names. (#133302, Anders Carlsson) + * gtk/gtkactiongroup.c (gtk_action_group_add_action): Document possible accelerator gotcha when using this function. (#139641, Christian Persch) diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index b6c801da26..26ee54d8d5 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,10 @@ 2004-04-13 Matthias Clasen + * gtk/gtkuimanager.c (get_child_node): Don't crash if a node + has no name. + (start_element_handler): Accept separators without unique + names. (#133302, Anders Carlsson) + * gtk/gtkactiongroup.c (gtk_action_group_add_action): Document possible accelerator gotcha when using this function. (#139641, Christian Persch) diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index b6c801da26..26ee54d8d5 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,10 @@ 2004-04-13 Matthias Clasen + * gtk/gtkuimanager.c (get_child_node): Don't crash if a node + has no name. + (start_element_handler): Accept separators without unique + names. (#133302, Anders Carlsson) + * gtk/gtkactiongroup.c (gtk_action_group_add_action): Document possible accelerator gotcha when using this function. (#139641, Christian Persch) diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index a109d03f13..8bbf232b57 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,7 @@ +2004-04-13 Matthias Clasen + + * gtk/tmpl/gtkuimanager.sgml: Some corrections. + 2004-04-13 Federico Mena Quintero * gtk/tmpl/gtkfilechooser.sgml: Typo fix. diff --git a/docs/reference/gtk/tmpl/gtkuimanager.sgml b/docs/reference/gtk/tmpl/gtkuimanager.sgml index 8355b05db4..e9700b176d 100644 --- a/docs/reference/gtk/tmpl/gtkuimanager.sgml +++ b/docs/reference/gtk/tmpl/gtkuimanager.sgml @@ -29,6 +29,7 @@ roughly described by the following DTD. <!ATTLIST toolbar name #IMPLIED > <!ATTLIST popup name #IMPLIED > <!ATTLIST placeholder name #IMPLIED > +<!ATTLIST separator name #IMPLIED > <!ATTLIST menu name #IMPLIED action #REQUIRED position (top|bot) #IMPLIED > @@ -126,7 +127,7 @@ The most remarkable feature of #GtkUIManager is that it can overlay a set of menuitems and toolitems over another one, and demerge them later. -Merging is done based on the name of the XML elements. Each element is +Merging is done based on the names of the XML elements. Each element is identified by a path which consists of the names of its anchestors, separated by slashes. For example, the menuitem named "Left" in the example above has the path /ui/menubar/JustifyMenu/Left and the diff --git a/gtk/gtkuimanager.c b/gtk/gtkuimanager.c index f1fde1382b..93ab1a067c 100644 --- a/gtk/gtkuimanager.c +++ b/gtk/gtkuimanager.c @@ -824,7 +824,8 @@ get_child_node (GtkUIManager *self, { for (child = parent->children; child != NULL; child = child->next) { - if (strlen (NODE_INFO (child)->name) == childname_length && + if (NODE_INFO (child)->name && + strlen (NODE_INFO (child)->name) == childname_length && !strncmp (NODE_INFO (child)->name, childname, childname_length)) { /* if undecided about node type, set it */ @@ -1215,15 +1216,24 @@ start_element_handler (GMarkupParseContext *context, !strcmp (element_name, "separator")) { GNode *node; + gint length; if (ctx->state == STATE_TOOLBAR) ctx->state = STATE_TOOLITEM; else ctx->state = STATE_MENUITEM; + if (!strcmp (node_name, "separator")) + { + node_name = NULL; + length = -1; + } + else + length = strlen (node_name); node = get_child_node (self, ctx->current, - node_name, strlen (node_name), + node_name, length, NODE_TYPE_SEPARATOR, TRUE, top); + if (NODE_INFO (node)->action_name == 0) NODE_INFO (node)->action_name = action_quark;