summaryrefslogtreecommitdiff
path: root/gtk/tools
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-03-27 21:23:56 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-03-27 21:48:12 -0400
commit3631878cee4d715cec8df27c29be202c38d0ec92 (patch)
treebe3321ea92f3713bed653b13a2e717520c54d8c8 /gtk/tools
parent26de69eaae928c9e1fc20827ed8987080b5221e4 (diff)
downloadgtk+-3631878cee4d715cec8df27c29be202c38d0ec92.tar.gz
builder-tool: Rewrite paned child properties
Diffstat (limited to 'gtk/tools')
-rw-r--r--gtk/tools/gtk-builder-tool-simplify.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/gtk/tools/gtk-builder-tool-simplify.c b/gtk/tools/gtk-builder-tool-simplify.c
index 217bab37da..e447ac447d 100644
--- a/gtk/tools/gtk-builder-tool-simplify.c
+++ b/gtk/tools/gtk-builder-tool-simplify.c
@@ -198,6 +198,8 @@ keep_for_rewrite (const char *class_name,
{ "GtkPopoverMenu", "submenu", 1 },
{ "GtkToolbar", "expand", 1 },
{ "GtkToolbar", "homogeneous", 1 },
+ { "GtkPaned", "resize", 1 },
+ { "GtkPaned", "shrink", 1 },
};
gboolean found;
gint k;
@@ -940,6 +942,7 @@ rewrite_child_prop_to_prop_child (Element *element,
free_element (replaced);
}
}
+
static void
rewrite_child_prop_to_prop (Element *element,
MyParserData *data,
@@ -956,6 +959,115 @@ rewrite_child_prop_to_prop (Element *element,
}
}
+static void
+rewrite_paned_child (Element *element,
+ MyParserData *data,
+ Element *child,
+ const char *suffix)
+{
+ Element *resize = NULL;
+ Element *shrink = NULL;
+ GList *l, *ll;
+
+ for (l = child->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", "resize"))
+ resize = elt2;
+ if (g_str_equal (elt2->element_name, "property") &&
+ has_attribute (elt2, "name", "shrink"))
+ shrink = elt2;
+ }
+ if (resize)
+ elt->children = g_list_remove (elt->children, resize);
+ if (shrink)
+ elt->children = g_list_remove (elt->children, shrink);
+ if (elt->children == NULL)
+ {
+ child->children = g_list_remove (child->children, elt);
+ free_element (elt);
+ }
+ }
+
+ if (resize || shrink)
+ break;
+ }
+
+ if (resize)
+ {
+ Element *elt;
+
+ elt = g_new0 (Element, 1);
+ elt->parent = element;
+ elt->element_name = g_strdup ("property");
+ elt->attribute_names = g_new0 (char *, 2);
+ elt->attribute_names[0] = g_strdup ("name");
+ elt->attribute_values = g_new0 (char *, 2);
+ elt->attribute_values[0] = g_strconcat ("resize-", suffix, NULL);
+ elt->data = g_strdup (resize->data);
+
+ element->children = g_list_prepend (element->children, elt);
+
+ free_element (resize);
+ }
+
+ if (shrink)
+ {
+ Element *elt;
+
+ elt = g_new0 (Element, 1);
+ elt->parent = element;
+ elt->element_name = g_strdup ("property");
+ elt->attribute_names = g_new0 (char *, 2);
+ elt->attribute_names[0] = g_strdup ("name");
+ elt->attribute_values = g_new0 (char *, 2);
+ elt->attribute_values[0] = g_strconcat ("shrink-", suffix, NULL);
+ elt->data = g_strdup (shrink->data);
+
+ element->children = g_list_prepend (element->children, elt);
+
+ free_element (shrink);
+ }
+}
+
+static void
+rewrite_paned (Element *element,
+ MyParserData *data)
+{
+ Element *child1 = NULL;
+ Element *child2 = NULL;
+ GList *l;
+
+ for (l = element->children; l; l = l->next)
+ {
+ Element *elt = l->data;
+
+ if (g_str_equal (elt->element_name, "child"))
+ {
+ if (child1 == NULL)
+ child1 = elt;
+ else if (child2 == NULL)
+ child2 = elt;
+ else
+ break;
+ }
+ }
+
+ if (child1)
+ rewrite_paned_child (element, data, child1, "child1");
+
+ if (child2)
+ rewrite_paned_child (element, data, child2, "child2");
+}
+
static gboolean
simplify_element (Element *element,
MyParserData *data)
@@ -1023,6 +1135,10 @@ simplify_element (Element *element,
g_str_equal (get_class_name (element), "GtkToolbar"))
rewrite_child_prop_to_prop (element, data, "homogeneous", "homogeneous");
+ if (g_str_equal (element->element_name, "object") &&
+ g_str_equal (get_class_name (element), "GtkPaned"))
+ rewrite_paned (element, data);
+
if (g_str_equal (element->element_name, "property") &&
property_has_been_removed (element, data))
return TRUE;