[gtk/overlay-layout: 10/11] builder-tool: Small refactoring
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/overlay-layout: 10/11] builder-tool: Small refactoring
- Date: Thu, 28 Mar 2019 20:38:10 +0000 (UTC)
commit 8d993160c24518af1c58798b7f5bc4568d394d4c
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Mar 28 12:37:45 2019 -0400
builder-tool: Small refactoring
Introduce a PropKind enum, since the collection of
booleans is getting out of hands.
gtk/tools/gtk-builder-tool-simplify.c | 158 +++++++++++++++++++---------------
1 file changed, 89 insertions(+), 69 deletions(-)
---
diff --git a/gtk/tools/gtk-builder-tool-simplify.c b/gtk/tools/gtk-builder-tool-simplify.c
index 00347b8866..2c7f4e52cf 100644
--- a/gtk/tools/gtk-builder-tool-simplify.c
+++ b/gtk/tools/gtk-builder-tool-simplify.c
@@ -137,6 +137,12 @@ canonical_boolean_value (MyParserData *data,
return b ? "1" : "0";
}
+typedef enum {
+ PROP_KIND_OBJECT,
+ PROP_KIND_PACKING,
+ PROP_KIND_CELL_PACKING,
+} PropKind;
+
/* A number of properties unfortunately can't be omitted even
* if they are nominally set to their default value. In many
* cases, this is due to subclasses not overriding the default
@@ -144,23 +150,23 @@ canonical_boolean_value (MyParserData *data,
*/
static gboolean
needs_explicit_setting (GParamSpec *pspec,
- gboolean packing)
+ PropKind kind)
{
struct _Prop {
const char *class;
const char *property;
- gboolean packing;
+ PropKind kind;
} props[] = {
- { "GtkAboutDialog", "program-name", 0 },
- { "GtkCalendar", "year", 0 },
- { "GtkCalendar", "month", 0 },
- { "GtkCalendar", "day", 0 },
- { "GtkPlacesSidebar", "show-desktop", 0 },
- { "GtkRadioButton", "draw-indicator", 0 },
- { "GtkGrid", "left-attach", 1 },
- { "GtkGrid", "top-attach", 1 },
- { "GtkWidget", "hexpand", 0 },
- { "GtkWidget", "vexpand", 0 },
+ { "GtkAboutDialog", "program-name", PROP_KIND_OBJECT },
+ { "GtkCalendar", "year", PROP_KIND_OBJECT },
+ { "GtkCalendar", "month", PROP_KIND_OBJECT },
+ { "GtkCalendar", "day", PROP_KIND_OBJECT },
+ { "GtkPlacesSidebar", "show-desktop", PROP_KIND_OBJECT },
+ { "GtkRadioButton", "draw-indicator", PROP_KIND_OBJECT },
+ { "GtkGrid", "left-attach", PROP_KIND_PACKING },
+ { "GtkGrid", "top-attach", PROP_KIND_PACKING },
+ { "GtkWidget", "hexpand", PROP_KIND_OBJECT },
+ { "GtkWidget", "vexpand", PROP_KIND_OBJECT },
};
gboolean found;
gint k;
@@ -173,7 +179,7 @@ needs_explicit_setting (GParamSpec *pspec,
{
if (strcmp (class_name, props[k].class) == 0 &&
strcmp (pspec->name, props[k].property) == 0 &&
- packing == props[k].packing)
+ kind == props[k].kind)
{
found = TRUE;
break;
@@ -186,22 +192,22 @@ needs_explicit_setting (GParamSpec *pspec,
static gboolean
keep_for_rewrite (const char *class_name,
const char *prop_name,
- gboolean packing)
+ PropKind kind)
{
struct _Prop {
const char *class;
const char *property;
- gboolean packing;
+ PropKind kind;
} props[] = {
- { "GtkActionBar", "pack-type", 1 },
- { "GtkHeaderBar", "pack-type", 1 },
- { "GtkPopoverMenu", "submenu", 1 },
- { "GtkToolbar", "expand", 1 },
- { "GtkToolbar", "homogeneous", 1 },
- { "GtkPaned", "resize", 1 },
- { "GtkPaned", "shrink", 1 },
- { "GtkOverlay", "measure", 1 },
- { "GtkOverlay", "clip-overlay", 1 },
+ { "GtkActionBar", "pack-type", PROP_KIND_PACKING },
+ { "GtkHeaderBar", "pack-type", PROP_KIND_PACKING },
+ { "GtkPopoverMenu", "submenu", PROP_KIND_PACKING },
+ { "GtkToolbar", "expand", PROP_KIND_PACKING },
+ { "GtkToolbar", "homogeneous", PROP_KIND_PACKING },
+ { "GtkPaned", "resize", PROP_KIND_PACKING },
+ { "GtkPaned", "shrink", PROP_KIND_PACKING },
+ { "GtkOverlay", "measure", PROP_KIND_PACKING },
+ { "GtkOverlay", "clip-overlay", PROP_KIND_PACKING },
};
gboolean found;
gint k;
@@ -211,7 +217,7 @@ keep_for_rewrite (const char *class_name,
{
if (strcmp (class_name, props[k].class) == 0 &&
strcmp (prop_name, props[k].property) == 0 &&
- packing == props[k].packing)
+ kind == props[k].kind)
{
found = TRUE;
break;
@@ -298,8 +304,7 @@ static GParamSpec *
get_property_pspec (MyParserData *data,
const gchar *class_name,
const gchar *property_name,
- gboolean packing,
- gboolean cell_packing)
+ PropKind kind)
{
GType type;
GObjectClass *class;
@@ -317,19 +322,27 @@ get_property_pspec (MyParserData *data,
class = g_type_class_ref (type);
canonical_name = g_strdup (property_name);
canonicalize_key (canonical_name);
- if (packing)
- pspec = gtk_container_class_find_child_property (class, canonical_name);
- else if (cell_packing)
+ switch (kind)
{
- GObjectClass *cell_class;
-
- /* We're just assuming that the cell layout is using a GtkCellAreaBox. */
- cell_class = g_type_class_ref (GTK_TYPE_CELL_AREA_BOX);
- pspec = gtk_cell_area_class_find_cell_property (GTK_CELL_AREA_CLASS (cell_class), canonical_name);
- g_type_class_unref (cell_class);
+ case PROP_KIND_OBJECT:
+ pspec = g_object_class_find_property (class, canonical_name);
+ break;
+ case PROP_KIND_PACKING:
+ pspec = gtk_container_class_find_child_property (class, canonical_name);
+ break;
+ case PROP_KIND_CELL_PACKING:
+ {
+ GObjectClass *cell_class;
+
+ /* We're just assuming that the cell layout is using a GtkCellAreaBox. */
+ cell_class = g_type_class_ref (GTK_TYPE_CELL_AREA_BOX);
+ pspec = gtk_cell_area_class_find_cell_property (GTK_CELL_AREA_CLASS (cell_class), canonical_name);
+ g_type_class_unref (cell_class);
+ }
+ break;
+ default:
+ g_assert_not_reached ();
}
- else
- pspec = g_object_class_find_property (class, canonical_name);
g_free (canonical_name);
g_type_class_unref (class);
@@ -422,13 +435,15 @@ property_is_boolean (Element *element,
MyParserData *data)
{
GParamSpec *pspec;
- gboolean packing = FALSE;
const char *class_name;
const char *property_name;
int i;
+ PropKind kind;
if (g_str_equal (element->parent->element_name, "packing"))
- packing = TRUE;
+ kind = PROP_KIND_PACKING;
+ else
+ kind = PROP_KIND_OBJECT;
class_name = get_class_name (element);
property_name = "";
@@ -439,7 +454,7 @@ property_is_boolean (Element *element,
property_name = (const gchar *)element->attribute_values[i];
}
- pspec = get_property_pspec (data, class_name, property_name, packing, FALSE);
+ pspec = get_property_pspec (data, class_name, property_name, kind);
if (pspec)
return G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_BOOLEAN;
@@ -456,14 +471,15 @@ property_can_be_omitted (Element *element,
const char *class_name;
const char *property_name;
const char *value_string;
- gboolean packing = FALSE;
- gboolean cell_packing = FALSE;
GParamSpec *pspec;
+ PropKind kind;
if (g_str_equal (element->parent->element_name, "packing"))
- packing = TRUE;
+ kind = PROP_KIND_PACKING;
if (g_str_equal (element->parent->element_name, "cell-packing"))
- cell_packing = TRUE;
+ kind = PROP_KIND_CELL_PACKING;
+ else
+ kind = PROP_KIND_OBJECT;
class_name = get_class_name (element);
property_name = "";
@@ -482,7 +498,7 @@ property_can_be_omitted (Element *element,
property_name = (const gchar *)element->attribute_values[i];
}
- if (keep_for_rewrite (class_name, property_name, packing))
+ if (keep_for_rewrite (class_name, property_name, kind))
return FALSE; /* keep, will be rewritten */
if (translatable)
@@ -491,20 +507,22 @@ property_can_be_omitted (Element *element,
if (bound)
return FALSE;
- pspec = get_property_pspec (data, class_name, property_name, packing, cell_packing);
+ pspec = get_property_pspec (data, class_name, property_name, kind);
if (pspec == NULL)
{
- if (packing)
- g_printerr (_("%s: Packing property %s::%s not found\n"), data->input_filename, class_name,
property_name);
- else if (cell_packing)
- g_printerr (_("%s: Cell property %s::%s not found\n"), data->input_filename, class_name,
property_name);
- else
- g_printerr (_("%s: Property %s::%s not found\n"), data->input_filename, class_name, property_name);
+ const char *kind_str[] = {
+ "",
+ "Packing ",
+ "Cell "
+ };
+
+ g_printerr (_("%s: %sproperty %s::%s not found\n"),
+ kind_str[kind], data->input_filename, class_name, property_name);
return FALSE;
}
- if (needs_explicit_setting (pspec, packing))
+ if (needs_explicit_setting (pspec, kind))
return FALSE;
return value_is_default (data, pspec, value_string);
@@ -516,30 +534,32 @@ property_has_been_removed (Element *element,
{
const gchar *class_name;
const gchar *property_name;
- gboolean packing = FALSE;
struct _Prop {
const char *class;
const char *property;
- gboolean packing;
+ PropKind kind;
} props[] = {
- { "GtkActionBar", "position", 1 },
- { "GtkButtonBox", "secondary", 1 },
- { "GtkButtonBox", "non-homogeneous", 1 },
- { "GtkBox", "position", 1 },
- { "GtkBox", "pack-type", 1 },
- { "GtkHeaderBar", "position", 1 },
- { "GtkPopoverMenu", "position", 1 },
- { "GtkMenu", "left-attach", 1 },
- { "GtkMenu", "right-attach", 1 },
- { "GtkMenu", "top-attach", 1 },
- { "GtkMenu", "bottom-attach", 1 }
+ { "GtkActionBar", "position", PROP_KIND_PACKING },
+ { "GtkButtonBox", "secondary", PROP_KIND_PACKING },
+ { "GtkButtonBox", "non-homogeneous", PROP_KIND_PACKING },
+ { "GtkBox", "position", PROP_KIND_PACKING },
+ { "GtkBox", "pack-type", PROP_KIND_PACKING },
+ { "GtkHeaderBar", "position", PROP_KIND_PACKING },
+ { "GtkPopoverMenu", "position",PROP_KIND_PACKING },
+ { "GtkMenu", "left-attach", PROP_KIND_PACKING },
+ { "GtkMenu", "right-attach", PROP_KIND_PACKING },
+ { "GtkMenu", "top-attach", PROP_KIND_PACKING },
+ { "GtkMenu", "bottom-attach", PROP_KIND_PACKING }
};
gchar *canonical_name;
gboolean found;
gint i, k;
+ PropKind kind;
if (g_str_equal (element->parent->element_name, "packing"))
- packing = TRUE;
+ kind = PROP_KIND_PACKING;
+ else
+ kind = PROP_KIND_OBJECT;
class_name = get_class_name (element);
property_name = "";
@@ -558,7 +578,7 @@ property_has_been_removed (Element *element,
{
if (strcmp (class_name, props[k].class) == 0 &&
strcmp (canonical_name, props[k].property) == 0 &&
- packing == props[k].packing)
+ kind == props[k].kind)
{
found = TRUE;
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]