Only update the surface size if a new buffer is attached

This fixes a regression caused by either 918f2dd4 or da75ee1d.  In
particular, if a client called commit without attaching a buffer and if the
compositor had already released its reference to the buffer, then a size of
0x0 would be set on the surface.  In particular, this affects the wayland
backend because it frequently sends only a frame request in order to cause
a refresh.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
dev
Jason Ekstrand 11 years ago committed by Kristian Høgsberg
parent c180977e7c
commit 81038fba86
  1. 12
      src/compositor.c

@ -2110,10 +2110,10 @@ weston_surface_commit(struct weston_surface *surface)
surface->buffer_viewport = surface->pending.buffer_viewport; surface->buffer_viewport = surface->pending.buffer_viewport;
/* wl_surface.attach */ /* wl_surface.attach */
if (surface->pending.buffer || surface->pending.newly_attached) if (surface->pending.buffer || surface->pending.newly_attached) {
weston_surface_attach(surface, surface->pending.buffer); weston_surface_attach(surface, surface->pending.buffer);
weston_surface_set_size_from_buffer(surface);
weston_surface_set_size_from_buffer(surface); }
if (surface->configure && surface->pending.newly_attached) if (surface->configure && surface->pending.newly_attached)
surface->configure(surface, surface->configure(surface,
@ -2336,12 +2336,12 @@ weston_subsurface_commit_from_cache(struct weston_subsurface *sub)
surface->buffer_viewport = sub->cached.buffer_viewport; surface->buffer_viewport = sub->cached.buffer_viewport;
/* wl_surface.attach */ /* wl_surface.attach */
if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached) if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached) {
weston_surface_attach(surface, sub->cached.buffer_ref.buffer); weston_surface_attach(surface, sub->cached.buffer_ref.buffer);
weston_surface_set_size_from_buffer(surface);
}
weston_buffer_reference(&sub->cached.buffer_ref, NULL); weston_buffer_reference(&sub->cached.buffer_ref, NULL);
weston_surface_set_size_from_buffer(surface);
if (surface->configure && sub->cached.newly_attached) if (surface->configure && sub->cached.newly_attached)
surface->configure(surface, sub->cached.sx, sub->cached.sy); surface->configure(surface, sub->cached.sx, sub->cached.sy);
sub->cached.sx = 0; sub->cached.sx = 0;

Loading…
Cancel
Save