[gtk/pack-type: 4/5] builder-tool: Rewrite pack-type
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/pack-type: 4/5] builder-tool: Rewrite pack-type
- Date: Wed, 27 Mar 2019 17:37:25 +0000 (UTC)
commit c507160bf2f8238385e770f2d4a8244e44799cf9
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Mar 27 13:14:39 2019 -0400
builder-tool: Rewrite pack-type
Replace GtkActionBar::pack-type and GtHeaderBar::pack-type
with child types when going from 3 to 4.
gtk/tools/gtk-builder-tool-simplify.c | 112 ++++++++++++++++++++++++++++++----
1 file changed, 99 insertions(+), 13 deletions(-)
---
diff --git a/gtk/tools/gtk-builder-tool-simplify.c b/gtk/tools/gtk-builder-tool-simplify.c
index 72d73ea786..76dc3ea840 100644
--- a/gtk/tools/gtk-builder-tool-simplify.c
+++ b/gtk/tools/gtk-builder-tool-simplify.c
@@ -323,11 +323,25 @@ value_is_default (MyParserData *data,
return ret;
}
+static const char *
+get_attribute_value (Element *element,
+ const char *name)
+{
+ int i;
+
+ for (i = 0; element->attribute_names[i]; i++)
+ {
+ if (g_str_equal (element->attribute_names[i], name))
+ return element->attribute_values[i];
+ }
+
+ return NULL;
+}
+
static const char *
get_class_name (Element *element)
{
Element *parent = element->parent;
- int i;
if (g_str_equal (element->element_name, "object"))
parent = element;
@@ -337,19 +351,11 @@ get_class_name (Element *element)
if (g_str_equal (parent->element_name, "object"))
{
- for (i = 0; parent->attribute_names[i]; i++)
- {
- if (g_str_equal (parent->attribute_names[i], "class"))
- return parent->attribute_values[i];
- }
+ return get_attribute_value (parent, "class");
}
else if (g_str_equal (parent->element_name, "template"))
{
- for (i = 0; parent->attribute_names[i]; i++)
- {
- if (g_str_equal (parent->attribute_names[i], "parent"))
- return parent->attribute_values[i];
- }
+ return get_attribute_value (parent, "parent");
}
return NULL;
@@ -420,6 +426,11 @@ property_can_be_omitted (Element *element,
property_name = (const gchar *)element->attribute_values[i];
}
+ if ((strcmp (class_name, "GtkActionBar") == 0 ||
+ strcmp (class_name, "GtkHeaderBar") == 0) &&
+ strcmp (property_name, "pack-type") == 0)
+ return FALSE; /* keep, will be rewritten */
+
if (translatable)
return FALSE;
@@ -460,8 +471,8 @@ property_has_been_removed (Element *element,
{ "GtkActionBar", "position", 1 },
{ "GtkButtonBox", "secondary", 1 },
{ "GtkButtonBox", "non-homogeneous", 1 },
- { "GtkBox", "pack-type", 1 },
{ "GtkBox", "position", 1 },
+ { "GtkBox", "pack-type", 1 },
{ "GtkHeaderBar", "position", 1 },
{ "GtkPopoverMenu", "position", 1 },
{ "GtkMenu", "left-attach", 1 },
@@ -645,7 +656,7 @@ has_attribute (Element *elt,
for (i = 0; elt->attribute_names[i]; i++)
{
if (strcmp (elt->attribute_names[i], name) == 0 &&
- strcmp (elt->attribute_values[i], value) == 0)
+ (value == NULL || strcmp (elt->attribute_values[i], value) == 0))
return TRUE;
}
@@ -756,6 +767,76 @@ rewrite_notebook (Element *element,
element->children = new_children;
}
+static void
+rewrite_pack_type_child (Element *element,
+ MyParserData *data)
+{
+ Element *pack_type = NULL;
+ GList *l, *ll;
+
+ if (!g_str_equal (element->element_name, "child"))
+ return;
+
+ for (l = element->children; l; l = l->next)
+ {
+ Element *elt = l->data;
+
+ if (g_str_equal (elt->element_name, "packing"))
+ {
+ for (ll = elt->children; ll; ll = ll->next)
+ {
+ Element *elt2 = ll->data;
+
+ if (g_str_equal (elt2->element_name, "property") &&
+ has_attribute (elt2, "name", "pack-type"))
+ {
+ pack_type = elt2;
+ elt->children = g_list_remove (elt->children, pack_type);
+ break;
+ }
+ }
+ }
+ }
+
+ if (pack_type)
+ {
+ char **attnames = g_new0 (char *, g_strv_length (element->attribute_names) + 2);
+ char **attvalues = g_new0 (char *, g_strv_length (element->attribute_names) + 2);
+ int i;
+
+ for (i = 0; element->attribute_names[i]; i++)
+ {
+ attnames[i] = g_strdup (element->attribute_names[i]);
+ attvalues[i] = g_strdup (element->attribute_values[i]);
+ }
+
+ attnames[i] = g_strdup ("type");
+ attvalues[i] = g_strdup (pack_type->data);
+
+ g_strfreev (element->attribute_names);
+ g_strfreev (element->attribute_values);
+
+ element->attribute_names = attnames;
+ element->attribute_values = attvalues;
+
+ free_element (pack_type);
+ }
+}
+
+static void
+rewrite_pack_type (Element *element,
+ MyParserData *data)
+{
+ GList *l;
+
+ for (l = element->children; l; l = l->next)
+ {
+ Element *elt = l->data;
+ if (g_str_equal (elt->element_name, "child"))
+ rewrite_pack_type_child (elt, data);
+ }
+}
+
static gboolean
simplify_element (Element *element,
MyParserData *data)
@@ -806,6 +887,11 @@ simplify_element (Element *element,
g_str_equal (get_class_name (element), "GtkNotebook"))
rewrite_notebook (element, data);
+ if (g_str_equal (element->element_name, "object") &&
+ (g_str_equal (get_class_name (element), "GtkActionBar") ||
+ g_str_equal (get_class_name (element), "GtkHeaderBar")))
+ rewrite_pack_type (element, data);
+
if (g_str_equal (element->element_name, "property") &&
property_has_been_removed (element, data))
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]