window: Only set opaque and input regions if they change
authorKristian Høgsberg <krh@bitplanet.net>
Mon, 5 Mar 2012 04:47:56 +0000 (23:47 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 5 Mar 2012 05:04:57 +0000 (00:04 -0500)
Setting these regions damages the entire window or causes a repick, which
we don't want to trigger if we don't need to.

clients/window.c

index e917ce6..190b456 100644 (file)
@@ -818,8 +818,19 @@ window_attach_surface(struct window *window)
                return;
        }
 
-       wl_surface_set_input_region(window->surface, window->input_region);
-       wl_surface_set_opaque_region(window->surface, window->opaque_region);
+       if (window->input_region) {
+               wl_surface_set_input_region(window->surface,
+                                           window->input_region);
+               wl_region_destroy(window->input_region);
+               window->input_region = NULL;
+       }
+
+       if (window->opaque_region) {
+               wl_surface_set_opaque_region(window->surface,
+                                            window->opaque_region);
+               wl_region_destroy(window->opaque_region);
+               window->opaque_region = NULL;
+       }
 
        wl_surface_damage(window->surface, 0, 0,
                          window->allocation.width,