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.paalanen@collabora.co.uk>
struct weston_view *view;
pixman_region32_t opaque;
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 */
/* 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)
weston_surface_attach(surface, surface->pending.buffer);
if (surface->configure && surface->pending.newly_attached)
surface->buffer_viewport = sub->cached.buffer_viewport;
/* wl_surface.attach */
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);
weston_surface_attach(surface, sub->cached.buffer_ref.buffer);
weston_buffer_reference(&sub->cached.buffer_ref, NULL);
}
sub->cached.sx += surface->pending.sx;
sub->cached.sy += surface->pending.sy;
}
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;
surface->pending.sx = 0;
surface->pending.sy = 0;
surface->pending.newly_attached = 0;