[libhandy] carousel-box: Invalidate cache on realize



commit a6c40868a0c013261d575e2c9670c5ac3e1e5a95
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Tue Nov 10 00:26:54 2020 +0500

    carousel-box: Invalidate cache on realize
    
    Fixes https://gitlab.gnome.org/GNOME/libhandy/-/issues/363

 src/hdy-carousel-box.c | 64 ++++++++++++++++++++++++++------------------------
 1 file changed, 33 insertions(+), 31 deletions(-)
---
diff --git a/src/hdy-carousel-box.c b/src/hdy-carousel-box.c
index 0c4c5759..a0bc4cf1 100644
--- a/src/hdy-carousel-box.c
+++ b/src/hdy-carousel-box.c
@@ -235,6 +235,37 @@ invalidate_handler_cb (GdkWindow      *window,
   cairo_region_union (info->dirty_region, region);
 }
 
+static void
+invalidate_cache_for_child (HdyCarouselBox          *self,
+                            HdyCarouselBoxChildInfo *child)
+{
+  cairo_rectangle_int_t rect;
+
+  rect.x = 0;
+  rect.y = 0;
+  rect.width = self->child_width;
+  rect.height = self->child_height;
+
+  if (child->surface)
+    g_clear_pointer (&child->surface, cairo_surface_destroy);
+
+  if (child->dirty_region)
+    cairo_region_destroy (child->dirty_region);
+  child->dirty_region = cairo_region_create_rectangle (&rect);
+}
+
+static void
+invalidate_drawing_cache (HdyCarouselBox *self)
+{
+  GList *l;
+
+  for (l = self->children; l; l = l->next) {
+    HdyCarouselBoxChildInfo *child_info = l->data;
+
+    invalidate_cache_for_child (self, child_info);
+  }
+}
+
 static void
 register_window (HdyCarouselBoxChildInfo *info,
                  HdyCarouselBox          *self)
@@ -273,6 +304,8 @@ register_window (HdyCarouselBoxChildInfo *info,
   info->window = window;
 
   gdk_window_set_invalidate_handler (window, invalidate_handler_cb);
+
+  invalidate_cache_for_child (self, info);
 }
 
 static void
@@ -679,37 +712,6 @@ hdy_carousel_box_get_preferred_height_for_width (GtkWidget *widget,
            minimum_height, natural_height, NULL, NULL);
 }
 
-static void
-invalidate_cache_for_child (HdyCarouselBox          *self,
-                            HdyCarouselBoxChildInfo *child)
-{
-  cairo_rectangle_int_t rect;
-
-  rect.x = 0;
-  rect.y = 0;
-  rect.width = self->child_width;
-  rect.height = self->child_height;
-
-  if (child->surface)
-    g_clear_pointer (&child->surface, cairo_surface_destroy);
-
-  if (child->dirty_region)
-    cairo_region_destroy (child->dirty_region);
-  child->dirty_region = cairo_region_create_rectangle (&rect);
-}
-
-static void
-invalidate_drawing_cache (HdyCarouselBox *self)
-{
-  GList *l;
-
-  for (l = self->children; l; l = l->next) {
-    HdyCarouselBoxChildInfo *child_info = l->data;
-
-    invalidate_cache_for_child (self, child_info);
-  }
-}
-
 static void
 update_windows (HdyCarouselBox *self)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]