From 52ac8814ccd3f22fcd37cb3d644ff4eefc990362 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 5 Nov 2021 18:54:06 -0400 Subject: textview: Don't leave embedded children behind When scrolling embedded widgets out of view, they sometimes get left behind because we don't reallocated them. To avoid that, move _all_ children out of view in size_allocate, and let the current child allocation plumbing move the visible ones back in place. --- gtk/gtktextview.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 340d12b2d9..db23e9ad86 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -4409,6 +4409,8 @@ gtk_text_view_allocate_children (GtkTextView *text_view) { const AnchoredChild *child = iter->data; GtkTextIter child_loc; + GtkRequisition child_req; + GtkAllocation allocation; /* We need to force-validate the regions containing children. */ gtk_text_buffer_get_iter_at_child_anchor (get_buffer (text_view), @@ -4429,6 +4431,15 @@ gtk_text_view_allocate_children (GtkTextView *text_view) } gtk_text_layout_validate_yrange (priv->layout, &child_loc, 0, 1); + + gtk_widget_get_preferred_size (child->widget, &child_req, NULL); + + allocation.x = - child_req.width; + allocation.y = - child_req.height; + allocation.width = child_req.width; + allocation.height = child_req.height; + + gtk_widget_size_allocate (child->widget, &allocation, -1); } } -- cgit v1.2.1