[gtk+] widget: Add brute force method to propagate clip
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] widget: Add brute force method to propagate clip
- Date: Wed, 2 Mar 2016 23:44:31 +0000 (UTC)
commit 3e0694284785153944255a0501e84a76c491e4b4
Author: Benjamin Otte <otte redhat com>
Date: Thu Mar 3 00:35:15 2016 +0100
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 files changed, 17 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 604f148..508c0eb 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;
+ }
}
/*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]