[gtk+] inspector: Link to model for attributes
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] inspector: Link to model for attributes
- Date: Mon, 19 May 2014 04:18:57 +0000 (UTC)
commit 9a23fd3313b3809f03f13d479c7833823704f2e0
Author: Matthias Clasen <mclasen redhat com>
Date: Mon May 19 00:13:30 2014 -0400
inspector: Link to model for attributes
gtk/inspector/prop-editor.c | 60 +++++++++++++++++++++++++++++++++++++++++++
gtk/inspector/prop-list.c | 6 +++-
gtk/inspector/widget-tree.c | 5 +++-
3 files changed, 69 insertions(+), 2 deletions(-)
---
diff --git a/gtk/inspector/prop-editor.c b/gtk/inspector/prop-editor.c
index c6a4e75..01de8ac 100644
--- a/gtk/inspector/prop-editor.c
+++ b/gtk/inspector/prop-editor.c
@@ -1056,6 +1056,28 @@ gtk_inspector_prop_editor_init (GtkInspectorPropEditor *editor)
NULL);
}
+GtkTreeModel *
+gtk_cell_layout_get_model (GtkCellLayout *layout)
+{
+ if (GTK_IS_TREE_VIEW_COLUMN (layout))
+ return gtk_tree_view_get_model (GTK_TREE_VIEW (gtk_tree_view_column_get_tree_view (GTK_TREE_VIEW_COLUMN
(layout))));
+ else if (GTK_IS_ICON_VIEW (layout))
+ return gtk_icon_view_get_model (GTK_ICON_VIEW (layout));
+ else if (GTK_IS_COMBO_BOX (layout))
+ return gtk_combo_box_get_model (GTK_COMBO_BOX (layout));
+ else
+ return NULL;
+}
+
+static void
+model_properties (GtkButton *button, GtkInspectorPropEditor *editor)
+{
+ GObject *model;
+
+ model = g_object_get_data (G_OBJECT (button), "model");
+ g_signal_emit (editor, signals[SHOW_OBJECT], 0, model, "model");
+}
+
static void
constructed (GObject *object)
{
@@ -1070,6 +1092,44 @@ constructed (GObject *object)
gtk_widget_show (label);
gtk_container_add (GTK_CONTAINER (editor), label);
+ if (GTK_IS_CELL_RENDERER (editor->priv->object))
+ {
+ gpointer layout;
+ GtkCellArea *area;
+ GtkTreeModel *model = NULL;
+ gint col = -1;
+
+ layout = g_object_get_data (editor->priv->object, "gtk-inspector-cell-layout");
+ if (GTK_IS_CELL_LAYOUT (layout))
+ {
+ area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (layout));
+ col = gtk_cell_area_attribute_get_column (area,
+ GTK_CELL_RENDERER (editor->priv->object),
+ editor->priv->name);
+ model = gtk_cell_layout_get_model (GTK_CELL_LAYOUT (layout));
+ }
+
+ if (col != -1)
+ {
+ GtkWidget *box;
+ GtkWidget *button;
+ gchar *text;
+
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
+ text = g_strdup_printf (_("Mapped to column %d in %p (%s)"),
+ col, model, g_type_name (G_TYPE_FROM_INSTANCE (model)));
+ gtk_container_add (GTK_CONTAINER (box), gtk_label_new (text));
+ g_free (text);
+ button = gtk_button_new_with_label (_("Properties"));
+ g_object_set_data (G_OBJECT (button), "model", model);
+ g_signal_connect (button, "clicked", G_CALLBACK (model_properties), editor);
+ gtk_container_add (GTK_CONTAINER (box), button);
+ gtk_container_add (GTK_CONTAINER (editor), box);
+ gtk_widget_show_all (box);
+ return;
+ }
+ }
+
can_modify = ((spec->flags & G_PARAM_WRITABLE) != 0 &&
(spec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
diff --git a/gtk/inspector/prop-list.c b/gtk/inspector/prop-list.c
index 89367a0..ad5dffe 100644
--- a/gtk/inspector/prop-list.c
+++ b/gtk/inspector/prop-list.c
@@ -241,10 +241,14 @@ gtk_inspector_prop_list_update_prop (GtkInspectorPropList *pl,
if (GTK_IS_CELL_RENDERER (pl->priv->object))
{
+ gpointer *layout;
gpointer *area;
gint column = -1;
- area = g_object_get_data (pl->priv->object, "gtk-inspector-cell-area");
+ area = NULL;
+ layout = g_object_get_data (pl->priv->object, "gtk-inspector-cell-layout");
+ if (layout)
+ area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (layout));
if (area)
column = gtk_cell_area_attribute_get_column (GTK_CELL_AREA (area),
GTK_CELL_RENDERER (pl->priv->object),
diff --git a/gtk/inspector/widget-tree.c b/gtk/inspector/widget-tree.c
index 11d868f..2fef128 100644
--- a/gtk/inspector/widget-tree.c
+++ b/gtk/inspector/widget-tree.c
@@ -196,8 +196,10 @@ cell_callback (GtkCellRenderer *renderer,
gpointer data)
{
FindAllData *d = data;
+ gpointer cell_layout;
- g_object_set_data (G_OBJECT (renderer), "gtk-inspector-cell-area", d->parent);
+ cell_layout = g_object_get_data (d->parent, "gtk-inspector-cell-layout");
+ g_object_set_data (G_OBJECT (renderer), "gtk-inspector-cell-layout", cell_layout);
gtk_inspector_widget_tree_append_object (d->wt, G_OBJECT (renderer), d->iter, NULL);
return FALSE;
@@ -360,6 +362,7 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
GtkCellArea *area;
area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
+ g_object_set_data (G_OBJECT (area), "gtk-inspector-cell-layout", object);
gtk_inspector_widget_tree_append_object (wt, G_OBJECT (area), &iter, "cell-area");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]