glade3 r1910 - in trunk: . gladeui plugins/gtk+
- From: tvb svn gnome org
- To: svn-commits-list gnome org
- Subject: glade3 r1910 - in trunk: . gladeui plugins/gtk+
- Date: Tue, 16 Sep 2008 20:44:30 +0000 (UTC)
Author: tvb
Date: Tue Sep 16 20:44:30 2008
New Revision: 1910
URL: http://svn.gnome.org/viewvc/glade3?rev=1910&view=rev
Log:
* gladeui/glade-xml-utils.h: Added version macros
* plugins/gtk+/gtk+.xml.in: Added version 2.14
* gladeui/glade-project.c: Now glade loads and saves requires
metadata as comments at the toplevel in libglade and older versions
of gtk+ that dont recognize versioning (i.e. gtk+ < 2.14) (bug 536310)
Modified:
trunk/ChangeLog
trunk/gladeui/glade-project.c
trunk/gladeui/glade-xml-utils.h
trunk/plugins/gtk+/gtk+.xml.in
Modified: trunk/gladeui/glade-project.c
==============================================================================
--- trunk/gladeui/glade-project.c (original)
+++ trunk/gladeui/glade-project.c Tue Sep 16 20:44:30 2008
@@ -1071,6 +1071,35 @@
}
}
+
+static gchar *
+glade_project_read_requires_from_comment (GladeXmlNode *comment,
+ gint *major,
+ gint *minor)
+{
+ gint maj, min;
+ gchar *value, buffer[256];
+ gchar *required_lib = NULL;
+
+ if (!glade_xml_node_is_comment (comment))
+ return FALSE;
+
+ value = glade_xml_get_content (comment);
+ if (value && !strncmp ("interface-requires", value, strlen ("interface-requires")))
+ {
+ if (sscanf (value, "interface-requires %s %d.%d", buffer, &maj, &min) == 3)
+ {
+ if (major) *major = maj;
+ if (minor) *minor = min;
+ required_lib = g_strdup (buffer);
+ }
+ }
+ g_free (value);
+
+ return required_lib;
+}
+
+
static gboolean
glade_project_read_requires (GladeProject *project,
GladeXmlNode *root_node,
@@ -1079,67 +1108,48 @@
GString *string = g_string_new (NULL);
GladeXmlNode *node;
- gchar *required_lib;
+ gchar *required_lib = NULL;
gboolean loadable = TRUE;
gint major, minor;
- for (node = glade_xml_node_get_children (root_node);
- node; node = glade_xml_node_next (node))
+ for (node = glade_xml_node_get_children_with_comments (root_node);
+ node; node = glade_xml_node_next_with_comments (node))
{
/* Skip non "requires" tags */
- if (!glade_xml_node_verify_silent (node, GLADE_XML_TAG_REQUIRES))
+ if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_REQUIRES) ||
+ (required_lib =
+ glade_project_read_requires_from_comment (node, &major, &minor))))
continue;
- if ((required_lib =
- glade_xml_get_property_string_required (node, GLADE_XML_TAG_LIB,
- NULL)) != NULL)
+ if (!required_lib)
{
- /* Dont mention gtk+ as a required lib in
- * the generated glade file
- */
- if (!glade_catalog_is_loaded (required_lib))
- {
- if (!loadable)
- g_string_append (string, ", ");
-
- g_string_append (string, required_lib);
- loadable = FALSE;
- }
- else if (glade_xml_get_property_version (node,
- GLADE_XML_TAG_VERSION,
- &major, &minor))
- glade_project_set_target_version
- (project, required_lib, major, minor);
-
- g_free (required_lib);
+ required_lib =
+ glade_xml_get_property_string_required (node, GLADE_XML_TAG_LIB,
+ NULL);
+ glade_xml_get_property_version (node, GLADE_XML_TAG_VERSION,
+ &major, &minor);
}
- }
+ if (!required_lib) continue;
- /* We use a different tag to save target version metadata in libglade files */
- for (node = glade_xml_node_get_children (root_node);
- node; node = glade_xml_node_next (node))
- {
- /* Skip non "requires" tags */
- if (!glade_xml_node_verify_silent (node, GLADE_XML_TAG_REQUIRES_LIBGLADE_EXTRA))
- continue;
-
- if ((required_lib =
- glade_xml_get_property_string_required (node, GLADE_XML_TAG_LIB,
- NULL)) != NULL)
+ /* Dont mention gtk+ as a required lib in
+ * the generated glade file
+ */
+ if (!glade_catalog_is_loaded (required_lib))
{
- if (glade_xml_get_property_version (node,
- GLADE_XML_TAG_VERSION,
- &major, &minor))
- glade_project_set_target_version
- (project, required_lib, major, minor);
-
+ if (!loadable)
+ g_string_append (string, ", ");
- g_free (required_lib);
+ g_string_append (string, required_lib);
+ loadable = FALSE;
}
+ else
+ glade_project_set_target_version
+ (project, required_lib, major, minor);
+
+ g_free (required_lib);
}
-
if (!loadable)
glade_util_ui_message (glade_app_get_window(),
GLADE_UI_ERROR, NULL,
@@ -2422,28 +2432,17 @@
g_strfreev (lines);
}
-
-static GladeXmlContext *
-glade_project_write (GladeProject *project)
+static void
+glade_project_write_required_libs (GladeProject *project,
+ GladeXmlContext *context,
+ GladeXmlNode *root)
{
GladeProjectFormat fmt;
- GladeXmlContext *context;
- GladeXmlDoc *doc;
- GladeXmlNode *root, *req_node, *comment_node;
+ GladeXmlNode *req_node;
GList *required, *list;
gint major, minor;
gchar *version;
- doc = glade_xml_doc_new ();
- context = glade_xml_context_new (doc, NULL);
- root = glade_xml_node_new (context, GLADE_XML_TAG_PROJECT (project->priv->format));
- glade_xml_doc_set_root (doc, root);
-
- glade_project_update_comment (project);
-/* comment_node = glade_xml_node_new_comment (context, project->priv->comment); */
-
- /* XXX Need to append this to the doc ! not the ROOT !
- glade_xml_node_append_child (root, comment_node); */
fmt = glade_project_get_format (project);
if ((required = glade_project_required_libs (project)) != NULL)
@@ -2460,12 +2459,23 @@
(fmt == GLADE_PROJECT_FORMAT_LIBGLADE &&
strcmp ("gtk+", (gchar *)list->data)))
{
- req_node = glade_xml_node_new (context, GLADE_XML_TAG_REQUIRES);
- glade_xml_node_append_child (root, req_node);
- glade_xml_node_set_property_string (req_node,
- GLADE_XML_TAG_LIB,
- (gchar *)list->data);
-
+ if (GLADE_GTKBUILDER_HAS_VERSIONING (major, minor))
+ {
+ req_node = glade_xml_node_new (context, GLADE_XML_TAG_REQUIRES);
+ glade_xml_node_append_child (root, req_node);
+ glade_xml_node_set_property_string (req_node,
+ GLADE_XML_TAG_LIB,
+ (gchar *)list->data);
+ }
+ else
+ {
+ gchar *comment =
+ g_strdup_printf ("interface-requires %s %s",
+ (gchar *)list->data, version);
+ req_node = glade_xml_node_new_comment (context, comment);
+ glade_xml_node_append_child (root, req_node);
+ g_free (comment);
+ }
if (fmt != GLADE_PROJECT_FORMAT_LIBGLADE)
glade_xml_node_set_property_string
@@ -2475,17 +2485,11 @@
/* Add extra metadata for libglade */
if (fmt == GLADE_PROJECT_FORMAT_LIBGLADE)
{
- req_node = glade_xml_node_new
- (context, GLADE_XML_TAG_REQUIRES_LIBGLADE_EXTRA);
+ gchar *comment = g_strdup_printf ("interface-requires %s %s",
+ (gchar *)list->data, version);
+ req_node = glade_xml_node_new_comment (context, comment);
glade_xml_node_append_child (root, req_node);
-
- glade_xml_node_set_property_string (req_node,
- GLADE_XML_TAG_LIB,
- (gchar *)list->data);
-
- glade_xml_node_set_property_string (req_node,
- GLADE_XML_TAG_VERSION,
- version);
+ g_free (comment);
}
g_free (version);
@@ -2494,6 +2498,29 @@
g_list_free (required);
}
+}
+
+static GladeXmlContext *
+glade_project_write (GladeProject *project)
+{
+ GladeXmlContext *context;
+ GladeXmlDoc *doc;
+ GladeXmlNode *root, *comment_node;
+ GList *list;
+
+ doc = glade_xml_doc_new ();
+ context = glade_xml_context_new (doc, NULL);
+ root = glade_xml_node_new (context, GLADE_XML_TAG_PROJECT (project->priv->format));
+ glade_xml_doc_set_root (doc, root);
+
+ glade_project_update_comment (project);
+/* comment_node = glade_xml_node_new_comment (context, project->priv->comment); */
+
+ /* XXX Need to append this to the doc ! not the ROOT !
+ glade_xml_node_append_child (root, comment_node); */
+
+ glade_project_write_required_libs (project, context, root);
+
/* Any automatically generated stuff goes here */
glade_project_generate_nodes (project, context, root);
Modified: trunk/gladeui/glade-xml-utils.h
==============================================================================
--- trunk/gladeui/glade-xml-utils.h (original)
+++ trunk/gladeui/glade-xml-utils.h Tue Sep 16 20:44:30 2008
@@ -28,15 +28,20 @@
((type == GLADE_PROJECT_FORMAT_LIBGLADE) ? \
GLADE_XML_TAG_LIBGLADE_WIDGET : GLADE_XML_TAG_BUILDER_WIDGET)
-/* Used for catalog tags and attributes */
+#define GLADE_GTKBUILDER_VERSIONING_BASE_MAJOR 2
+#define GLADE_GTKBUILDER_VERSIONING_BASE_MINOR 14
+#define GLADE_GTKBUILDER_HAS_VERSIONING(maj, min) \
+ ((maj) >= GLADE_GTKBUILDER_VERSIONING_BASE_MAJOR && \
+ (min) >= GLADE_GTKBUILDER_VERSIONING_BASE_MINOR)
+
+/* Used for catalog tags and attributes */
#define GLADE_XML_TAG_LIBGLADE_PROJECT "glade-interface"
#define GLADE_XML_TAG_BUILDER_PROJECT "interface"
#define GLADE_XML_TAG_LIBGLADE_WIDGET "widget"
#define GLADE_XML_TAG_BUILDER_WIDGET "object"
#define GLADE_XML_TAG_VERSION "version"
-#define GLADE_XML_TAG_REQUIRES_LIBGLADE_EXTRA "requires-version"
#define GLADE_XML_TAG_REQUIRES "requires"
#define GLADE_XML_TAG_LIB "lib"
#define GLADE_XML_TAG_PROPERTY "property"
Modified: trunk/plugins/gtk+/gtk+.xml.in
==============================================================================
--- trunk/plugins/gtk+/gtk+.xml.in (original)
+++ trunk/plugins/gtk+/gtk+.xml.in Tue Sep 16 20:44:30 2008
@@ -1,6 +1,6 @@
<glade-catalog name="gtk+"
- version="2.12"
- targetable="2.10,2.8"
+ version="2.14"
+ targetable="2.10,2.8,2.12"
icon-prefix="gtk"
library="gladegtk"
domain="glade3"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]