forked from AuroraMiddleware/gtk
gtk4-builder-tool: Prefer child properties
Rewrite <child> elements to use child properties where that is easily possible. Fixes: #5609
This commit is contained in:
parent
5105d607de
commit
3de10847b9
@ -4,11 +4,11 @@
|
|||||||
<object class="GtkPaned">
|
<object class="GtkPaned">
|
||||||
<property name="resize-end-child">0</property>
|
<property name="resize-end-child">0</property>
|
||||||
<property name="shrink-start-child">0</property>
|
<property name="shrink-start-child">0</property>
|
||||||
<child>
|
<property name="start-child">
|
||||||
<object class="GtkButton" id="button"/>
|
<object class="GtkButton" id="button"/>
|
||||||
</child>
|
</property>
|
||||||
<child>
|
<property name="end-child">
|
||||||
<object class="GtkLabel" id="label"/>
|
<object class="GtkLabel" id="label"/>
|
||||||
</child>
|
</property>
|
||||||
</object>
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
10
testsuite/tools/simplify-data/test10.expected
Normal file
10
testsuite/tools/simplify-data/test10.expected
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkWindow">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
9
testsuite/tools/simplify-data/test10.ui
Normal file
9
testsuite/tools/simplify-data/test10.ui
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<interface>
|
||||||
|
<object class="GtkWindow">
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
15
testsuite/tools/simplify-data/test11.expected
Normal file
15
testsuite/tools/simplify-data/test11.expected
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkPaned">
|
||||||
|
<property name="start-child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
<property name="end-child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">end</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
14
testsuite/tools/simplify-data/test11.ui
Normal file
14
testsuite/tools/simplify-data/test11.ui
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<interface>
|
||||||
|
<object class="GtkPaned">
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">end</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
15
testsuite/tools/simplify-data/test12.expected
Normal file
15
testsuite/tools/simplify-data/test12.expected
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkPaned">
|
||||||
|
<property name="end-child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">end</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
<property name="start-child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
14
testsuite/tools/simplify-data/test12.ui
Normal file
14
testsuite/tools/simplify-data/test12.ui
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<interface>
|
||||||
|
<object class="GtkPaned">
|
||||||
|
<child type="end">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">end</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="start">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
20
testsuite/tools/simplify-data/test13.expected
Normal file
20
testsuite/tools/simplify-data/test13.expected
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkCenterBox">
|
||||||
|
<property name="end-widget">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">end</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
<property name="center-widget">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">center</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
<property name="start-widget">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
19
testsuite/tools/simplify-data/test13.ui
Normal file
19
testsuite/tools/simplify-data/test13.ui
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<interface>
|
||||||
|
<object class="GtkCenterBox">
|
||||||
|
<child type="end">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">end</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="center">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">center</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="start">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<object class="GtkWindow">
|
<object class="GtkWindow">
|
||||||
<child>
|
<property name="child">
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</property>
|
||||||
</object>
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
10
testsuite/tools/simplify-data/test8.expected
Normal file
10
testsuite/tools/simplify-data/test8.expected
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkAspectFrame">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
9
testsuite/tools/simplify-data/test8.ui
Normal file
9
testsuite/tools/simplify-data/test8.ui
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<interface>
|
||||||
|
<object class="GtkAspectFrame">
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
10
testsuite/tools/simplify-data/test9.expected
Normal file
10
testsuite/tools/simplify-data/test9.expected
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkComboBox">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
9
testsuite/tools/simplify-data/test9.ui
Normal file
9
testsuite/tools/simplify-data/test9.ui
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<interface>
|
||||||
|
<object class="GtkComboBox">
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="label">start</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
@ -1278,6 +1278,114 @@ rewrite_paned (Element *element,
|
|||||||
rewrite_paned_child (element, data, child2, "end-child");
|
rewrite_paned_child (element, data, child2, "end-child");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
replace_child_by_property (Element *element,
|
||||||
|
Element *child,
|
||||||
|
const char *property,
|
||||||
|
MyParserData *data)
|
||||||
|
{
|
||||||
|
Element *obj, *elt;
|
||||||
|
|
||||||
|
obj = child->children->data;
|
||||||
|
g_assert (obj && g_str_equal (obj->element_name, "object"));
|
||||||
|
child->children = g_list_remove (child->children, obj);
|
||||||
|
|
||||||
|
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_strdup (property);
|
||||||
|
elt->children = g_list_prepend (NULL, obj);
|
||||||
|
|
||||||
|
for (GList *l = element->children; l; l = l->next)
|
||||||
|
{
|
||||||
|
if (l->data == child)
|
||||||
|
{
|
||||||
|
l->data = elt;
|
||||||
|
elt = NULL;
|
||||||
|
free_element (child);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_assert (elt == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rewrite_start_end_children (Element *element,
|
||||||
|
MyParserData *data)
|
||||||
|
{
|
||||||
|
Element *start_child = NULL;
|
||||||
|
Element *end_child = NULL;
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = element->children; l; l = l->next)
|
||||||
|
{
|
||||||
|
Element *child = l->data;
|
||||||
|
|
||||||
|
if (!g_str_equal (child->element_name, "child"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (has_attribute (child, "type", "start"))
|
||||||
|
start_child = child;
|
||||||
|
else if (has_attribute (child, "type", "end"))
|
||||||
|
end_child = child;
|
||||||
|
else if (start_child == NULL)
|
||||||
|
start_child = child;
|
||||||
|
else if (end_child == NULL)
|
||||||
|
end_child = child;
|
||||||
|
else
|
||||||
|
g_warning ("%s only accepts two children", get_class_name (element));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start_child)
|
||||||
|
replace_child_by_property (element, start_child, "start-child", data);
|
||||||
|
|
||||||
|
if (end_child)
|
||||||
|
replace_child_by_property (element, end_child, "end-child", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rewrite_start_center_end_children (Element *element,
|
||||||
|
MyParserData *data)
|
||||||
|
{
|
||||||
|
Element *start_child = NULL;
|
||||||
|
Element *center_child = NULL;
|
||||||
|
Element *end_child = NULL;
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = element->children; l; l = l->next)
|
||||||
|
{
|
||||||
|
Element *child = l->data;
|
||||||
|
|
||||||
|
if (has_attribute (child, "type", "start"))
|
||||||
|
start_child = child;
|
||||||
|
else if (has_attribute (child, "type", "center"))
|
||||||
|
center_child = child;
|
||||||
|
else if (has_attribute (child, "type", "end"))
|
||||||
|
end_child = child;
|
||||||
|
else if (start_child == NULL)
|
||||||
|
start_child = child;
|
||||||
|
else if (center_child == NULL)
|
||||||
|
center_child = child;
|
||||||
|
else if (end_child == NULL)
|
||||||
|
end_child = child;
|
||||||
|
else
|
||||||
|
g_warning ("%s only accepts three children", get_class_name (element));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start_child)
|
||||||
|
replace_child_by_property (element, start_child, "start-widget", data);
|
||||||
|
|
||||||
|
if (center_child)
|
||||||
|
replace_child_by_property (element, center_child, "center-widget", data);
|
||||||
|
|
||||||
|
if (end_child)
|
||||||
|
replace_child_by_property (element, end_child, "end-widget", data);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rewrite_dialog (Element *element,
|
rewrite_dialog (Element *element,
|
||||||
MyParserData *data)
|
MyParserData *data)
|
||||||
@ -2004,8 +2112,8 @@ simplify_tree (MyParserData *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
rewrite_element (Element *element,
|
rewrite_element_3to4 (Element *element,
|
||||||
MyParserData *data)
|
MyParserData *data)
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
@ -2014,7 +2122,7 @@ rewrite_element (Element *element,
|
|||||||
{
|
{
|
||||||
GList *next = l->next;
|
GList *next = l->next;
|
||||||
Element *child = l->data;
|
Element *child = l->data;
|
||||||
if (rewrite_element (child, data))
|
if (rewrite_element_3to4 (child, data))
|
||||||
{
|
{
|
||||||
element->children = g_list_remove (element->children, child);
|
element->children = g_list_remove (element->children, child);
|
||||||
free_element (child);
|
free_element (child);
|
||||||
@ -2069,6 +2177,52 @@ rewrite_element (Element *element,
|
|||||||
g_str_equal (get_class_name (element), "GtkFixed"))
|
g_str_equal (get_class_name (element), "GtkFixed"))
|
||||||
rewrite_fixed (element, data);
|
rewrite_fixed (element, data);
|
||||||
|
|
||||||
|
if (element_is_object_or_template (element) &&
|
||||||
|
g_str_equal (get_class_name (element), "GtkRadioButton"))
|
||||||
|
rewrite_radio_button (element, data);
|
||||||
|
|
||||||
|
if (element_is_object_or_template (element) &&
|
||||||
|
g_str_equal (get_class_name (element), "GtkScale"))
|
||||||
|
rewrite_scale (element, data);
|
||||||
|
|
||||||
|
if (g_str_equal (element->element_name, "property"))
|
||||||
|
maybe_rename_property (element, data);
|
||||||
|
|
||||||
|
if (g_str_equal (element->element_name, "property") &&
|
||||||
|
property_has_been_removed (element, data))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (g_str_equal (element->element_name, "requires"))
|
||||||
|
rewrite_requires (element, data);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rewrite_tree_3to4 (MyParserData *data)
|
||||||
|
{
|
||||||
|
rewrite_element_3to4 (data->root, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
rewrite_element (Element *element,
|
||||||
|
MyParserData *data)
|
||||||
|
{
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
l = element->children;
|
||||||
|
while (l)
|
||||||
|
{
|
||||||
|
GList *next = l->next;
|
||||||
|
Element *child = l->data;
|
||||||
|
if (rewrite_element (child, data))
|
||||||
|
{
|
||||||
|
element->children = g_list_remove (element->children, child);
|
||||||
|
free_element (child);
|
||||||
|
}
|
||||||
|
l = next;
|
||||||
|
}
|
||||||
|
|
||||||
if (element_is_object_or_template (element) &&
|
if (element_is_object_or_template (element) &&
|
||||||
(g_str_equal (get_class_name (element), "GtkAspectFrame") ||
|
(g_str_equal (get_class_name (element), "GtkAspectFrame") ||
|
||||||
g_str_equal (get_class_name (element), "GtkComboBox") ||
|
g_str_equal (get_class_name (element), "GtkComboBox") ||
|
||||||
@ -2087,22 +2241,12 @@ rewrite_element (Element *element,
|
|||||||
rewrite_bin_child (element, data);
|
rewrite_bin_child (element, data);
|
||||||
|
|
||||||
if (element_is_object_or_template (element) &&
|
if (element_is_object_or_template (element) &&
|
||||||
g_str_equal (get_class_name (element), "GtkRadioButton"))
|
g_str_equal (get_class_name (element), "GtkPaned"))
|
||||||
rewrite_radio_button (element, data);
|
rewrite_start_end_children (element, data);
|
||||||
|
|
||||||
if (element_is_object_or_template (element) &&
|
if (element_is_object_or_template (element) &&
|
||||||
g_str_equal (get_class_name (element), "GtkScale"))
|
g_str_equal (get_class_name (element), "GtkCenterBox"))
|
||||||
rewrite_scale (element, data);
|
rewrite_start_center_end_children (element, data);
|
||||||
|
|
||||||
if (g_str_equal (element->element_name, "property"))
|
|
||||||
maybe_rename_property (element, data);
|
|
||||||
|
|
||||||
if (g_str_equal (element->element_name, "property") &&
|
|
||||||
property_has_been_removed (element, data))
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if (g_str_equal (element->element_name, "requires"))
|
|
||||||
rewrite_requires (element, data);
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -2319,8 +2463,10 @@ simplify_file (const char *filename,
|
|||||||
if (data.convert3to4)
|
if (data.convert3to4)
|
||||||
{
|
{
|
||||||
enhance_tree (&data);
|
enhance_tree (&data);
|
||||||
rewrite_tree (&data);
|
rewrite_tree_3to4 (&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rewrite_tree (&data);
|
||||||
simplify_tree (&data);
|
simplify_tree (&data);
|
||||||
|
|
||||||
dump_tree (&data);
|
dump_tree (&data);
|
||||||
|
Loading…
Reference in New Issue
Block a user