From 61ad0147bd96b0591067c5ed49c4759a4c9d105b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 11 Mar 2023 12:30:44 +0100 Subject: [PATCH] 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. --- gtk/inspector/window.c | 26 ++++++++++++++++++++++++++ gtk/inspector/window.ui | 4 +++- 2 files changed, 29 insertions(+), 1 deletion(-) 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 @@ -584,6 +584,31 @@ gtk_inspector_window_enable_debugging (GtkWindow *window, return FALSE; } +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) { @@ -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 @@ recorder Recorder - + + + -- 2.30.2