X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkbuilderparser.c;h=634425890528f2f76147756c681f7874c04c0545;hb=67f5e595a796a8321d6dc7737c58476564998c07;hp=ef2e5e9e091e20319eca001a68e56fa505b2371c;hpb=0a07e9733bb259598a09515a3e4cdbcda5feef57;p=~andy%2Fgtk diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index ef2e5e9e0..634425890 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -13,9 +13,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #include "config.h" @@ -23,13 +21,13 @@ #include #include -#include "gtktypeutils.h" +#include #include "gtkbuilderprivate.h" #include "gtkbuilder.h" #include "gtkbuildable.h" #include "gtkdebug.h" #include "gtkversion.h" -#include "gtktypeutils.h" +#include "gtktypebuiltins.h" #include "gtkintl.h" @@ -404,7 +402,7 @@ parse_object (GMarkupParseContext *context, { g_set_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_DUPLICATE_ID, - _("Duplicate object id '%s' on line %d (previously on line %d)"), + _("Duplicate object ID '%s' on line %d (previously on line %d)"), object_id, line, line2); return; } @@ -427,6 +425,14 @@ free_object_info (ObjectInfo *info) g_slice_free (ObjectInfo, info); } +static void +free_menu_info (MenuInfo *info) +{ + g_free (info->id); + g_hash_table_unref (info->objects); + g_slice_free (MenuInfo, info); +} + static void parse_child (ParserData *data, const gchar *element_name, @@ -635,9 +641,9 @@ _free_signal_info (SignalInfo *info, g_slice_free (SignalInfo, info); } -void -_free_requires_info (RequiresInfo *info, - gpointer user_data) +static void +free_requires_info (RequiresInfo *info, + gpointer user_data) { g_free (info->library); g_slice_free (RequiresInfo, info); @@ -835,7 +841,7 @@ start_element (GMarkupParseContext *context, ParserData *data = (ParserData*)user_data; #ifdef GTK_ENABLE_DEBUG - if (gtk_debug_flags & GTK_DEBUG_BUILDER) + if (gtk_get_debug_flags () & GTK_DEBUG_BUILDER) { GString *tags = g_string_new (""); int i; @@ -884,6 +890,8 @@ start_element (GMarkupParseContext *context, parse_signal (data, element_name, names, values, error); else if (strcmp (element_name, "interface") == 0) parse_interface (data, element_name, names, values, error); + else if (strcmp (element_name, "menu") == 0) + _gtk_builder_menu_start (data, element_name, names, values, error); else if (strcmp (element_name, "placeholder") == 0) { /* placeholder has no special treatmeant, but it needs an @@ -950,7 +958,7 @@ end_element (GMarkupParseContext *context, req_info->major, req_info->minor, GTK_MAJOR_VERSION, GTK_MINOR_VERSION); } - _free_requires_info (req_info, NULL); + free_requires_info (req_info, NULL); } else if (strcmp (element_name, "interface") == 0) { @@ -960,6 +968,10 @@ end_element (GMarkupParseContext *context, /* If outside a requested object, simply ignore this tag */ return; } + else if (strcmp (element_name, "menu") == 0) + { + _gtk_builder_menu_end (data); + } else if (strcmp (element_name, "object") == 0) { ObjectInfo *object_info = state_pop_info (data, ObjectInfo); @@ -1089,17 +1101,19 @@ text (GMarkupParseContext *context, static void free_info (CommonInfo *info) { - if (strcmp (info->tag.name, "object") == 0) + if (strcmp (info->tag.name, "object") == 0) free_object_info ((ObjectInfo *)info); - else if (strcmp (info->tag.name, "child") == 0) + else if (strcmp (info->tag.name, "child") == 0) free_child_info ((ChildInfo *)info); - else if (strcmp (info->tag.name, "property") == 0) + else if (strcmp (info->tag.name, "property") == 0) free_property_info ((PropertyInfo *)info); - else if (strcmp (info->tag.name, "signal") == 0) + else if (strcmp (info->tag.name, "signal") == 0) _free_signal_info ((SignalInfo *)info, NULL); - else if (strcmp (info->tag.name, "requires") == 0) - _free_requires_info ((RequiresInfo *)info, NULL); - else + else if (strcmp (info->tag.name, "requires") == 0) + free_requires_info ((RequiresInfo *)info, NULL); + else if (strcmp (info->tag.name, "menu") == 0) + free_menu_info ((MenuInfo *)info); + else g_assert_not_reached (); } @@ -1108,7 +1122,6 @@ static const GMarkupParser parser = { end_element, text, NULL, - NULL }; void