On Mon, Jul 27, 2015 at 01:09:34PM -0500, Derek Foreman wrote: > Track the seat that initiated a zoom instead of picking the first one. > > Previously, if there are multiple seats then any seat can adjust the zoom > level but the zoom tracks the first seat's pointer. > > Now the zoom will follow the pointer of the seat that initiated the zoom. > > Additionally, if there's no pointer in the first seat, starting a zoom > with the second seat will no longer crash weston. > > Signed-off-by: Derek Foreman <der...@osg.samsung.com>
Pushed: To ssh://git.freedesktop.org/git/wayland/weston 25bd8a7..22276a5 master -> master > --- > > Fixed a typo in the commit log > > desktop-shell/shell.c | 2 +- > src/compositor.h | 4 +++- > src/zoom.c | 17 ++++++----------- > 3 files changed, 10 insertions(+), 13 deletions(-) > > diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c > index 48bee34..dec9169 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 b69547f..b74f7e8 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 18fc7ca..efc658c 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; > -- > 2.4.6 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel