[gtk/inspector-device-details] inspector: Introspect enum values
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/inspector-device-details] inspector: Introspect enum values
- Date: Sun, 2 Aug 2020 03:06:39 +0000 (UTC)
commit 0d608c492d75402d10047c3e263bfba253450ba4
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Aug 1 23:05:24 2020 -0400
inspector: Introspect enum values
Stop hardcoding arrays with names for enum values.
This has bitten us repeatedly as these enums were
changed around; time to stop doing it.
gtk/inspector/general.c | 72 +++++++++++++++++++------------------------------
1 file changed, 27 insertions(+), 45 deletions(-)
---
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index a28ef07ccd..2e610a6672 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -679,52 +679,37 @@ add_tool (GtkInspectorGeneral *gen,
GdkDeviceTool *tool)
{
GdkAxisFlags axes;
- gchar *value;
GString *str;
+ char *val;
int i;
- const char *axis_name[] = {
- "Ignore",
- "X",
- "Y",
- "Delta X",
- "Delta Y",
- "Pressure",
- "X Tilt",
- "Y Tilt",
- "Wheel",
- "Distance",
- "Rotation",
- "Slider"
- };
- const char *tool_type[] = {
- "Unknown",
- "Pen",
- "Eraser",
- "Brush",
- "Pencil",
- "Airbrush",
- "Mouse",
- "Lens",
- };
+ GEnumClass *eclass;
+ GEnumValue *evalue;
+ GFlagsClass *fclass;
+ GFlagsValue *fvalue;
- str = g_string_new ("");
- value = g_strdup_printf ("Serial %" G_GUINT64_FORMAT, gdk_device_tool_get_serial (tool));
- add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Tool", value, 10);
- g_free (value);
+ val = g_strdup_printf ("Serial %" G_GUINT64_FORMAT, gdk_device_tool_get_serial (tool));
+ add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Tool", val, 10);
+ g_free (val);
- add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Type",
- tool_type[gdk_device_tool_get_tool_type (tool)], 20);
+ eclass = g_type_class_ref (GDK_TYPE_DEVICE_TOOL_TYPE);
+ evalue = g_enum_get_value (eclass, gdk_device_tool_get_tool_type (tool));
+ add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Type", evalue->value_nick, 20);
+ g_type_class_unref (eclass);
+ fclass = g_type_class_ref (GDK_TYPE_AXIS_FLAGS);
+ str = g_string_new ("");
axes = gdk_device_tool_get_axes (tool);
for (i = GDK_AXIS_X; i < GDK_AXIS_LAST; i++)
{
if ((axes & (1 << i)) != 0)
{
+ fvalue = g_flags_get_first_value (fclass, i);
if (str->len > 0)
g_string_append (str, ", ");
- g_string_append (str, axis_name[i]);
+ g_string_append (str, fvalue->value_nick);
}
}
+ g_type_class_unref (fclass);
if (str->len > 0)
add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Axes", str->str, 20);
@@ -736,23 +721,18 @@ static void
add_device (GtkInspectorGeneral *gen,
GdkDevice *device)
{
- const char *name, *value;
+ const char *name;
guint n_touches;
char *text;
- const char *source_name[] = {
- "Mouse",
- "Pen",
- "Cursor",
- "Keyboard",
- "Touchscreen",
- "Touchpad",
- "Trackpoint",
- "Pad"
- };
+ GEnumClass *class;
+ GEnumValue *value;
name = gdk_device_get_name (device);
- value = source_name[gdk_device_get_source (device)];
- add_label_row (gen, GTK_LIST_BOX (gen->device_box), name, value, 10);
+
+ class = g_type_class_ref (GDK_TYPE_INPUT_SOURCE);
+ value = g_enum_get_value (class, gdk_device_get_source (device));
+
+ add_label_row (gen, GTK_LIST_BOX (gen->device_box), name, value->value_nick, 10);
g_object_get (device, "num-touches", &n_touches, NULL);
if (n_touches > 0)
@@ -761,6 +741,8 @@ add_device (GtkInspectorGeneral *gen,
add_label_row (gen, GTK_LIST_BOX (gen->device_box), "Touches", text, 20);
g_free (text);
}
+
+ g_type_class_unref (class);
}
static char *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]