evdev: Pass a motion delta to pointer constrain callback

The constrain callback cannot rely on the pointer position of the
corresponding ClutterInputDevice to get the actual delta of the motion
event that is to be constrained since it is only updated when an event is
dispatched. So change the API to pass the previous pointer position when
constraining.

https://bugzilla.gnome.org/show_bug.cgi?id=752752
This commit is contained in:
Jonas Ådahl 2015-07-07 10:23:12 +08:00
parent 52e38d1ab7
commit 8181ef15d6
3 changed files with 13 additions and 1 deletions

View File

@ -289,6 +289,13 @@ Relevant information for developers with existing Clutter applications
wanting to port to newer releases (see NEWS for general information on new
features).
Release Notes for Clutter 1.26
-------------------------------------------------------------------------------
• The evdev backend specific ClutterPointerConstrainCallback type was changed
to include not only the target position but also the previous position. This
is an API change, and will require a version check in any caller code.
Release Notes for Clutter 1.24
-------------------------------------------------------------------------------

View File

@ -452,7 +452,10 @@ new_absolute_motion_event (ClutterInputDevice *input_device,
if (manager_evdev->priv->constrain_callback)
{
manager_evdev->priv->constrain_callback (seat->core_pointer,
us2ms (time_us), &x, &y,
us2ms (time_us),
seat->pointer_x,
seat->pointer_y,
&x, &y,
manager_evdev->priv->constrain_data);
}
else

View File

@ -82,6 +82,8 @@ void clutter_evdev_reclaim_devices (void);
*/
typedef void (*ClutterPointerConstrainCallback) (ClutterInputDevice *device,
guint32 time,
float prev_x,
float prev_y,
float *x,
float *y,
gpointer user_data);