[PATCH] Only update the surface size if a new buffer is attached

Pekka Paalanen ppaalanen at gmail.com
Sun Jan 12 00:52:21 PST 2014


On Sat, 11 Jan 2014 12:12:19 -0600
Jason Ekstrand <jason at jlekstrand.net> wrote:

> 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 at jlekstrand.net>
> ---
>  src/compositor.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/src/compositor.c b/src/compositor.c
> index bb1dfa9..8c69f3c 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -2110,10 +2110,10 @@ weston_surface_commit(struct
> weston_surface *surface) surface->buffer_viewport =
> surface->pending.buffer_viewport; 
>  	/* 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_set_size_from_buffer(surface);
> +		weston_surface_set_size_from_buffer(surface);
> +	}
>  
>  	if (surface->configure &&
> surface->pending.newly_attached) surface->configure(surface,
> @@ -2336,12 +2336,12 @@
> 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.buffer_ref.buffer ||
> sub->cached.newly_attached) { 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_surface_set_size_from_buffer(surface);
> -
>  	if (surface->configure && sub->cached.newly_attached)
>  		surface->configure(surface, sub->cached.sx,
> sub->cached.sy); sub->cached.sx = 0;
> -- 
> 1.8.4.2

Looks good on a very quick glance.


Thanks,
pq


More information about the wayland-devel mailing list