From: Pekka Paalanen <pekka.paala...@collabora.co.uk>

There is no need for weston_subsurface_commit_to_cache() to leave the
pending.buffer set. Reset it to NULL.

This makes pending.buffer always NULL if pending.newly_attached == 0.
IOW, pending.buffer cannot be non-NULL unless
pending.newly_attached == 1.

Therefore no need to check pending.buffer nor cached.buffer_ref.buffer
for the weston_surface_attach() calls.

Signed-off-by: Pekka Paalanen <pekka.paala...@collabora.co.uk>
---
 src/compositor.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 09e1acb..2911157 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2006,13 +2006,15 @@ weston_surface_commit(struct weston_surface *surface)
        struct weston_view *view;
        pixman_region32_t opaque;
 
+       /* XXX: wl_viewport.set without an attach should call configure */
+
        /* wl_surface.set_buffer_transform */
        /* wl_surface.set_buffer_scale */
        /* wl_viewport.set */
        surface->buffer_viewport = surface->pending.buffer_viewport;
 
        /* wl_surface.attach */
-       if (surface->pending.buffer || surface->pending.newly_attached)
+       if (surface->pending.newly_attached)
                weston_surface_attach(surface, surface->pending.buffer);
 
        if (surface->configure && surface->pending.newly_attached)
@@ -2236,7 +2238,7 @@ weston_subsurface_commit_from_cache(struct 
weston_subsurface *sub)
        surface->buffer_viewport = sub->cached.buffer_viewport;
 
        /* wl_surface.attach */
-       if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached)
+       if (sub->cached.newly_attached)
                weston_surface_attach(surface, sub->cached.buffer_ref.buffer);
        weston_buffer_reference(&sub->cached.buffer_ref, NULL);
 
@@ -2314,6 +2316,10 @@ weston_subsurface_commit_to_cache(struct 
weston_subsurface *sub)
        }
        sub->cached.sx += surface->pending.sx;
        sub->cached.sy += surface->pending.sy;
+
+       if (surface->pending.buffer)
+               wl_list_remove(&surface->pending.buffer_destroy_listener.link);
+       surface->pending.buffer = NULL;
        surface->pending.sx = 0;
        surface->pending.sy = 0;
        surface->pending.newly_attached = 0;
-- 
1.8.3.2

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to