X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkbuilderparser.c;h=634425890528f2f76147756c681f7874c04c0545;hb=af0007d0d89309838fb55cc62c76793b574fa40a;hp=5ea15e3c6090c4d6b7a198a833ef553f26e38534;hpb=920e8b434367f9aa8aab306721cc024e66892e2e;p=~andy%2Fgtk diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index 5ea15e3c6..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,6 +21,7 @@ #include #include +#include #include "gtkbuilderprivate.h" #include "gtkbuilder.h" #include "gtkbuildable.h" @@ -426,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, @@ -634,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); @@ -883,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 @@ -949,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) { @@ -959,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); @@ -1088,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 (); } @@ -1107,7 +1122,6 @@ static const GMarkupParser parser = { end_element, text, NULL, - NULL }; void