summaryrefslogtreecommitdiff
path: root/gtk/gtkviewport.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-10-05 23:22:25 +0200
committerBenjamin Otte <otte@redhat.com>2010-10-05 23:22:55 +0200
commit04c630d0fd713a683e6a1eb8f3bd7fb9c70a2b1d (patch)
tree27936b803052ad897e28e7aeca5096f8c8bb4947 /gtk/gtkviewport.c
parent2a1650843d0eb4d75e03f6c25aeaf5388de499a1 (diff)
downloadgtk+-04c630d0fd713a683e6a1eb8f3bd7fb9c70a2b1d.tar.gz
viewport: Clip contents properly when called via gtk_widget_draw()
Diffstat (limited to 'gtk/gtkviewport.c')
-rw-r--r--gtk/gtkviewport.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c
index 7f24b54ace..5988682330 100644
--- a/gtk/gtkviewport.c
+++ b/gtk/gtkviewport.c
@@ -784,6 +784,21 @@ gtk_viewport_draw (GtkWidget *widget,
gdk_window_get_height (gtk_widget_get_window (widget)));
}
+ if (gtk_cairo_should_draw_window (cr, priv->view_window))
+ {
+ /* This is a cute hack to ensure the contents of bin_window are
+ * restricted to where they are visible. We only need to do this
+ * clipping when called via gtk_widget_draw() and not in expose
+ * events. And when that happens every window (including this one)
+ * should be drawn.
+ */
+ gdk_window_get_position (priv->view_window, &x, &y);
+ cairo_rectangle (cr, x, y,
+ gdk_window_get_width (priv->view_window),
+ gdk_window_get_height (priv->view_window));
+ cairo_clip (cr);
+ }
+
if (gtk_cairo_should_draw_window (cr, priv->bin_window))
{
gdk_window_get_position (priv->bin_window, &x, &y);