summaryrefslogtreecommitdiff
path: root/gtk/inspector
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-03-11 12:30:44 +0100
committerMatthias Clasen <mclasen@redhat.com>2023-03-11 12:43:38 +0100
commit61ad0147bd96b0591067c5ed49c4759a4c9d105b (patch)
tree9f2c8fb1fad0794dd0514b31b1165331015b1d42 /gtk/inspector
parent582e74737c4dd615e5a7f50c117e62d01d483964 (diff)
downloadgtk+-61ad0147bd96b0591067c5ed49c4759a4c9d105b.tar.gz
inspector: Force a full redraw for debug nodes
Without this, debug nodes randomly are missing in the tree, where we are reusing older render nodes.
Diffstat (limited to 'gtk/inspector')
-rw-r--r--gtk/inspector/window.c26
-rw-r--r--gtk/inspector/window.ui4
2 files changed, 29 insertions, 1 deletions
diff --git a/gtk/inspector/window.c b/gtk/inspector/window.c
index 510fcf0e00..3884b98b75 100644
--- a/gtk/inspector/window.c
+++ b/gtk/inspector/window.c
@@ -585,6 +585,31 @@ gtk_inspector_window_enable_debugging (GtkWindow *window,
}
static void
+force_one_full_redraw (GtkWidget *w)
+{
+ gtk_widget_queue_draw (w);
+ for (w = gtk_widget_get_first_child (w); w; w = gtk_widget_get_next_sibling (w))
+ force_one_full_redraw (w);
+}
+
+static void
+force_full_redraw (GtkInspectorWindow *window)
+{
+ GListModel *toplevels;
+
+ toplevels = gtk_window_get_toplevels ();
+ for (unsigned int i = 0; i < g_list_model_get_n_items (toplevels); i++)
+ {
+ GtkWidget *w = GTK_WIDGET (g_list_model_get_item (toplevels, i));
+
+ if (gtk_widget_get_display (w) == window->inspected_display)
+ force_one_full_redraw (w);
+
+ g_object_unref (w);
+ }
+}
+
+static void
gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -671,6 +696,7 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
gtk_widget_class_bind_template_callback (widget_class, go_up_cb);
gtk_widget_class_bind_template_callback (widget_class, go_down_cb);
gtk_widget_class_bind_template_callback (widget_class, go_next_cb);
+ gtk_widget_class_bind_template_callback (widget_class, force_full_redraw);
}
static GdkDisplay *
diff --git a/gtk/inspector/window.ui b/gtk/inspector/window.ui
index 2345a9393c..76414a763c 100644
--- a/gtk/inspector/window.ui
+++ b/gtk/inspector/window.ui
@@ -618,7 +618,9 @@
<property name="name">recorder</property>
<property name="title" translatable="yes">Recorder</property>
<property name="child">
- <object class="GtkInspectorRecorder" id="widget_recorder"/>
+ <object class="GtkInspectorRecorder" id="widget_recorder">
+ <signal name="notify::debug-nodes" handler="force_full_redraw" swapped='true'/>
+ </object>
</property>
</object>
</child>