[PATCH weston] compositor: Don't use surface_list when out of scope.

Kristian Høgsberg hoegsberg at gmail.com
Tue Oct 9 20:16:52 PDT 2012


On Sun, Oct 07, 2012 at 08:56:29AM -0600, Scott Moreau wrote:
> The surface_list can only be used when called in a path originating from
> weston_output_repaint(). Additionally, the calls omitted by this patch were
> redundant since they were called in paths ultimately leading to a repaint call,
> which calls weston_compositor_repick(), which in turn calls weston_device_repick(),
> which ultimately accesses the surface_list. This fixes a crash when having multiple
> surfaces opened and hovering over the launcher tooltips.
> ---
>  src/compositor.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/src/compositor.c b/src/compositor.c
> index e1517bb..c42c8c6 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -1476,7 +1476,6 @@ notify_motion(struct weston_seat *seat, uint32_t time, wl_fixed_t x, wl_fixed_t
>  						   ix, iy, NULL))
>  			weston_output_update_zoom(output, ZOOM_FOCUS_POINTER);
>  
> -	weston_device_repick(seat);

We do need to repick here, we need to which surface the pointer is in
for each motion of the pointer and send enter/leave events
accordingly.  We need to make weston_device_repick use the layer list
instead.

Kristian

>  	interface = pointer->grab->interface;
>  	interface->motion(pointer->grab, time,
>  			  pointer->grab->x, pointer->grab->y);
> @@ -1721,7 +1720,6 @@ notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
>  		pointer->x = x;
>  		pointer->y = y;
>  		compositor->focus = 1;
> -		weston_compositor_repick(compositor);
>  	} else {
>  		compositor->focus = 0;
>  		/* FIXME: We should call wl_pointer_set_focus(seat,
> -- 
> 1.7.11.4
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list