diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 48bee343..dec9169b 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -4808,7 +4808,7 @@ do_zoom(struct weston_seat *seat, uint32_t time, uint32_t key, uint32_t axis, if (!output->zoom.active) { if (output->zoom.level <= 0.0) continue; - weston_output_activate_zoom(output); + weston_output_activate_zoom(output, seat); } output->zoom.spring_z.target = output->zoom.level; diff --git a/src/compositor.h b/src/compositor.h index b69547fd..b74f7e8d 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -152,6 +152,7 @@ struct weston_output_zoom { float level; float max_level; float trans_x, trans_y; + struct weston_seat *seat; struct weston_animation animation_z; struct weston_spring spring_z; struct weston_fixed_point current; @@ -1370,7 +1371,8 @@ weston_output_init_zoom(struct weston_output *output); void weston_output_update_zoom(struct weston_output *output); void -weston_output_activate_zoom(struct weston_output *output); +weston_output_activate_zoom(struct weston_output *output, + struct weston_seat *seat); void weston_output_update_matrix(struct weston_output *output); void diff --git a/src/zoom.c b/src/zoom.c index 18fc7cac..efc658c3 100644 --- a/src/zoom.c +++ b/src/zoom.c @@ -50,6 +50,7 @@ weston_zoom_frame_z(struct weston_animation *animation, if (weston_spring_done(&output->zoom.spring_z)) { if (output->zoom.active && output->zoom.level <= 0.0) { output->zoom.active = false; + output->zoom.seat = NULL; output->disable_planes--; wl_list_remove(&output->zoom.motion_listener.link); } @@ -62,13 +63,6 @@ weston_zoom_frame_z(struct weston_animation *animation, weston_output_damage(output); } -static struct weston_seat * -weston_zoom_pick_seat(struct weston_compositor *compositor) -{ - return container_of(compositor->seat_list.next, - struct weston_seat, link); -} - static void zoom_area_center_from_point(struct weston_output *output, wl_fixed_t *x, wl_fixed_t *y) @@ -134,7 +128,7 @@ weston_zoom_transition(struct weston_output *output) WL_EXPORT void weston_output_update_zoom(struct weston_output *output) { - struct weston_seat *seat = weston_zoom_pick_seat(output->compositor); + struct weston_seat *seat = output->zoom.seat; assert(output->zoom.active); @@ -157,14 +151,14 @@ motion(struct wl_listener *listener, void *data) } WL_EXPORT void -weston_output_activate_zoom(struct weston_output *output) +weston_output_activate_zoom(struct weston_output *output, + struct weston_seat *seat) { - struct weston_seat *seat = weston_zoom_pick_seat(output->compositor); - if (output->zoom.active) return; output->zoom.active = true; + output->zoom.seat = seat; output->disable_planes++; wl_signal_add(&seat->pointer->motion_signal, &output->zoom.motion_listener); @@ -174,6 +168,7 @@ WL_EXPORT void weston_output_init_zoom(struct weston_output *output) { output->zoom.active = false; + output->zoom.seat = NULL; output->zoom.increment = 0.07; output->zoom.max_level = 0.95; output->zoom.level = 0.0;