diff --git a/modules/inspector/widget-tree.c b/modules/inspector/widget-tree.c
index f10085de43..880b4a19ca 100644
--- a/modules/inspector/widget-tree.c
+++ b/modules/inspector/widget-tree.c
@@ -31,9 +31,6 @@ enum
OBJECT,
OBJECT_TYPE,
OBJECT_NAME,
- WIDGET_REALIZED,
- WIDGET_VISIBLE,
- WIDGET_MAPPED,
OBJECT_ADDRESS,
SENSITIVE
};
@@ -63,6 +60,29 @@ on_widget_selected (GtkTreeSelection *selection,
g_signal_emit (wt, widget_tree_signals[WIDGET_CHANGED], 0);
}
+typedef struct
+{
+ GObject *object;
+ GtkTreeIter *iter;
+ gulong map_handler;
+ gulong unmap_handler;
+} ObjectData;
+
+static void
+object_data_free (gpointer data)
+{
+ ObjectData *od = data;
+
+ gtk_tree_iter_free (od->iter);
+
+ if (od->map_handler)
+ {
+ g_signal_handler_disconnect (od->object, od->map_handler);
+ g_signal_handler_disconnect (od->object, od->unmap_handler);
+ }
+
+ g_free (od);
+}
static void
gtk_inspector_widget_tree_init (GtkInspectorWidgetTree *wt)
@@ -71,7 +91,7 @@ gtk_inspector_widget_tree_init (GtkInspectorWidgetTree *wt)
wt->priv->iters = g_hash_table_new_full (g_direct_hash,
g_direct_equal,
NULL,
- (GDestroyNotify) gtk_tree_iter_free);
+ (GDestroyNotify) object_data_free);
gtk_widget_init_template (GTK_WIDGET (wt));
gtk_inspector_widget_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL, NULL);
@@ -126,6 +146,19 @@ gtk_inspector_widget_tree_get_selected_object (GtkInspectorWidgetTree *wt)
return NULL;
}
+static void
+map_or_unmap (GtkWidget *widget, GtkInspectorWidgetTree *wt)
+{
+ GtkTreeIter iter;
+
+ if (gtk_inspector_widget_tree_find_object (wt, G_OBJECT (widget), &iter))
+ {
+ gtk_tree_store_set (wt->priv->model, &iter,
+ SENSITIVE, gtk_widget_get_mapped (widget),
+ -1);
+ }
+}
+
typedef struct
{
GtkInspectorWidgetTree *wt;
@@ -149,22 +182,17 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
GtkTreeIter iter;
const gchar *class_name = G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (object));
gchar *address;
- gboolean realized;
gboolean mapped;
- gboolean visible;
- gboolean is_widget;
+ ObjectData *od;
- realized = mapped = visible = FALSE;
+ mapped = FALSE;
- is_widget = GTK_IS_WIDGET (object);
- if (is_widget)
+ if (GTK_IS_WIDGET (object))
{
GtkWidget *widget = GTK_WIDGET (object);
if (name == NULL)
name = gtk_widget_get_name (GTK_WIDGET (object));
- realized = gtk_widget_get_realized (widget);
mapped = gtk_widget_get_mapped (widget);
- visible = gtk_widget_get_visible (widget);
}
if (name == NULL || g_strcmp0 (name, class_name) == 0)
@@ -186,13 +214,20 @@ gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
OBJECT, object,
OBJECT_TYPE, class_name,
OBJECT_NAME, name,
- WIDGET_REALIZED, realized,
- WIDGET_MAPPED, mapped,
- WIDGET_VISIBLE, visible,
OBJECT_ADDRESS, address,
- SENSITIVE, !is_widget || (realized && mapped && visible),
+ SENSITIVE, !GTK_IS_WIDGET (object) || mapped,
-1);
- g_hash_table_insert (wt->priv->iters, object, gtk_tree_iter_copy (&iter));
+
+ od = g_new0 (ObjectData, 1);
+ od->object = object;
+ od->iter = gtk_tree_iter_copy (&iter);
+ if (GTK_IS_WIDGET (object))
+ {
+ od->map_handler = g_signal_connect (object, "map", G_CALLBACK (map_or_unmap), wt);
+ od->unmap_handler = g_signal_connect (object, "unmap", G_CALLBACK (map_or_unmap), wt);
+ }
+
+ g_hash_table_insert (wt->priv->iters, object, od);
g_free (address);
@@ -254,10 +289,12 @@ gtk_inspector_widget_tree_find_object (GtkInspectorWidgetTree *wt,
GObject *object,
GtkTreeIter *iter)
{
- GtkTreeIter *internal_iter = g_hash_table_lookup (wt->priv->iters, object);
- if (internal_iter)
+ ObjectData *od;
+
+ od = g_hash_table_lookup (wt->priv->iters, object);
+ if (od)
{
- *iter = *internal_iter;
+ *iter = *od->iter;
return TRUE;
}
diff --git a/modules/inspector/widget-tree.ui b/modules/inspector/widget-tree.ui
index fa5a949318..5b94e00de3 100644
--- a/modules/inspector/widget-tree.ui
+++ b/modules/inspector/widget-tree.ui
@@ -5,9 +5,6 @@
-
-
-
@@ -31,7 +28,7 @@
1
- 7
+ 4
@@ -46,49 +43,7 @@
2
- 7
-
-
-
-
-
-
-
-
-
- Mapped
-
-
- True
- 10
-
-
- 4
-
-
-
-
-
-
- Visible
-
-
- True
- 10
-
-
- 5
+ 4
@@ -103,8 +58,8 @@
monospace
- 6
- 7
+ 3
+ 4