diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-03-11 12:30:44 +0100 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-03-11 12:43:38 +0100 |
commit | 61ad0147bd96b0591067c5ed49c4759a4c9d105b (patch) | |
tree | 9f2c8fb1fad0794dd0514b31b1165331015b1d42 /gtk/inspector | |
parent | 582e74737c4dd615e5a7f50c117e62d01d483964 (diff) | |
download | gtk+-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.c | 26 | ||||
-rw-r--r-- | gtk/inspector/window.ui | 4 |
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> |