From 3e0694284785153944255a0501e84a76c491e4b4 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 3 Mar 2016 00:35:15 +0100 Subject: [PATCH] widget: Add brute force method to propagate clip When a gtk_widget_queue_allocate() on some widget increases the clip, widget->parent's clip was not updated. This appraoch naively just unions widget's new clip with widget->parent's clip. This of course only works if widget and parent share the same GDK window. In the cases where they don't we can't do anything and need a better fix. Fixes label-text-shadow-changes-modify-clip.ui reftest. --- gtk/gtkwidget.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 604f1487e2..508c0ebadd 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -15520,6 +15520,23 @@ gtk_widget_set_clip (GtkWidget *widget, #endif /* G_ENABLE_DEBUG */ priv->clip = *clip; + + while (priv->parent && + _gtk_widget_get_window (widget) == _gtk_widget_get_window (priv->parent)) + { + GtkWidgetPrivate *parent_priv = priv->parent->priv; + GdkRectangle union_rect; + + gdk_rectangle_union (&priv->clip, + &parent_priv->clip, + &union_rect); + + if (gdk_rectangle_equal (&parent_priv->clip, &union_rect)) + break; + + parent_priv->clip = union_rect; + priv = parent_priv; + } } /*