zoom: use the new pointer motion signal to move the zoom frame.
diff --git a/src/zoom.c b/src/zoom.c
index 962ed6d..622c0d7 100644
--- a/src/zoom.c
+++ b/src/zoom.c
@@ -45,6 +45,7 @@
if (output->zoom.active && output->zoom.level <= 0.0) {
output->zoom.active = 0;
output->disable_planes--;
+ wl_list_remove(&output->zoom.motion_listener.link);
}
output->zoom.spring_z.current = output->zoom.level;
wl_list_remove(&animation->link);
@@ -236,6 +237,31 @@
weston_output_update_zoom_transform(output);
}
+static void
+motion(struct wl_listener *listener, void *data)
+{
+ struct weston_output_zoom *zoom =
+ container_of(listener, struct weston_output_zoom, motion_listener);
+ struct weston_output *output =
+ container_of(zoom, struct weston_output, zoom);
+
+ weston_output_update_zoom(output);
+}
+
+WL_EXPORT void
+weston_output_activate_zoom(struct weston_output *output)
+{
+ struct weston_seat *seat = weston_zoom_pick_seat(output->compositor);
+
+ if (output->zoom.active)
+ return;
+
+ output->zoom.active = 1;
+ output->disable_planes++;
+ wl_signal_add(&seat->pointer->motion_signal,
+ &output->zoom.motion_listener);
+}
+
WL_EXPORT void
weston_output_init_zoom(struct weston_output *output)
{
@@ -253,4 +279,5 @@
output->zoom.spring_xy.friction = 1000;
output->zoom.animation_xy.frame = weston_zoom_frame_xy;
wl_list_init(&output->zoom.animation_xy.link);
+ output->zoom.motion_listener.notify = motion;
}