[PATCH weston] compositor: update the transform when attaching a new buffer

Axel Davy axel.davy at ens.fr
Tue Dec 10 13:33:51 PST 2013


On 10/12/2013, Giulio Camuffo wrote :
> if a surface has not a buffer yet and a weston_view gets created for
> it, the surface's width and height will be 0 and the view's output_mask
> will be 0, because the surface's area is 0. Later commits on the surface
> with valid buffers will then trigger a surface repaint, which will do
> nothing because of the output_mask set to 0. So by calling
> weston_update_transform() on the views of the surface at the end of
> weston_surface_commit() we update the output_mask of the surface and
> of the views, so they will be repainted.
> ---
>   src/compositor.c | 7 ++++++-
>   1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/src/compositor.c b/src/compositor.c
> index 6beea9c..20d9efb 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -2005,7 +2005,6 @@ weston_surface_commit(struct weston_surface *surface)
>   	surface->pending.buffer = NULL;
>   	surface->pending.sx = 0;
>   	surface->pending.sy = 0;
> -	surface->pending.newly_attached = 0;
>   
>   	/* wl_surface.damage */
>   	pixman_region32_union(&surface->damage, &surface->damage,
> @@ -2046,7 +2045,13 @@ weston_surface_commit(struct weston_surface *surface)
>   
>   	weston_surface_commit_subsurface_order(surface);
>   
> +	if (surface->pending.newly_attached) {
> +		wl_list_for_each(view, &surface->views, surface_link)
> +			weston_view_update_transform(view);
> +	}
>   	weston_surface_schedule_repaint(surface);
> +
> +	surface->pending.newly_attached = 0;
>   }
>   
>   static void

Reviewed-by: Axel Davy <axel.davy at ens.fr>

It would probably need similarly to call weston_view_update_transform and weston_surface_schedule_repaint in weston_view_create in case a buffer is already attached, and the surface had no views previously.

Axel Davy



More information about the wayland-devel mailing list