mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 11:58:03 +02:00
input: Re-work weston_pointer_motion_event
This adapts weston_pointer_motion_event struct to align in with weston_key_event and includes the following changes: - include base_event class - remove the const struct timespec from calls and use the base_event class - pass by a const pointer motion event in all the callers - add init / reset functions Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
This commit is contained in:
parent
496e71f146
commit
d99754ef70
15 changed files with 153 additions and 117 deletions
|
|
@ -911,8 +911,7 @@ constrain_position(struct weston_move_grab *move)
|
|||
|
||||
static void
|
||||
move_grab_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_move_grab *move = (struct weston_move_grab *) grab;
|
||||
struct weston_pointer *pointer = grab->pointer;
|
||||
|
|
@ -1141,8 +1140,7 @@ surface_tablet_tool_move(struct shell_surface *shsurf, struct weston_tablet_tool
|
|||
|
||||
static void
|
||||
resize_grab_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_resize_grab *resize = (struct weston_resize_grab *) grab;
|
||||
struct weston_pointer *pointer = grab->pointer;
|
||||
|
|
@ -1311,8 +1309,7 @@ busy_cursor_grab_focus(struct weston_pointer_grab *base)
|
|||
|
||||
static void
|
||||
busy_cursor_grab_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
weston_pointer_move(grab->pointer, event);
|
||||
}
|
||||
|
|
@ -3220,8 +3217,7 @@ terminate_binding(struct weston_keyboard *keyboard, const struct timespec *time,
|
|||
|
||||
static void
|
||||
rotate_grab_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct rotate_grab *rotate =
|
||||
container_of(grab, struct rotate_grab, base.grab);
|
||||
|
|
|
|||
|
|
@ -605,12 +605,18 @@ enum weston_pointer_motion_mask {
|
|||
WESTON_POINTER_MOTION_REL_UNACCEL = 1 << 2,
|
||||
};
|
||||
|
||||
/* base/common struct which all weston_xxx_event should "inherit" */
|
||||
struct weston_input_event {
|
||||
struct timespec *ts;
|
||||
struct weston_seat *seat;
|
||||
};
|
||||
|
||||
struct weston_pointer_motion_event {
|
||||
struct weston_input_event base_event;
|
||||
uint32_t mask;
|
||||
struct timespec time;
|
||||
struct weston_coord_global abs;
|
||||
struct weston_coord rel;
|
||||
struct weston_coord rel_unaccel;
|
||||
const struct weston_coord_global *abs;
|
||||
const struct weston_coord *rel;
|
||||
const struct weston_coord *rel_unaccel;
|
||||
};
|
||||
|
||||
struct weston_pointer_axis_event {
|
||||
|
|
@ -620,12 +626,6 @@ struct weston_pointer_axis_event {
|
|||
int32_t discrete;
|
||||
};
|
||||
|
||||
/* base/common struct which all weston_xxx_event should "inherit" */
|
||||
struct weston_input_event {
|
||||
struct timespec *ts;
|
||||
struct weston_seat *seat;
|
||||
};
|
||||
|
||||
struct weston_key_event {
|
||||
struct weston_input_event base_event;
|
||||
uint32_t key;
|
||||
|
|
@ -638,8 +638,7 @@ struct weston_pointer_grab;
|
|||
struct weston_pointer_grab_interface {
|
||||
void (*focus)(struct weston_pointer_grab *grab);
|
||||
void (*motion)(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event);
|
||||
const struct weston_pointer_motion_event *event);
|
||||
void (*button)(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
uint32_t button, uint32_t state);
|
||||
|
|
@ -967,12 +966,11 @@ struct weston_color_representation_matrix {
|
|||
|
||||
struct weston_coord_global
|
||||
weston_pointer_motion_to_abs(struct weston_pointer *pointer,
|
||||
struct weston_pointer_motion_event *event);
|
||||
const struct weston_pointer_motion_event *event);
|
||||
|
||||
void
|
||||
weston_pointer_send_motion(struct weston_pointer *pointer,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event);
|
||||
const struct weston_pointer_motion_event *event);
|
||||
bool
|
||||
weston_pointer_has_focus_resource(struct weston_pointer *pointer);
|
||||
void
|
||||
|
|
@ -1003,7 +1001,7 @@ void
|
|||
weston_pointer_end_grab(struct weston_pointer *pointer);
|
||||
void
|
||||
weston_pointer_move(struct weston_pointer *pointer,
|
||||
struct weston_pointer_motion_event *event);
|
||||
const struct weston_pointer_motion_event *event);
|
||||
void
|
||||
weston_keyboard_set_focus(struct weston_keyboard *keyboard,
|
||||
struct weston_surface *surface);
|
||||
|
|
@ -1032,6 +1030,13 @@ weston_key_event_init(struct weston_key_event *event, uint32_t key,
|
|||
enum wl_keyboard_key_state key_state,
|
||||
enum weston_key_state_update key_update_state);
|
||||
|
||||
void
|
||||
weston_pointer_motion_event_init(struct weston_pointer_motion_event *event,
|
||||
uint32_t mask,
|
||||
const struct weston_coord_global *abs,
|
||||
const struct weston_coord *rel,
|
||||
const struct weston_coord *rel_unaccel);
|
||||
|
||||
void
|
||||
weston_keyboard_send_modifiers(struct weston_keyboard *keyboard,
|
||||
uint32_t serial, uint32_t mods_depressed,
|
||||
|
|
|
|||
|
|
@ -1713,8 +1713,7 @@ layer_set_pos(struct hmi_controller *hmi_ctrl, struct ivi_layout_layer *layer,
|
|||
|
||||
static void
|
||||
pointer_move_grab_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct pointer_move_grab *pnt_move_grab =
|
||||
(struct pointer_move_grab *)grab;
|
||||
|
|
|
|||
|
|
@ -68,8 +68,7 @@ pointer_move_grab_frame(struct weston_pointer_grab *grab)
|
|||
|
||||
static void
|
||||
pointer_move_grab_motion(struct weston_pointer_grab *pointer_grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct kiosk_shell_grab *shgrab =
|
||||
container_of(pointer_grab, struct kiosk_shell_grab, pointer_grab);
|
||||
|
|
|
|||
|
|
@ -1282,9 +1282,15 @@ rdp_translate_and_notify_mouse_position(RdpPeerContext *peerContext, UINT16 x, U
|
|||
different scaling. In such case, hit test to that window area on
|
||||
non primary-resident monitor (surface->output) dosn't work. */
|
||||
if (to_weston_coordinate(peerContext, &sx, &sy)) {
|
||||
struct weston_pointer_motion_event event;
|
||||
|
||||
pos.c = weston_coord(sx, sy);
|
||||
weston_compositor_get_time(&time);
|
||||
notify_motion_absolute(peerContext->item.seat, &time, pos);
|
||||
|
||||
weston_input_event_init(&event.base_event, &time, peerContext->item.seat);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_ABS,
|
||||
&pos, NULL, NULL);
|
||||
notify_motion_absolute(peerContext->item.seat, &event);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
|
@ -1515,9 +1521,15 @@ xf_extendedMouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
|||
|
||||
output = rdp_get_first_output(peerContext->rdpBackend);
|
||||
if (x < output->base.width && y < output->base.height) {
|
||||
struct weston_pointer_motion_event event;
|
||||
|
||||
weston_compositor_get_time(&time);
|
||||
pos.c = weston_coord(x, y);
|
||||
notify_motion_absolute(peerContext->item.seat, &time, pos);
|
||||
|
||||
weston_input_event_init(&event.base_event, &time, peerContext->item.seat);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_ABS,
|
||||
&pos, NULL, NULL);
|
||||
notify_motion_absolute(peerContext->item.seat, &event);
|
||||
need_frame = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -447,9 +447,14 @@ vnc_pointer_event(struct nvnc_client *client, uint16_t x, uint16_t y,
|
|||
|
||||
if (x < output->base.width && y < output->base.height) {
|
||||
struct weston_coord_global pos;
|
||||
struct weston_pointer_motion_event event;
|
||||
|
||||
pos = weston_coord_global_from_output_point(x, y, &output->base);
|
||||
notify_motion_absolute(peer->seat, &time, pos);
|
||||
|
||||
weston_input_event_init(&event.base_event, &time, peer->seat);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_ABS,
|
||||
&pos, NULL, NULL);
|
||||
notify_motion_absolute(peer->seat, &event);
|
||||
}
|
||||
|
||||
changed_button_mask = peer->last_button_mask ^ button_mask;
|
||||
|
|
|
|||
|
|
@ -1677,6 +1677,7 @@ input_handle_motion(void *data, struct wl_pointer *pointer,
|
|||
bool want_frame = false;
|
||||
double x, y;
|
||||
struct weston_coord_global pos;
|
||||
struct weston_pointer_motion_event event;
|
||||
struct timespec ts;
|
||||
|
||||
if (!input->output)
|
||||
|
|
@ -1717,7 +1718,11 @@ input_handle_motion(void *data, struct wl_pointer *pointer,
|
|||
|
||||
if (location == THEME_LOCATION_CLIENT_AREA) {
|
||||
timespec_from_msec(&ts, time);
|
||||
notify_motion_absolute(&input->base, &ts, pos);
|
||||
|
||||
weston_input_event_init(&event.base_event, &ts, &input->base);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_ABS,
|
||||
&pos, NULL, NULL);
|
||||
notify_motion_absolute(&input->base, &event);
|
||||
want_frame = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1520,7 +1520,8 @@ x11_backend_deliver_motion_event(struct x11_backend *b,
|
|||
{
|
||||
struct x11_output *output;
|
||||
struct weston_coord_global pos;
|
||||
struct weston_pointer_motion_event motion_event = { 0 };
|
||||
struct weston_pointer_motion_event motion_event;
|
||||
struct weston_coord rel;
|
||||
xcb_motion_notify_event_t *motion_notify =
|
||||
(xcb_motion_notify_event_t *) event;
|
||||
struct timespec time;
|
||||
|
|
@ -1535,12 +1536,13 @@ x11_backend_deliver_motion_event(struct x11_backend *b,
|
|||
motion_notify->event_y,
|
||||
&output->base);
|
||||
|
||||
motion_event = (struct weston_pointer_motion_event) {
|
||||
.mask = WESTON_POINTER_MOTION_REL,
|
||||
.rel = weston_coord_global_sub(pos, b->prev_pos).c,
|
||||
};
|
||||
rel = weston_coord_global_sub(pos, b->prev_pos).c;
|
||||
weston_compositor_get_time(&time);
|
||||
notify_motion(&b->core_seat, &time, &motion_event);
|
||||
|
||||
weston_input_event_init(&motion_event.base_event, &time, &b->core_seat);
|
||||
weston_pointer_motion_event_init(&motion_event, WESTON_POINTER_MOTION_REL,
|
||||
NULL, &rel, NULL);
|
||||
notify_motion(&b->core_seat, &motion_event);
|
||||
notify_pointer_frame(&b->core_seat);
|
||||
|
||||
b->prev_pos = pos;
|
||||
|
|
|
|||
|
|
@ -251,11 +251,11 @@ void
|
|||
notify_keyboard_focus_out(struct weston_seat *seat);
|
||||
|
||||
void
|
||||
notify_motion(struct weston_seat *seat, const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event);
|
||||
notify_motion(struct weston_seat *seat, const struct weston_pointer_motion_event *event);
|
||||
|
||||
void
|
||||
notify_motion_absolute(struct weston_seat *seat, const struct timespec *time,
|
||||
struct weston_coord_global pos);
|
||||
notify_motion_absolute(struct weston_seat *seat, const struct weston_pointer_motion_event *event);
|
||||
|
||||
void
|
||||
notify_modifiers(struct weston_seat *seat, uint32_t serial);
|
||||
|
||||
|
|
|
|||
|
|
@ -8006,6 +8006,7 @@ weston_output_set_transform(struct weston_output *output,
|
|||
uint32_t transform)
|
||||
{
|
||||
struct weston_pointer_motion_event ev;
|
||||
struct weston_coord_global pos;
|
||||
struct wl_resource *resource;
|
||||
struct weston_seat *seat;
|
||||
pixman_region32_t old_region;
|
||||
|
|
@ -8061,7 +8062,8 @@ weston_output_set_transform(struct weston_output *output,
|
|||
mid_y = output->pos.c.y + output->height / 2;
|
||||
|
||||
ev.mask = WESTON_POINTER_MOTION_ABS;
|
||||
ev.abs.c = weston_coord(mid_x, mid_y);
|
||||
pos.c = weston_coord(mid_x, mid_y);
|
||||
ev.abs = &pos;
|
||||
wl_list_for_each(seat, &output->compositor->seat_list, link) {
|
||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||
|
||||
|
|
|
|||
|
|
@ -591,8 +591,7 @@ drag_grab_focus(struct weston_pointer_grab *grab)
|
|||
|
||||
static void
|
||||
drag_grab_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_pointer_drag *drag =
|
||||
container_of(grab, struct weston_pointer_drag, grab);
|
||||
|
|
@ -610,7 +609,7 @@ drag_grab_motion(struct weston_pointer_grab *grab,
|
|||
if (drag->base.focus_resource) {
|
||||
struct weston_coord_surface surf_pos;
|
||||
|
||||
msecs = timespec_to_msec(time);
|
||||
msecs = timespec_to_msec(event->base_event.ts);
|
||||
surf_pos = weston_coord_global_to_surface(drag->base.focus,
|
||||
pointer->pos);
|
||||
|
||||
|
|
|
|||
|
|
@ -117,10 +117,9 @@ weston_desktop_seat_popup_grab_pointer_focus(struct weston_pointer_grab *grab)
|
|||
|
||||
static void
|
||||
weston_desktop_seat_popup_grab_pointer_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
weston_pointer_send_motion(grab->pointer, time, event);
|
||||
weston_pointer_send_motion(grab->pointer, event);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include <linux/input.h>
|
||||
|
||||
#include "shared/helpers.h"
|
||||
#include "shared/weston-assert.h"
|
||||
#include "shared/os-compatibility.h"
|
||||
#include "shared/timespec-util.h"
|
||||
#include <libweston/libweston.h>
|
||||
|
|
@ -304,14 +305,14 @@ static void unbind_resource(struct wl_resource *resource)
|
|||
|
||||
WL_EXPORT struct weston_coord_global
|
||||
weston_pointer_motion_to_abs(struct weston_pointer *pointer,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_coord_global pos;
|
||||
|
||||
if (event->mask & WESTON_POINTER_MOTION_ABS) {
|
||||
return event->abs;
|
||||
return *event->abs;
|
||||
} else if (event->mask & WESTON_POINTER_MOTION_REL) {
|
||||
pos.c = weston_coord_add(pointer->pos.c, event->rel);
|
||||
pos.c = weston_coord_add(pointer->pos.c, *event->rel);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
|
@ -322,22 +323,22 @@ weston_pointer_motion_to_abs(struct weston_pointer *pointer,
|
|||
|
||||
static bool
|
||||
weston_pointer_motion_to_rel(struct weston_pointer *pointer,
|
||||
struct weston_pointer_motion_event *event,
|
||||
const struct weston_pointer_motion_event *event,
|
||||
struct weston_coord *rel,
|
||||
struct weston_coord *rel_unaccel)
|
||||
{
|
||||
if (event->mask & WESTON_POINTER_MOTION_REL &&
|
||||
event->mask & WESTON_POINTER_MOTION_REL_UNACCEL) {
|
||||
*rel = event->rel;
|
||||
*rel_unaccel = event->rel_unaccel;
|
||||
*rel = *event->rel;
|
||||
*rel_unaccel = *event->rel_unaccel;
|
||||
return true;
|
||||
} else if (event->mask & WESTON_POINTER_MOTION_REL) {
|
||||
*rel = event->rel;
|
||||
*rel_unaccel = event->rel;
|
||||
*rel = *event->rel;
|
||||
*rel_unaccel = *event->rel;
|
||||
return true;
|
||||
} else if (event->mask & WESTON_POINTER_MOTION_REL_UNACCEL) {
|
||||
*rel = event->rel_unaccel;
|
||||
*rel_unaccel = event->rel_unaccel;
|
||||
*rel = *event->rel_unaccel;
|
||||
*rel_unaccel = *event->rel_unaccel;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
|
@ -546,7 +547,7 @@ weston_pointer_move_to(struct weston_pointer *pointer,
|
|||
|
||||
WL_EXPORT void
|
||||
weston_pointer_move(struct weston_pointer *pointer,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_coord_global pos;
|
||||
|
||||
|
|
@ -556,8 +557,7 @@ weston_pointer_move(struct weston_pointer *pointer,
|
|||
|
||||
static void
|
||||
pointer_send_relative_motion(struct weston_pointer *pointer,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
uint64_t time_usec;
|
||||
struct weston_coord rel, rel_unaccel;
|
||||
|
|
@ -573,9 +573,9 @@ pointer_send_relative_motion(struct weston_pointer *pointer,
|
|||
return;
|
||||
|
||||
resource_list = &pointer->focus_client->relative_pointer_resources;
|
||||
time_usec = timespec_to_usec(&event->time);
|
||||
time_usec = timespec_to_usec(event->base_event.ts);
|
||||
if (time_usec == 0)
|
||||
time_usec = timespec_to_usec(time);
|
||||
time_usec = timespec_to_usec(event->base_event.ts);
|
||||
|
||||
wl_resource_for_each(resource, resource_list) {
|
||||
zwp_relative_pointer_v1_send_relative_motion(
|
||||
|
|
@ -590,9 +590,8 @@ pointer_send_relative_motion(struct weston_pointer *pointer,
|
|||
}
|
||||
|
||||
static void
|
||||
pointer_send_motion(struct weston_pointer *pointer,
|
||||
const struct timespec *time,
|
||||
wl_fixed_t sx, wl_fixed_t sy)
|
||||
pointer_send_motion(struct weston_pointer *pointer, wl_fixed_t sx, wl_fixed_t sy,
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct wl_list *resource_list;
|
||||
struct wl_resource *resource;
|
||||
|
|
@ -602,19 +601,18 @@ pointer_send_motion(struct weston_pointer *pointer,
|
|||
return;
|
||||
|
||||
resource_list = &pointer->focus_client->pointer_resources;
|
||||
msecs = timespec_to_msec(time);
|
||||
msecs = timespec_to_msec(event->base_event.ts);
|
||||
wl_resource_for_each(resource, resource_list) {
|
||||
send_timestamps_for_input_resource(resource,
|
||||
&pointer->timestamps_list,
|
||||
time);
|
||||
event->base_event.ts);
|
||||
wl_pointer_send_motion(resource, msecs, sx, sy);
|
||||
}
|
||||
}
|
||||
|
||||
WL_EXPORT void
|
||||
weston_pointer_send_motion(struct weston_pointer *pointer,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
wl_fixed_t old_sx;
|
||||
wl_fixed_t old_sy;
|
||||
|
|
@ -622,7 +620,7 @@ weston_pointer_send_motion(struct weston_pointer *pointer,
|
|||
struct weston_coord_global pos;
|
||||
|
||||
pos = weston_pointer_motion_to_abs(pointer, event);
|
||||
pos = weston_pointer_clamp(pointer,pos);
|
||||
pos = weston_pointer_clamp(pointer, pos);
|
||||
|
||||
if (pointer->focus) {
|
||||
struct weston_coord_surface surf_pos;
|
||||
|
|
@ -642,19 +640,17 @@ weston_pointer_send_motion(struct weston_pointer *pointer,
|
|||
|
||||
if (pointer->focus && old_focus == pointer->focus &&
|
||||
(old_sx != pointer->sx || old_sy != pointer->sy)) {
|
||||
pointer_send_motion(pointer, time,
|
||||
pointer->sx, pointer->sy);
|
||||
pointer_send_motion(pointer, pointer->sx, pointer->sy, event);
|
||||
}
|
||||
|
||||
pointer_send_relative_motion(pointer, time, event);
|
||||
pointer_send_relative_motion(pointer, event);
|
||||
}
|
||||
|
||||
static void
|
||||
default_grab_pointer_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
weston_pointer_send_motion(grab->pointer, time, event);
|
||||
weston_pointer_send_motion(grab->pointer, event);
|
||||
}
|
||||
|
||||
/** Check if the pointer has focused resources.
|
||||
|
|
@ -2244,14 +2240,13 @@ weston_pointer_handle_output_destroy(struct wl_listener *listener, void *data)
|
|||
|
||||
WL_EXPORT void
|
||||
notify_motion(struct weston_seat *seat,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_compositor *ec = seat->compositor;
|
||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||
|
||||
weston_compositor_wake(ec);
|
||||
pointer->grab->interface->motion(pointer->grab, time, event);
|
||||
pointer->grab->interface->motion(pointer->grab, event);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -2291,20 +2286,14 @@ run_modifier_bindings(struct weston_seat *seat, uint32_t old, uint32_t new)
|
|||
}
|
||||
|
||||
WL_EXPORT void
|
||||
notify_motion_absolute(struct weston_seat *seat, const struct timespec *time,
|
||||
struct weston_coord_global pos)
|
||||
notify_motion_absolute(struct weston_seat *seat,
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_compositor *ec = seat->compositor;
|
||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||
struct weston_pointer_motion_event event = { 0 };
|
||||
|
||||
weston_compositor_wake(ec);
|
||||
|
||||
event = (struct weston_pointer_motion_event) {
|
||||
.mask = WESTON_POINTER_MOTION_ABS,
|
||||
.abs = pos,
|
||||
};
|
||||
pointer->grab->interface->motion(pointer->grab, time, &event);
|
||||
pointer->grab->interface->motion(pointer->grab, event);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
|
|
@ -4734,10 +4723,9 @@ locked_pointer_grab_pointer_focus(struct weston_pointer_grab *grab)
|
|||
|
||||
static void
|
||||
locked_pointer_grab_pointer_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
pointer_send_relative_motion(grab->pointer, time, event);
|
||||
pointer_send_relative_motion(grab->pointer, event);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -5538,7 +5526,7 @@ get_motion_directions(struct line *motion)
|
|||
|
||||
static struct weston_coord_global
|
||||
weston_pointer_clamp_event_to_region(struct weston_pointer *pointer,
|
||||
struct weston_pointer_motion_event *event,
|
||||
const struct weston_pointer_motion_event *event,
|
||||
pixman_region32_t *region)
|
||||
{
|
||||
wl_fixed_t old_sx = pointer->sx;
|
||||
|
|
@ -5705,8 +5693,7 @@ maybe_warp_confined_pointer(struct weston_pointer_constraint *constraint)
|
|||
|
||||
static void
|
||||
confined_pointer_grab_pointer_motion(struct weston_pointer_grab *grab,
|
||||
const struct timespec *time,
|
||||
struct weston_pointer_motion_event *event)
|
||||
const struct weston_pointer_motion_event *event)
|
||||
{
|
||||
struct weston_pointer_constraint *constraint =
|
||||
container_of(grab, struct weston_pointer_constraint, grab);
|
||||
|
|
@ -5737,11 +5724,10 @@ confined_pointer_grab_pointer_motion(struct weston_pointer_grab *grab,
|
|||
pointer->sy = wl_fixed_from_double(surf_pos.c.y);
|
||||
|
||||
if (old_sx != pointer->sx || old_sy != pointer->sy) {
|
||||
pointer_send_motion(pointer, time,
|
||||
pointer->sx, pointer->sy);
|
||||
pointer_send_motion(pointer, pointer->sx, pointer->sy, event);
|
||||
}
|
||||
|
||||
pointer_send_relative_motion(pointer, time, event);
|
||||
pointer_send_relative_motion(pointer, event);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -6045,3 +6031,26 @@ weston_key_event_init(struct weston_key_event *event, uint32_t key, enum wl_keyb
|
|||
event->key_state = key_state;
|
||||
event->key_update_state = key_update_state;
|
||||
}
|
||||
|
||||
WL_EXPORT void
|
||||
weston_pointer_motion_event_init(struct weston_pointer_motion_event *event,
|
||||
uint32_t mask,
|
||||
const struct weston_coord_global *abs,
|
||||
const struct weston_coord *rel,
|
||||
const struct weston_coord *rel_unaccel)
|
||||
{
|
||||
|
||||
if (mask & WESTON_POINTER_MOTION_ABS)
|
||||
weston_assert_ptr_not_null(event->base_event.seat->compositor, abs);
|
||||
|
||||
if (mask & WESTON_POINTER_MOTION_REL)
|
||||
weston_assert_ptr_not_null(event->base_event.seat->compositor, rel);
|
||||
|
||||
if (mask & WESTON_POINTER_MOTION_REL_UNACCEL)
|
||||
weston_assert_ptr_not_null(event->base_event.seat->compositor, rel_unaccel);
|
||||
|
||||
event->mask = mask;
|
||||
event->abs = abs;
|
||||
event->rel = rel;
|
||||
event->rel_unaccel = rel_unaccel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,9 +122,10 @@ handle_pointer_motion(struct libinput_device *libinput_device,
|
|||
{
|
||||
struct evdev_device *device =
|
||||
libinput_device_get_user_data(libinput_device);
|
||||
struct weston_pointer_motion_event event = { 0 };
|
||||
struct weston_pointer_motion_event event;
|
||||
struct timespec time;
|
||||
double dx_unaccel, dy_unaccel;
|
||||
struct weston_coord rel, rel_unaccel;
|
||||
|
||||
ensure_pointer_capability(libinput_device);
|
||||
|
||||
|
|
@ -133,15 +134,14 @@ handle_pointer_motion(struct libinput_device *libinput_device,
|
|||
dx_unaccel = libinput_event_pointer_get_dx_unaccelerated(pointer_event);
|
||||
dy_unaccel = libinput_event_pointer_get_dy_unaccelerated(pointer_event);
|
||||
|
||||
event = (struct weston_pointer_motion_event) {
|
||||
.mask = WESTON_POINTER_MOTION_REL |
|
||||
WESTON_POINTER_MOTION_REL_UNACCEL,
|
||||
.time = time,
|
||||
};
|
||||
event.rel = weston_coord(libinput_event_pointer_get_dx(pointer_event),
|
||||
libinput_event_pointer_get_dy(pointer_event));
|
||||
event.rel_unaccel = weston_coord(dx_unaccel, dy_unaccel);
|
||||
notify_motion(device->seat, &time, &event);
|
||||
rel = weston_coord(libinput_event_pointer_get_dx(pointer_event),
|
||||
libinput_event_pointer_get_dy(pointer_event));
|
||||
rel_unaccel = weston_coord(dx_unaccel, dy_unaccel);
|
||||
|
||||
weston_input_event_init(&event.base_event, &time, device->seat);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_REL |
|
||||
WESTON_POINTER_MOTION_REL_UNACCEL, NULL, &rel, &rel_unaccel);
|
||||
notify_motion(device->seat, &event);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -156,6 +156,7 @@ handle_pointer_motion_absolute(
|
|||
struct weston_output *output = device->output;
|
||||
struct weston_coord_global pos;
|
||||
struct timespec time;
|
||||
struct weston_pointer_motion_event event;
|
||||
double x, y;
|
||||
uint32_t width, height;
|
||||
|
||||
|
|
@ -174,7 +175,10 @@ handle_pointer_motion_absolute(
|
|||
y = libinput_event_pointer_get_absolute_y_transformed(pointer_event,
|
||||
height);
|
||||
pos = weston_coord_global_from_output_point(x, y, output);
|
||||
notify_motion_absolute(device->seat, &time, pos);
|
||||
weston_input_event_init(&event.base_event, &time, device->seat);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_ABS,
|
||||
&pos, NULL, NULL);
|
||||
notify_motion_absolute(device->seat, &event);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -412,19 +412,19 @@ move_pointer(struct wl_client *client, struct wl_resource *resource,
|
|||
struct weston_test *test = wl_resource_get_user_data(resource);
|
||||
struct weston_seat *seat = get_seat(test);
|
||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||
struct weston_pointer_motion_event event = { 0 };
|
||||
struct weston_pointer_motion_event event;
|
||||
struct weston_coord_global pos;
|
||||
struct weston_coord rel;
|
||||
struct timespec time;
|
||||
|
||||
pos.c = weston_coord(x, y);
|
||||
event = (struct weston_pointer_motion_event) {
|
||||
.mask = WESTON_POINTER_MOTION_REL,
|
||||
.rel = weston_coord_global_sub(pos, pointer->pos).c,
|
||||
};
|
||||
|
||||
timespec_from_proto(&time, tv_sec_hi, tv_sec_lo, tv_nsec);
|
||||
rel = weston_coord_global_sub(pos, pointer->pos).c;
|
||||
|
||||
notify_motion(seat, &time, &event);
|
||||
weston_input_event_init(&event.base_event, &time, seat);
|
||||
weston_pointer_motion_event_init(&event, WESTON_POINTER_MOTION_REL,
|
||||
NULL, &rel, NULL);
|
||||
notify_motion(seat, &event);
|
||||
|
||||
notify_pointer_position(test, resource);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue