input: Make pointer grab motion callbacks take an event struct
Instead of only passing absolute pointer coordinates, effectively loosing motion event data, pass a struct that can potentially contain different types of motion events, currently being absolute and relative. A helper function to get resulting absolute coordinates was added for when previous callbacks simply used the (x, y) coordinates. Signed-off-by: Jonas Ådahl <jadahl@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
This commit is contained in:
@@ -348,12 +348,12 @@ exposay_focus(struct weston_pointer_grab *grab)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
exposay_motion(struct weston_pointer_grab *grab, uint32_t time,
|
exposay_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct desktop_shell *shell =
|
struct desktop_shell *shell =
|
||||||
container_of(grab, struct desktop_shell, exposay.grab_ptr);
|
container_of(grab, struct desktop_shell, exposay.grab_ptr);
|
||||||
|
|
||||||
weston_pointer_move(grab->pointer, x, y);
|
weston_pointer_move(grab->pointer, event);
|
||||||
|
|
||||||
exposay_pick(shell,
|
exposay_pick(shell,
|
||||||
wl_fixed_to_int(grab->pointer->x),
|
wl_fixed_to_int(grab->pointer->x),
|
||||||
|
|||||||
+12
-10
@@ -1632,14 +1632,14 @@ constrain_position(struct weston_move_grab *move, int *cx, int *cy)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
move_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
move_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct weston_move_grab *move = (struct weston_move_grab *) grab;
|
struct weston_move_grab *move = (struct weston_move_grab *) grab;
|
||||||
struct weston_pointer *pointer = grab->pointer;
|
struct weston_pointer *pointer = grab->pointer;
|
||||||
struct shell_surface *shsurf = move->base.shsurf;
|
struct shell_surface *shsurf = move->base.shsurf;
|
||||||
int cx, cy;
|
int cx, cy;
|
||||||
|
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move(pointer, event);
|
||||||
if (!shsurf)
|
if (!shsurf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1758,7 +1758,7 @@ struct weston_resize_grab {
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
resize_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
resize_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct weston_resize_grab *resize = (struct weston_resize_grab *) grab;
|
struct weston_resize_grab *resize = (struct weston_resize_grab *) grab;
|
||||||
struct weston_pointer *pointer = grab->pointer;
|
struct weston_pointer *pointer = grab->pointer;
|
||||||
@@ -1767,7 +1767,7 @@ resize_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
|||||||
wl_fixed_t from_x, from_y;
|
wl_fixed_t from_x, from_y;
|
||||||
wl_fixed_t to_x, to_y;
|
wl_fixed_t to_x, to_y;
|
||||||
|
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move(pointer, event);
|
||||||
|
|
||||||
if (!shsurf)
|
if (!shsurf)
|
||||||
return;
|
return;
|
||||||
@@ -1973,9 +1973,9 @@ busy_cursor_grab_focus(struct weston_pointer_grab *base)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
busy_cursor_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
busy_cursor_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
weston_pointer_move(grab->pointer, x, y);
|
weston_pointer_move(grab->pointer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -3141,18 +3141,20 @@ popup_grab_focus(struct weston_pointer_grab *grab)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
popup_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
popup_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct weston_pointer *pointer = grab->pointer;
|
struct weston_pointer *pointer = grab->pointer;
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
|
wl_fixed_t x, y;
|
||||||
wl_fixed_t sx, sy;
|
wl_fixed_t sx, sy;
|
||||||
|
|
||||||
if (pointer->focus) {
|
if (pointer->focus) {
|
||||||
|
weston_pointer_motion_to_abs(pointer, event, &x, &y);
|
||||||
weston_view_from_global_fixed(pointer->focus, x, y,
|
weston_view_from_global_fixed(pointer->focus, x, y,
|
||||||
&pointer->sx, &pointer->sy);
|
&pointer->sx, &pointer->sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move(pointer, event);
|
||||||
|
|
||||||
wl_resource_for_each(resource, &pointer->focus_resource_list) {
|
wl_resource_for_each(resource, &pointer->focus_resource_list) {
|
||||||
weston_view_from_global_fixed(pointer->focus,
|
weston_view_from_global_fixed(pointer->focus,
|
||||||
@@ -4812,7 +4814,7 @@ terminate_binding(struct weston_keyboard *keyboard, uint32_t time,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
rotate_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
rotate_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct rotate_grab *rotate =
|
struct rotate_grab *rotate =
|
||||||
container_of(grab, struct rotate_grab, base.grab);
|
container_of(grab, struct rotate_grab, base.grab);
|
||||||
@@ -4820,7 +4822,7 @@ rotate_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
|||||||
struct shell_surface *shsurf = rotate->base.shsurf;
|
struct shell_surface *shsurf = rotate->base.shsurf;
|
||||||
float cx, cy, dx, dy, cposx, cposy, dposx, dposy, r;
|
float cx, cy, dx, dy, cposx, cposy, dposx, dposy, r;
|
||||||
|
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move(pointer, event);
|
||||||
|
|
||||||
if (!shsurf)
|
if (!shsurf)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1380,16 +1380,18 @@ layer_set_pos(struct ivi_layout_layer *layer, wl_fixed_t pos_x,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
pointer_move_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
pointer_move_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct pointer_move_grab *pnt_move_grab =
|
struct pointer_move_grab *pnt_move_grab =
|
||||||
(struct pointer_move_grab *)grab;
|
(struct pointer_move_grab *)grab;
|
||||||
wl_fixed_t pointer_pos[2] = {x, y};
|
wl_fixed_t pointer_pos[2];
|
||||||
|
|
||||||
|
weston_pointer_motion_to_abs(grab->pointer, event,
|
||||||
|
&pointer_pos[0], &pointer_pos[1]);
|
||||||
move_grab_update(&pnt_move_grab->move, pointer_pos);
|
move_grab_update(&pnt_move_grab->move, pointer_pos);
|
||||||
layer_set_pos(pnt_move_grab->base.layer,
|
layer_set_pos(pnt_move_grab->base.layer,
|
||||||
pnt_move_grab->move.pos[0], pnt_move_grab->move.pos[1]);
|
pnt_move_grab->move.pos[0], pnt_move_grab->move.pos[1]);
|
||||||
weston_pointer_move(pnt_move_grab->base.grab.pointer, x, y);
|
weston_pointer_move(pnt_move_grab->base.grab.pointer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -1126,6 +1126,7 @@ x11_backend_deliver_motion_event(struct x11_backend *b,
|
|||||||
{
|
{
|
||||||
struct x11_output *output;
|
struct x11_output *output;
|
||||||
wl_fixed_t x, y;
|
wl_fixed_t x, y;
|
||||||
|
struct weston_pointer_motion_event motion_event = { 0 };
|
||||||
xcb_motion_notify_event_t *motion_notify =
|
xcb_motion_notify_event_t *motion_notify =
|
||||||
(xcb_motion_notify_event_t *) event;
|
(xcb_motion_notify_event_t *) event;
|
||||||
|
|
||||||
@@ -1140,8 +1141,14 @@ x11_backend_deliver_motion_event(struct x11_backend *b,
|
|||||||
wl_fixed_from_int(motion_notify->event_y),
|
wl_fixed_from_int(motion_notify->event_y),
|
||||||
&x, &y);
|
&x, &y);
|
||||||
|
|
||||||
|
motion_event = (struct weston_pointer_motion_event) {
|
||||||
|
.mask = WESTON_POINTER_MOTION_REL,
|
||||||
|
.dx = wl_fixed_to_double(x - b->prev_x),
|
||||||
|
.dy = wl_fixed_to_double(y - b->prev_y)
|
||||||
|
};
|
||||||
|
|
||||||
notify_motion(&b->core_seat, weston_compositor_get_time(),
|
notify_motion(&b->core_seat, weston_compositor_get_time(),
|
||||||
x - b->prev_x, y - b->prev_y);
|
&motion_event);
|
||||||
|
|
||||||
b->prev_x = x;
|
b->prev_x = x;
|
||||||
b->prev_y = y;
|
b->prev_y = y;
|
||||||
|
|||||||
+21
-3
@@ -240,11 +240,24 @@ struct weston_output {
|
|||||||
struct weston_timeline_object timeline;
|
struct weston_timeline_object timeline;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum weston_pointer_motion_mask {
|
||||||
|
WESTON_POINTER_MOTION_ABS = 1 << 0,
|
||||||
|
WESTON_POINTER_MOTION_REL = 1 << 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct weston_pointer_motion_event {
|
||||||
|
uint32_t mask;
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
double dx;
|
||||||
|
double dy;
|
||||||
|
};
|
||||||
|
|
||||||
struct weston_pointer_grab;
|
struct weston_pointer_grab;
|
||||||
struct weston_pointer_grab_interface {
|
struct weston_pointer_grab_interface {
|
||||||
void (*focus)(struct weston_pointer_grab *grab);
|
void (*focus)(struct weston_pointer_grab *grab);
|
||||||
void (*motion)(struct weston_pointer_grab *grab, uint32_t time,
|
void (*motion)(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y);
|
struct weston_pointer_motion_event *event);
|
||||||
void (*button)(struct weston_pointer_grab *grab,
|
void (*button)(struct weston_pointer_grab *grab,
|
||||||
uint32_t time, uint32_t button, uint32_t state);
|
uint32_t time, uint32_t button, uint32_t state);
|
||||||
void (*axis)(struct weston_pointer_grab *grab,
|
void (*axis)(struct weston_pointer_grab *grab,
|
||||||
@@ -366,6 +379,11 @@ struct weston_touch {
|
|||||||
uint32_t grab_time;
|
uint32_t grab_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
weston_pointer_motion_to_abs(struct weston_pointer *pointer,
|
||||||
|
struct weston_pointer_motion_event *event,
|
||||||
|
wl_fixed_t *x, wl_fixed_t *y);
|
||||||
|
|
||||||
struct weston_pointer *
|
struct weston_pointer *
|
||||||
weston_pointer_create(struct weston_seat *seat);
|
weston_pointer_create(struct weston_seat *seat);
|
||||||
void
|
void
|
||||||
@@ -389,7 +407,7 @@ weston_pointer_clamp(struct weston_pointer *pointer,
|
|||||||
wl_fixed_t *fx, wl_fixed_t *fy);
|
wl_fixed_t *fx, wl_fixed_t *fy);
|
||||||
void
|
void
|
||||||
weston_pointer_move(struct weston_pointer *pointer,
|
weston_pointer_move(struct weston_pointer *pointer,
|
||||||
wl_fixed_t x, wl_fixed_t y);
|
struct weston_pointer_motion_event *event);
|
||||||
void
|
void
|
||||||
weston_pointer_set_default_grab(struct weston_pointer *pointer,
|
weston_pointer_set_default_grab(struct weston_pointer *pointer,
|
||||||
const struct weston_pointer_grab_interface *interface);
|
const struct weston_pointer_grab_interface *interface);
|
||||||
@@ -1102,7 +1120,7 @@ weston_surface_activate(struct weston_surface *surface,
|
|||||||
struct weston_seat *seat);
|
struct weston_seat *seat);
|
||||||
void
|
void
|
||||||
notify_motion(struct weston_seat *seat, uint32_t time,
|
notify_motion(struct weston_seat *seat, uint32_t time,
|
||||||
wl_fixed_t dx, wl_fixed_t dy);
|
struct weston_pointer_motion_event *event);
|
||||||
void
|
void
|
||||||
notify_motion_absolute(struct weston_seat *seat, uint32_t time,
|
notify_motion_absolute(struct weston_seat *seat, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y);
|
wl_fixed_t x, wl_fixed_t y);
|
||||||
|
|||||||
+2
-2
@@ -334,7 +334,7 @@ drag_grab_focus(struct weston_pointer_grab *grab)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
drag_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
drag_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct weston_pointer_drag *drag =
|
struct weston_pointer_drag *drag =
|
||||||
container_of(grab, struct weston_pointer_drag, grab);
|
container_of(grab, struct weston_pointer_drag, grab);
|
||||||
@@ -342,7 +342,7 @@ drag_grab_motion(struct weston_pointer_grab *grab, uint32_t time,
|
|||||||
float fx, fy;
|
float fx, fy;
|
||||||
wl_fixed_t sx, sy;
|
wl_fixed_t sx, sy;
|
||||||
|
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move(pointer, event);
|
||||||
|
|
||||||
if (drag->base.icon) {
|
if (drag->base.icon) {
|
||||||
fx = wl_fixed_to_double(pointer->x) + drag->base.dx;
|
fx = wl_fixed_to_double(pointer->x) + drag->base.dx;
|
||||||
|
|||||||
+50
-11
@@ -167,17 +167,20 @@ default_grab_pointer_focus(struct weston_pointer_grab *grab)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
default_grab_pointer_motion(struct weston_pointer_grab *grab, uint32_t time,
|
default_grab_pointer_motion(struct weston_pointer_grab *grab, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct weston_pointer *pointer = grab->pointer;
|
struct weston_pointer *pointer = grab->pointer;
|
||||||
struct wl_list *resource_list;
|
struct wl_list *resource_list;
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
|
wl_fixed_t x, y;
|
||||||
|
|
||||||
if (pointer->focus)
|
if (pointer->focus) {
|
||||||
|
weston_pointer_motion_to_abs(pointer, event, &x, &y);
|
||||||
weston_view_from_global_fixed(pointer->focus, x, y,
|
weston_view_from_global_fixed(pointer->focus, x, y,
|
||||||
&pointer->sx, &pointer->sy);
|
&pointer->sx, &pointer->sy);
|
||||||
|
}
|
||||||
|
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move(pointer, event);
|
||||||
|
|
||||||
resource_list = &pointer->focus_resource_list;
|
resource_list = &pointer->focus_resource_list;
|
||||||
wl_resource_for_each(resource, resource_list) {
|
wl_resource_for_each(resource, resource_list) {
|
||||||
@@ -936,9 +939,9 @@ weston_pointer_clamp(struct weston_pointer *pointer, wl_fixed_t *fx, wl_fixed_t
|
|||||||
weston_pointer_clamp_for_output(pointer, prev, fx, fy);
|
weston_pointer_clamp_for_output(pointer, prev, fx, fy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Takes absolute values */
|
static void
|
||||||
WL_EXPORT void
|
weston_pointer_move_to(struct weston_pointer *pointer,
|
||||||
weston_pointer_move(struct weston_pointer *pointer, wl_fixed_t x, wl_fixed_t y)
|
wl_fixed_t x, wl_fixed_t y)
|
||||||
{
|
{
|
||||||
int32_t ix, iy;
|
int32_t ix, iy;
|
||||||
|
|
||||||
@@ -961,6 +964,33 @@ weston_pointer_move(struct weston_pointer *pointer, wl_fixed_t x, wl_fixed_t y)
|
|||||||
wl_signal_emit(&pointer->motion_signal, pointer);
|
wl_signal_emit(&pointer->motion_signal, pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WL_EXPORT void
|
||||||
|
weston_pointer_motion_to_abs(struct weston_pointer *pointer,
|
||||||
|
struct weston_pointer_motion_event *event,
|
||||||
|
wl_fixed_t *x, wl_fixed_t *y)
|
||||||
|
{
|
||||||
|
if (event->mask & WESTON_POINTER_MOTION_ABS) {
|
||||||
|
*x = wl_fixed_from_double(event->x);
|
||||||
|
*y = wl_fixed_from_double(event->y);
|
||||||
|
} else if (event->mask & WESTON_POINTER_MOTION_REL) {
|
||||||
|
*x = pointer->x + wl_fixed_from_double(event->dx);
|
||||||
|
*y = pointer->y + wl_fixed_from_double(event->dy);
|
||||||
|
} else {
|
||||||
|
assert(!"invalid motion event");
|
||||||
|
*x = *y = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WL_EXPORT void
|
||||||
|
weston_pointer_move(struct weston_pointer *pointer,
|
||||||
|
struct weston_pointer_motion_event *event)
|
||||||
|
{
|
||||||
|
wl_fixed_t x, y;
|
||||||
|
|
||||||
|
weston_pointer_motion_to_abs(pointer, event, &x, &y);
|
||||||
|
weston_pointer_move_to(pointer, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
/** Verify if the pointer is in a valid position and move it if it isn't.
|
/** Verify if the pointer is in a valid position and move it if it isn't.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@@ -1002,18 +1032,19 @@ weston_pointer_handle_output_destroy(struct wl_listener *listener, void *data)
|
|||||||
fy = pointer->y;
|
fy = pointer->y;
|
||||||
|
|
||||||
weston_pointer_clamp_for_output(pointer, closest, &fx, &fy);
|
weston_pointer_clamp_for_output(pointer, closest, &fx, &fy);
|
||||||
weston_pointer_move(pointer, fx, fy);
|
weston_pointer_move_to(pointer, fx, fy);
|
||||||
}
|
}
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
notify_motion(struct weston_seat *seat,
|
notify_motion(struct weston_seat *seat,
|
||||||
uint32_t time, wl_fixed_t dx, wl_fixed_t dy)
|
uint32_t time,
|
||||||
|
struct weston_pointer_motion_event *event)
|
||||||
{
|
{
|
||||||
struct weston_compositor *ec = seat->compositor;
|
struct weston_compositor *ec = seat->compositor;
|
||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
|
||||||
weston_compositor_wake(ec);
|
weston_compositor_wake(ec);
|
||||||
pointer->grab->interface->motion(pointer->grab, time, pointer->x + dx, pointer->y + dy);
|
pointer->grab->interface->motion(pointer->grab, time, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1058,9 +1089,17 @@ notify_motion_absolute(struct weston_seat *seat,
|
|||||||
{
|
{
|
||||||
struct weston_compositor *ec = seat->compositor;
|
struct weston_compositor *ec = seat->compositor;
|
||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
struct weston_pointer_motion_event event = { 0 };
|
||||||
|
|
||||||
weston_compositor_wake(ec);
|
weston_compositor_wake(ec);
|
||||||
pointer->grab->interface->motion(pointer->grab, time, x, y);
|
|
||||||
|
event = (struct weston_pointer_motion_event) {
|
||||||
|
.mask = WESTON_POINTER_MOTION_ABS,
|
||||||
|
.x = wl_fixed_to_double(x),
|
||||||
|
.y = wl_fixed_to_double(y),
|
||||||
|
};
|
||||||
|
|
||||||
|
pointer->grab->interface->motion(pointer->grab, time, &event);
|
||||||
}
|
}
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
@@ -1439,7 +1478,7 @@ notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
|
|||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
|
||||||
if (output) {
|
if (output) {
|
||||||
weston_pointer_move(pointer, x, y);
|
weston_pointer_move_to(pointer, x, y);
|
||||||
} else {
|
} else {
|
||||||
/* FIXME: We should call weston_pointer_set_focus(seat,
|
/* FIXME: We should call weston_pointer_set_focus(seat,
|
||||||
* NULL) here, but somehow that breaks re-entry... */
|
* NULL) here, but somehow that breaks re-entry... */
|
||||||
|
|||||||
@@ -86,14 +86,17 @@ handle_pointer_motion(struct libinput_device *libinput_device,
|
|||||||
{
|
{
|
||||||
struct evdev_device *device =
|
struct evdev_device *device =
|
||||||
libinput_device_get_user_data(libinput_device);
|
libinput_device_get_user_data(libinput_device);
|
||||||
wl_fixed_t dx, dy;
|
struct weston_pointer_motion_event event = { 0 };
|
||||||
|
|
||||||
|
event = (struct weston_pointer_motion_event) {
|
||||||
|
.mask = WESTON_POINTER_MOTION_REL,
|
||||||
|
.dx = libinput_event_pointer_get_dx(pointer_event),
|
||||||
|
.dy = libinput_event_pointer_get_dy(pointer_event),
|
||||||
|
};
|
||||||
|
|
||||||
dx = wl_fixed_from_double(libinput_event_pointer_get_dx(pointer_event));
|
|
||||||
dy = wl_fixed_from_double(libinput_event_pointer_get_dy(pointer_event));
|
|
||||||
notify_motion(device->seat,
|
notify_motion(device->seat,
|
||||||
libinput_event_pointer_get_time(pointer_event),
|
libinput_event_pointer_get_time(pointer_event),
|
||||||
dx,
|
&event);
|
||||||
dy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
+8
-3
@@ -145,10 +145,15 @@ move_pointer(struct wl_client *client, struct wl_resource *resource,
|
|||||||
struct weston_test *test = wl_resource_get_user_data(resource);
|
struct weston_test *test = wl_resource_get_user_data(resource);
|
||||||
struct weston_seat *seat = get_seat(test);
|
struct weston_seat *seat = get_seat(test);
|
||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
struct weston_pointer_motion_event event = { 0 };
|
||||||
|
|
||||||
notify_motion(seat, 100,
|
event = (struct weston_pointer_motion_event) {
|
||||||
wl_fixed_from_int(x) - pointer->x,
|
.mask = WESTON_POINTER_MOTION_REL,
|
||||||
wl_fixed_from_int(y) - pointer->y);
|
.dx = wl_fixed_to_double(wl_fixed_from_int(x) - pointer->x),
|
||||||
|
.dy = wl_fixed_to_double(wl_fixed_from_int(y) - pointer->y),
|
||||||
|
};
|
||||||
|
|
||||||
|
notify_motion(seat, 100, &event);
|
||||||
|
|
||||||
notify_pointer_position(test, resource);
|
notify_pointer_position(test, resource);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user