[gtk+] inspector: Redo property lists a bit
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] inspector: Redo property lists a bit
- Date: Thu, 10 Mar 2016 03:00:07 +0000 (UTC)
commit c1c8a861aaec48d6376b161deae4c2044af41e60
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Mar 9 20:55:46 2016 -0500
inspector: Redo property lists a bit
Break out value types as a separate column, to make the
value column more readable.
gtk/inspector/prop-list.c | 120 +++++++++++++++++++++++++++++++++++++++----
gtk/inspector/prop-list.ui | 33 ++++++++++---
2 files changed, 134 insertions(+), 19 deletions(-)
---
diff --git a/gtk/inspector/prop-list.c b/gtk/inspector/prop-list.c
index dc8eb84..c02ba56 100644
--- a/gtk/inspector/prop-list.c
+++ b/gtk/inspector/prop-list.c
@@ -41,6 +41,7 @@ enum
{
COLUMN_NAME,
COLUMN_VALUE,
+ COLUMN_TYPE,
COLUMN_DEFINED_AT,
COLUMN_TOOLTIP,
COLUMN_WRITABLE,
@@ -300,13 +301,116 @@ gtk_inspector_prop_list_class_init (GtkInspectorPropListClass *klass)
gtk_widget_class_bind_template_callback (widget_class, hierarchy_changed);
}
+/* Like g_strdup_value_contents, but keeps the type name separate */
+static void
+strdup_value_contents (const GValue *value,
+ gchar **contents,
+ gchar **type)
+{
+ const gchar *src;
+
+ if (G_VALUE_HOLDS_STRING (value))
+ {
+ src = g_value_get_string (value);
+
+ *type = g_strdup ("char*");
+
+ if (!src)
+ {
+ *contents = g_strdup ("NULL");
+ }
+ else
+ {
+ gchar *s = g_strescape (src, NULL);
+ *contents = g_strdup_printf ("\"%s\"", s);
+ g_free (s);
+ }
+ }
+ else if (g_value_type_transformable (G_VALUE_TYPE (value), G_TYPE_STRING))
+ {
+ GValue tmp_value = G_VALUE_INIT;
+
+ *type = g_strdup (g_type_name (G_VALUE_TYPE (value)));
+
+ g_value_init (&tmp_value, G_TYPE_STRING);
+ g_value_transform (value, &tmp_value);
+ src = g_value_get_string (&tmp_value);
+ if (!src)
+ *contents = g_strdup ("NULL");
+ else
+ *contents = g_strescape (src, NULL);
+ g_value_unset (&tmp_value);
+ }
+ else if (g_value_fits_pointer (value))
+ {
+ gpointer p = g_value_peek_pointer (value);
+
+ if (!p)
+ {
+ *type = g_strdup (g_type_name (G_VALUE_TYPE (value)));
+ *contents = g_strdup ("NULL");
+ }
+ else if (G_VALUE_HOLDS_OBJECT (value))
+ {
+ *type = g_strdup (G_OBJECT_TYPE_NAME (p));
+ *contents = g_strdup_printf ("%p", p);
+ }
+ else if (G_VALUE_HOLDS_PARAM (value))
+ {
+ *type = g_strdup (G_PARAM_SPEC_TYPE_NAME (p));
+ *contents = g_strdup_printf ("%p", p);
+ }
+ else if (G_VALUE_HOLDS (value, G_TYPE_STRV))
+ {
+ GStrv strv = g_value_get_boxed (value);
+ GString *tmp = g_string_new ("[");
+
+ while (*strv != NULL)
+ {
+ gchar *escaped = g_strescape (*strv, NULL);
+
+ g_string_append_printf (tmp, "\"%s\"", escaped);
+ g_free (escaped);
+
+ if (*++strv != NULL)
+ g_string_append (tmp, ", ");
+ }
+
+ g_string_append (tmp, "]");
+ *type = g_strdup ("char**");
+ *contents = g_string_free (tmp, FALSE);
+ }
+ else if (G_VALUE_HOLDS_BOXED (value))
+ {
+ *type = g_strdup (g_type_name (G_VALUE_TYPE (value)));
+ *contents = g_strdup_printf ("%p", p);
+ }
+ else if (G_VALUE_HOLDS_POINTER (value))
+ {
+ *type = g_strdup ("gpointer");
+ *contents = g_strdup_printf ("%p", p);
+ }
+ else
+ {
+ *type = g_strdup ("???");
+ *contents = g_strdup ("???");
+ }
+ }
+ else
+ {
+ *type = g_strdup ("???");
+ *contents = g_strdup ("???");
+ }
+}
+
static void
gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
GtkTreeIter *iter,
GParamSpec *prop)
{
GValue gvalue = {0};
- gchar *value = NULL;
+ gchar *value;
+ gchar *type;
gchar *attribute = NULL;
g_value_init (&gvalue, prop->value_type);
@@ -322,17 +426,7 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
else
g_object_get_property (pl->priv->object, prop->name, &gvalue);
- if (G_VALUE_HOLDS_ENUM (&gvalue))
- {
- GEnumClass *enum_class = G_PARAM_SPEC_ENUM (prop)->enum_class;
- GEnumValue *enum_value = g_enum_get_value (enum_class, g_value_get_enum (&gvalue));
-
- value = g_strdup (enum_value->value_name);
- }
- else
- {
- value = g_strdup_value_contents (&gvalue);
- }
+ strdup_value_contents (&gvalue, &value, &type);
if (GTK_IS_CELL_RENDERER (pl->priv->object))
{
@@ -356,6 +450,7 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
gtk_list_store_set (pl->priv->model, iter,
COLUMN_NAME, prop->name,
COLUMN_VALUE, value ? value : "",
+ COLUMN_TYPE, type ? type : "",
COLUMN_DEFINED_AT, g_type_name (prop->owner_type),
COLUMN_TOOLTIP, g_param_spec_get_blurb (prop),
COLUMN_WRITABLE, (prop->flags & G_PARAM_WRITABLE) != 0,
@@ -363,6 +458,7 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
-1);
g_free (value);
+ g_free (type);
g_free (attribute);
g_value_unset (&gvalue);
}
diff --git a/gtk/inspector/prop-list.ui b/gtk/inspector/prop-list.ui
index 3fa1f5c..f4892cc 100644
--- a/gtk/inspector/prop-list.ui
+++ b/gtk/inspector/prop-list.ui
@@ -6,6 +6,7 @@
<column type="gchararray"/>
<column type="gchararray"/>
<column type="gchararray"/>
+ <column type="gchararray"/>
<column type="gboolean"/>
<column type="gchararray"/>
</columns>
@@ -23,7 +24,7 @@
<object class="GtkTreeView" id="tree">
<property name="visible">True</property>
<property name="model">model</property>
- <property name="tooltip-column">3</property>
+ <property name="tooltip-column">4</property>
<property name="search-column">0</property>
<property name="enable-search">True</property>
<property name="enable-grid-lines">vertical</property>
@@ -39,7 +40,7 @@
</object>
<attributes>
<attribute name="text">0</attribute>
- <attribute name="sensitive">4</attribute>
+ <attribute name="sensitive">5</attribute>
</attributes>
</child>
</object>
@@ -57,7 +58,25 @@
</object>
<attributes>
<attribute name="text">1</attribute>
- <attribute name="sensitive">4</attribute>
+ <attribute name="sensitive">5</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn">
+ <property name="title" translatable="yes">Type</property>
+ <property name="resizable">True</property>
+ <child>
+ <object class="GtkCellRendererText">
+ <property name="scale">0.8</property>
+ <property name="editable">False</property>
+ <property name="width-chars">20</property>
+ <property name="ellipsize">end</property>
+ </object>
+ <attributes>
+ <attribute name="text">2</attribute>
+ <attribute name="sensitive">5</attribute>
</attributes>
</child>
</object>
@@ -72,8 +91,8 @@
<property name="editable">False</property>
</object>
<attributes>
- <attribute name="text">5</attribute>
- <attribute name="sensitive">4</attribute>
+ <attribute name="text">6</attribute>
+ <attribute name="sensitive">5</attribute>
</attributes>
</child>
</object>
@@ -87,8 +106,8 @@
<property name="scale">0.8</property>
</object>
<attributes>
- <attribute name="text">2</attribute>
- <attribute name="sensitive">4</attribute>
+ <attribute name="text">3</attribute>
+ <attribute name="sensitive">5</attribute>
</attributes>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]