From 3f9bcf3b31c77a861d25afc1fb93d1af02bfb484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Sun, 23 Jul 2017 21:39:38 +0200 Subject: [PATCH] widget: Stop invalidating recursively --- gtk/gtkwidget.c | 60 +++++-------------------------------------------- 1 file changed, 5 insertions(+), 55 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index ac726ab4b6..a0da34d484 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -693,8 +693,6 @@ static void gtk_widget_real_state_flags_changed (GtkWidget static AtkObject* gtk_widget_real_get_accessible (GtkWidget *widget); static void gtk_widget_accessible_interface_init (AtkImplementorIface *iface); static AtkObject* gtk_widget_ref_accessible (AtkImplementor *implementor); -static void gtk_widget_invalidate_widget_windows (GtkWidget *widget, - cairo_region_t *region); static GdkScreen * gtk_widget_get_screen_unchecked (GtkWidget *widget); static gboolean gtk_widget_real_can_activate_accel (GtkWidget *widget, guint signal_id); @@ -5181,43 +5179,6 @@ gtk_widget_get_frame_clock (GtkWidget *widget) } } -static gboolean -invalidate_predicate (GdkWindow *window, - gpointer data) -{ - gpointer user_data; - - gdk_window_get_user_data (window, &user_data); - - return (user_data == data); -} - -/* Invalidate @region in widget->window and all children - * of widget->window owned by widget. @region is in the - * same coordinates as widget->allocation and will be - * modified by this call. - */ -static void -gtk_widget_invalidate_widget_windows (GtkWidget *widget, - cairo_region_t *region) -{ - GtkWidgetPrivate *priv = widget->priv; - - if (!_gtk_widget_get_realized (widget)) - return; - - if (_gtk_widget_get_has_window (widget) && priv->parent) - { - int x, y; - - gdk_window_get_position (priv->window, &x, &y); - cairo_region_translate (region, -x, -y); - } - - gdk_window_invalidate_maybe_recurse (priv->window, region, - invalidate_predicate, widget); -} - static gint get_number (GtkCssStyle *style, guint property) @@ -5607,27 +5568,16 @@ check_clip: if (_gtk_widget_get_mapped (widget) && priv->redraw_on_alloc) { - if (!_gtk_widget_get_has_window (widget) && position_changed) - { - /* Invalidate union(old_clip,priv->clip) in priv->window - */ - cairo_region_t *invalidate = cairo_region_create_rectangle (&priv->clip); - cairo_region_union_rectangle (invalidate, &old_clip); - - gtk_widget_queue_draw_region (widget, invalidate); - cairo_region_destroy (invalidate); - } - - if (size_changed || baseline_changed) - { - /* Invalidate union(old_clip,priv->clip) in priv->window and descendants owned by widget + if (position_changed || size_changed || baseline_changed) + { + /* Invalidate union(old_clip,priv->clip) in the toplevel's window */ cairo_region_t *invalidate = cairo_region_create_rectangle (&priv->clip); cairo_region_union_rectangle (invalidate, &old_clip); - gtk_widget_invalidate_widget_windows (widget, invalidate); + gtk_widget_queue_draw_region (widget, invalidate); cairo_region_destroy (invalidate); - } + } } out: