gdk: Short-circuit some surface setters
authorMatthias Clasen <mclasen@redhat.com>
Wed, 20 May 2020 14:55:27 +0000 (10:55 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 20 May 2020 14:55:27 +0000 (10:55 -0400)
Don't call into the backends when the input region
or shadow width don't actually change. This avoid
distracting calls in debug logs, and just generally
is the right thing to do.

gdk/gdksurface.c

index 104bc719d24517d45dd8ea7313b82db777e94d1a..a154319cde5723a94119b90f4c16a2294708cc09 100644 (file)
@@ -2118,6 +2118,9 @@ gdk_surface_set_input_region (GdkSurface     *surface,
   if (GDK_SURFACE_DESTROYED (surface))
     return;
 
+  if (cairo_region_equal (surface->input_region, region))
+    return;
+
   if (surface->input_region)
     cairo_region_destroy (surface->input_region);
 
@@ -2702,6 +2705,12 @@ gdk_surface_set_shadow_width (GdkSurface *surface,
   g_return_if_fail (!GDK_SURFACE_DESTROYED (surface));
   g_return_if_fail (left >= 0 && right >= 0 && top >= 0 && bottom >= 0);
 
+  if (surface->shadow_left == left &&
+      surface->shadow_right == right &&
+      surface->shadow_top == top &&
+      surface->shadow_bottom == bottom)
+    return;
+
   surface->shadow_top = top;
   surface->shadow_left = left;
   surface->shadow_right = right;