summaryrefslogtreecommitdiff
path: root/src/zoom.c
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2015-07-23 14:55:15 -0500
committerBryce Harrington <bryce@osg.samsung.com>2015-07-29 19:54:17 -0700
commit22276a596a9a73281d9a76e718e1d37ad9edac7a (patch)
tree13b0dd8250f7fce91aba07ca14eae6eb267e3e87 /src/zoom.c
parent25bd8a71fc7ca7015b03138490545ddc7f10c0d4 (diff)
downloadweston-22276a596a9a73281d9a76e718e1d37ad9edac7a.tar.gz
zoom: Store the seat that initiated a zoom
Track the seat that initiated a seat 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 <derekf@osg.samsung.com>
Diffstat (limited to 'src/zoom.c')
-rw-r--r--src/zoom.c17
1 files changed, 6 insertions, 11 deletions
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;