diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-02-12 15:01:58 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-02-12 15:02:34 -0500 |
commit | 48d7219296084e73adcde7b09a8e550d7323deb7 (patch) | |
tree | 9beb993aaf1318743f06681f5cd80badeee7da29 /gtk/gtkpaned.c | |
parent | 5562f4f273200f4617ccacf7f0c4198dfdbdd5f4 (diff) | |
download | gtk+-48d7219296084e73adcde7b09a8e550d7323deb7.tar.gz |
paned: Don't overdraw
When moving children 'off', we can't allow them to draw outside
the paned allocation, so clip when drawing.
https://bugzilla.gnome.org/show_bug.cgi?id=761903
Diffstat (limited to 'gtk/gtkpaned.c')
-rw-r--r-- | gtk/gtkpaned.c | 34 |
1 files changed, 8 insertions, 26 deletions
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index e141eeee06..f49c1af150 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -1798,41 +1798,23 @@ gtk_paned_render (GtkCssGadget *gadget, GtkWidget *widget = gtk_css_gadget_get_owner (gadget); GtkPaned *paned = GTK_PANED (widget); GtkPanedPrivate *priv = paned->priv; - GtkStyleContext *context = gtk_widget_get_style_context (widget); + + cairo_save (cr); + cairo_rectangle (cr, x, y, width, height); + cairo_clip (cr); if (gtk_cairo_should_draw_window (cr, priv->child1_window)) - { - cairo_save (cr); - gtk_cairo_transform_to_window (cr, widget, priv->child1_window); - gtk_render_background (context, - cr, - 0, 0, - gdk_window_get_width (priv->child1_window), - gdk_window_get_height (priv->child1_window)); - cairo_restore (cr); - } + gtk_container_propagate_draw (GTK_CONTAINER (widget), priv->child1, cr); if (gtk_cairo_should_draw_window (cr, priv->child2_window)) - { - cairo_save (cr); - gtk_cairo_transform_to_window (cr, widget, priv->child2_window); - gtk_render_background (context, - cr, - 0, 0, - gdk_window_get_width (priv->child2_window), - gdk_window_get_height (priv->child2_window)); - cairo_restore (cr); - } + gtk_container_propagate_draw (GTK_CONTAINER (widget), priv->child2, cr); if (gtk_cairo_should_draw_window (cr, gtk_widget_get_window (widget)) && priv->child1 && gtk_widget_get_visible (priv->child1) && priv->child2 && gtk_widget_get_visible (priv->child2)) - { - gtk_css_gadget_draw (priv->handle_gadget, cr); - } + gtk_css_gadget_draw (priv->handle_gadget, cr); - /* Chain up to draw children */ - GTK_WIDGET_CLASS (gtk_paned_parent_class)->draw (widget, cr); + cairo_restore (cr); return FALSE; } |