diff --git a/modules/inspector/prop-list.c b/modules/inspector/prop-list.c
index 6d10928d93..047ef0cc1c 100644
--- a/modules/inspector/prop-list.c
+++ b/modules/inspector/prop-list.c
@@ -32,7 +32,8 @@ enum
COLUMN_DEFINED_AT,
COLUMN_OBJECT,
COLUMN_TOOLTIP,
- COLUMN_WRITABLE
+ COLUMN_WRITABLE,
+ COLUMN_ATTRIBUTE
};
enum
@@ -51,6 +52,7 @@ struct _GtkInspectorPropListPrivate
GtkWidget *widget_tree;
GtkCellRenderer *value_renderer;
gboolean child_properties;
+ GtkTreeViewColumn *attribute_column;
};
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorPropList, gtk_inspector_prop_list, GTK_TYPE_TREE_VIEW)
@@ -85,9 +87,6 @@ get_property (GObject *object,
case PROP_CHILD_PROPERTIES:
g_value_set_boolean (value, pl->priv->child_properties);
- g_object_set (pl->priv->value_renderer,
- "is-child-property", pl->priv->child_properties,
- NULL);
break;
default:
@@ -113,6 +112,9 @@ set_property (GObject *object,
case PROP_CHILD_PROPERTIES:
pl->priv->child_properties = g_value_get_boolean (value);
+ g_object_set (pl->priv->value_renderer,
+ "is-child-property", pl->priv->child_properties,
+ NULL);
break;
default:
@@ -140,6 +142,7 @@ gtk_inspector_prop_list_class_init (GtkInspectorPropListClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/prop-list.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, model);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, value_renderer);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorPropList, attribute_column);
}
static void
@@ -148,9 +151,10 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
GParamSpec *prop)
{
GValue gvalue = {0};
- gchar *value;
+ gchar *value = NULL;
+ gchar *attribute = NULL;
- g_value_init(&gvalue, prop->value_type);
+ g_value_init (&gvalue, prop->value_type);
if (pl->priv->child_properties)
{
GtkWidget *parent;
@@ -172,19 +176,36 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
}
else
{
- value = g_strdup_value_contents(&gvalue);
+ value = g_strdup_value_contents (&gvalue);
+ }
+
+ if (GTK_IS_CELL_RENDERER (pl->priv->object))
+ {
+ gpointer *area;
+ gint column = -1;
+
+ area = g_object_get_data (pl->priv->object, "gtk-inspector-cell-area");
+ if (area)
+ column = gtk_cell_area_attribute_get_column (GTK_CELL_AREA (area),
+ GTK_CELL_RENDERER (pl->priv->object),
+ prop->name);
+
+ if (column != -1)
+ attribute = g_strdup_printf ("%d", column);
}
gtk_list_store_set (pl->priv->model, iter,
COLUMN_NAME, prop->name,
- COLUMN_VALUE, value ? value : g_strdup (""),
+ COLUMN_VALUE, value ? value : "",
COLUMN_DEFINED_AT, g_type_name (prop->owner_type),
COLUMN_OBJECT, pl->priv->object,
COLUMN_TOOLTIP, g_param_spec_get_blurb (prop),
COLUMN_WRITABLE, (prop->flags & G_PARAM_WRITABLE) != 0,
+ COLUMN_ATTRIBUTE, attribute ? attribute : "",
-1);
g_free (value);
+ g_free (attribute);
g_value_unset (&gvalue);
}
@@ -280,12 +301,15 @@ gtk_inspector_prop_list_set_object (GtkInspectorPropList *pl,
pl->priv->signal_cnxs =
g_list_prepend (pl->priv->signal_cnxs,
- GINT_TO_POINTER (g_signal_connect(object, signal_name,
- G_CALLBACK (gtk_inspector_prop_list_prop_changed_cb), pl)));
+ GINT_TO_POINTER (g_signal_connect (object, signal_name,
+ G_CALLBACK (gtk_inspector_prop_list_prop_changed_cb), pl)));
g_free (signal_name);
}
+ g_object_set (pl->priv->attribute_column,
+ "visible", !pl->priv->child_properties && GTK_IS_CELL_RENDERER (object),
+ NULL);
return TRUE;
}
diff --git a/modules/inspector/prop-list.ui b/modules/inspector/prop-list.ui
index ed920094a4..19dc006897 100644
--- a/modules/inspector/prop-list.ui
+++ b/modules/inspector/prop-list.ui
@@ -8,6 +8,7 @@
+
@@ -48,6 +49,22 @@
+
+
+
Defined At
diff --git a/modules/inspector/widget-tree.c b/modules/inspector/widget-tree.c
index 84cbecdaf4..f10085de43 100644
--- a/modules/inspector/widget-tree.c
+++ b/modules/inspector/widget-tree.c
@@ -194,7 +194,7 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
-1);
g_hash_table_insert (wt->priv->iters, object, gtk_tree_iter_copy (&iter));
- g_free(address);
+ g_free (address);
if (GTK_IS_CONTAINER (object))
{
@@ -223,11 +223,14 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
{
GList *cells, *l;
GObject *cell;
+ GtkCellArea *area;
+ area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (object));
for (l = cells; l; l = l->next)
{
cell = l->data;
+ g_object_set_data (cell, "gtk-inspector-cell-area", area);
gtk_inspector_widget_tree_append_object (wt, cell, &iter, NULL);
}
g_list_free (cells);