When accumulating damage in the repaint loop, the opaque region of
surfaces in other planes is added to the overall opaque region. This
causes surface->clip to contain the areas obscured by surfaces in
other planes. Change it to contain only the opaque region of surfaces
in the primary plane

This fixes a bug where moving a window that was just moved from the
primary plane to another would leave artifacts on the screen. The
problem was that the damage generated by weston_surface_move_to_plane()
would be clipped on weston_surface_redraw(), leaving the contets below
it unchanged. Moving the overlaid surface would no longer generate
damage on the primary plane, so the contents would remain unchanged
(i.e. wrong) indefinitely.
---
 src/compositor.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/compositor.c b/src/compositor.c
index a3273dc..6a22f1c 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1120,7 +1120,8 @@ surface_accumulate_damage(struct weston_surface *surface,
                              &surface->plane->damage, &surface->damage);
        empty_region(&surface->damage);
        pixman_region32_copy(&surface->clip, opaque);
-       pixman_region32_union(opaque, opaque, &surface->transform.opaque);
+       if (surface->plane == &surface->compositor->primary_plane)
+               pixman_region32_union(opaque, opaque, 
&surface->transform.opaque);
 }
 
 static void
-- 
1.7.9.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to