summaryrefslogtreecommitdiff
path: root/sway/input/cursor.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/input/cursor.c')
-rw-r--r--sway/input/cursor.c149
1 files changed, 59 insertions, 90 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 0b2f03a2..6fddee90 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -386,29 +386,28 @@ static void pointer_motion(struct sway_cursor *cursor, uint32_t time_msec,
static void handle_pointer_motion_relative(
struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, motion);
- struct wlr_pointer_motion_event *e = data;
- cursor_handle_activity_from_device(cursor, &e->pointer->base);
+ struct wlr_event_pointer_motion *e = data;
+ cursor_handle_activity_from_device(cursor, e->device);
- pointer_motion(cursor, e->time_msec, &e->pointer->base, e->delta_x,
- e->delta_y, e->unaccel_dx, e->unaccel_dy);
+ pointer_motion(cursor, e->time_msec, e->device, e->delta_x, e->delta_y,
+ e->unaccel_dx, e->unaccel_dy);
}
static void handle_pointer_motion_absolute(
struct wl_listener *listener, void *data) {
struct sway_cursor *cursor =
wl_container_of(listener, cursor, motion_absolute);
- struct wlr_pointer_motion_absolute_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_motion_absolute *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
double lx, ly;
- wlr_cursor_absolute_to_layout_coords(cursor->cursor, &event->pointer->base,
+ wlr_cursor_absolute_to_layout_coords(cursor->cursor, event->device,
event->x, event->y, &lx, &ly);
double dx = lx - cursor->cursor->x;
double dy = ly - cursor->cursor->y;
- pointer_motion(cursor, event->time_msec, &event->pointer->base, dx, dy,
- dx, dy);
+ pointer_motion(cursor, event->time_msec, event->device, dx, dy, dx, dy);
}
void dispatch_cursor_button(struct sway_cursor *cursor,
@@ -423,7 +422,7 @@ void dispatch_cursor_button(struct sway_cursor *cursor,
static void handle_pointer_button(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, button);
- struct wlr_pointer_button_event *event = data;
+ struct wlr_event_pointer_button *event = data;
if (event->state == WLR_BUTTON_PRESSED) {
cursor->pressed_button_count++;
@@ -435,20 +434,20 @@ static void handle_pointer_button(struct wl_listener *listener, void *data) {
}
}
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
- dispatch_cursor_button(cursor, &event->pointer->base,
+ cursor_handle_activity_from_device(cursor, event->device);
+ dispatch_cursor_button(cursor, event->device,
event->time_msec, event->button, event->state);
}
void dispatch_cursor_axis(struct sway_cursor *cursor,
- struct wlr_pointer_axis_event *event) {
+ struct wlr_event_pointer_axis *event) {
seatop_pointer_axis(cursor->seat, event);
}
static void handle_pointer_axis(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, axis);
- struct wlr_pointer_axis_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_axis *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
dispatch_cursor_axis(cursor, event);
}
@@ -459,8 +458,8 @@ static void handle_pointer_frame(struct wl_listener *listener, void *data) {
static void handle_touch_down(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, touch_down);
- struct wlr_touch_down_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->touch->base);
+ struct wlr_event_touch_down *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
cursor_hide(cursor);
struct sway_seat *seat = cursor->seat;
@@ -468,7 +467,7 @@ static void handle_touch_down(struct wl_listener *listener, void *data) {
struct wlr_surface *surface = NULL;
double lx, ly;
- wlr_cursor_absolute_to_layout_coords(cursor->cursor, &event->touch->base,
+ wlr_cursor_absolute_to_layout_coords(cursor->cursor, event->device,
event->x, event->y, &lx, &ly);
double sx, sy;
struct sway_node *focused_node = node_at_coords(seat, lx, ly, &surface, &sx, &sy);
@@ -496,25 +495,24 @@ static void handle_touch_down(struct wl_listener *listener, void *data) {
double dx, dy;
dx = lx - cursor->cursor->x;
dy = ly - cursor->cursor->y;
- pointer_motion(cursor, event->time_msec, &event->touch->base, dx, dy,
- dx, dy);
- dispatch_cursor_button(cursor, &event->touch->base, event->time_msec,
+ pointer_motion(cursor, event->time_msec, event->device, dx, dy, dx, dy);
+ dispatch_cursor_button(cursor, event->device, event->time_msec,
BTN_LEFT, WLR_BUTTON_PRESSED);
}
}
static void handle_touch_up(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, touch_up);
- struct wlr_touch_up_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->touch->base);
+ struct wlr_event_touch_up *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
struct wlr_seat *wlr_seat = cursor->seat->wlr_seat;
if (cursor->simulating_pointer_from_touch) {
if (cursor->pointer_touch_id == cursor->seat->touch_id) {
cursor->pointer_touch_up = true;
- dispatch_cursor_button(cursor, &event->touch->base,
- event->time_msec, BTN_LEFT, WLR_BUTTON_RELEASED);
+ dispatch_cursor_button(cursor, event->device, event->time_msec,
+ BTN_LEFT, WLR_BUTTON_RELEASED);
}
} else {
wlr_seat_touch_notify_up(wlr_seat, event->time_msec, event->touch_id);
@@ -524,15 +522,15 @@ static void handle_touch_up(struct wl_listener *listener, void *data) {
static void handle_touch_motion(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor =
wl_container_of(listener, cursor, touch_motion);
- struct wlr_touch_motion_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->touch->base);
+ struct wlr_event_touch_motion *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
struct sway_seat *seat = cursor->seat;
struct wlr_seat *wlr_seat = seat->wlr_seat;
struct wlr_surface *surface = NULL;
double lx, ly;
- wlr_cursor_absolute_to_layout_coords(cursor->cursor, &event->touch->base,
+ wlr_cursor_absolute_to_layout_coords(cursor->cursor, event->device,
event->x, event->y, &lx, &ly);
double sx, sy;
node_at_coords(cursor->seat, lx, ly, &surface, &sx, &sy);
@@ -554,8 +552,7 @@ static void handle_touch_motion(struct wl_listener *listener, void *data) {
double dx, dy;
dx = lx - cursor->cursor->x;
dy = ly - cursor->cursor->y;
- pointer_motion(cursor, event->time_msec, &event->touch->base,
- dx, dy, dx, dy);
+ pointer_motion(cursor, event->time_msec, event->device, dx, dy, dx, dy);
}
} else if (surface) {
wlr_seat_touch_notify_motion(wlr_seat, event->time_msec,
@@ -594,15 +591,14 @@ static void apply_mapping_from_region(struct wlr_input_device *device,
double x1 = region->x1, x2 = region->x2;
double y1 = region->y1, y2 = region->y2;
- if (region->mm && device->type == WLR_INPUT_DEVICE_TABLET_TOOL) {
- struct wlr_tablet *tablet = device->tablet;
- if (tablet->width_mm == 0 || tablet->height_mm == 0) {
+ if (region->mm) {
+ if (device->width_mm == 0 || device->height_mm == 0) {
return;
}
- x1 /= tablet->width_mm;
- x2 /= tablet->width_mm;
- y1 /= tablet->height_mm;
- y2 /= tablet->height_mm;
+ x1 /= device->width_mm;
+ x2 /= device->width_mm;
+ y1 /= device->height_mm;
+ y2 /= device->height_mm;
}
*x = apply_mapping_from_coord(x1, x2, *x);
@@ -664,8 +660,8 @@ static void handle_tablet_tool_position(struct sway_cursor *cursor,
static void handle_tool_axis(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, tool_axis);
- struct wlr_tablet_tool_axis_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->tablet->base);
+ struct wlr_event_tablet_tool_axis *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
struct sway_tablet_tool *sway_tool = event->tool->data;
if (!sway_tool) {
@@ -720,8 +716,8 @@ static void handle_tool_axis(struct wl_listener *listener, void *data) {
static void handle_tool_tip(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, tool_tip);
- struct wlr_tablet_tool_tip_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->tablet->base);
+ struct wlr_event_tablet_tool_tip *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
struct sway_tablet_tool *sway_tool = event->tool->data;
struct wlr_tablet_v2_tablet *tablet_v2 = sway_tool->tablet->tablet_v2;
@@ -736,7 +732,7 @@ static void handle_tool_tip(struct wl_listener *listener, void *data) {
if (cursor->simulating_pointer_from_tool_tip &&
event->state == WLR_TABLET_TOOL_TIP_UP) {
cursor->simulating_pointer_from_tool_tip = false;
- dispatch_cursor_button(cursor, &event->tablet->base, event->time_msec,
+ dispatch_cursor_button(cursor, event->device, event->time_msec,
BTN_LEFT, WLR_BUTTON_RELEASED);
wlr_seat_pointer_notify_frame(cursor->seat->wlr_seat);
} else if (!surface || !wlr_surface_accepts_tablet_v2(tablet_v2, surface)) {
@@ -748,8 +744,8 @@ static void handle_tool_tip(struct wl_listener *listener, void *data) {
WLR_TABLET_TOOL_TIP_UP);
} else {
cursor->simulating_pointer_from_tool_tip = true;
- dispatch_cursor_button(cursor, &event->tablet->base,
- event->time_msec, BTN_LEFT, WLR_BUTTON_PRESSED);
+ dispatch_cursor_button(cursor, event->device, event->time_msec,
+ BTN_LEFT, WLR_BUTTON_PRESSED);
wlr_seat_pointer_notify_frame(cursor->seat->wlr_seat);
}
} else {
@@ -771,13 +767,12 @@ static struct sway_tablet *get_tablet_for_device(struct sway_cursor *cursor,
static void handle_tool_proximity(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor =
wl_container_of(listener, cursor, tool_proximity);
- struct wlr_tablet_tool_proximity_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->tablet->base);
+ struct wlr_event_tablet_tool_proximity *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
struct wlr_tablet_tool *tool = event->tool;
if (!tool->data) {
- struct sway_tablet *tablet = get_tablet_for_device(cursor,
- &event->tablet->base);
+ struct sway_tablet *tablet = get_tablet_for_device(cursor, event->device);
if (!tablet) {
sway_log(SWAY_ERROR, "no tablet for tablet tool");
return;
@@ -802,8 +797,8 @@ static void handle_tool_proximity(struct wl_listener *listener, void *data) {
static void handle_tool_button(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(listener, cursor, tool_button);
- struct wlr_tablet_tool_button_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->tablet->base);
+ struct wlr_event_tablet_tool_button *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
struct sway_tablet_tool *sway_tool = event->tool->data;
if (!sway_tool) {
@@ -824,14 +819,14 @@ static void handle_tool_button(struct wl_listener *listener, void *data) {
switch (event->state) {
case WLR_BUTTON_PRESSED:
if (cursor->tool_buttons == 0) {
- dispatch_cursor_button(cursor, &event->tablet->base,
+ dispatch_cursor_button(cursor, event->device,
event->time_msec, BTN_RIGHT, event->state);
}
cursor->tool_buttons++;
break;
case WLR_BUTTON_RELEASED:
if (cursor->tool_buttons == 1) {
- dispatch_cursor_button(cursor, &event->tablet->base,
+ dispatch_cursor_button(cursor, event->device,
event->time_msec, BTN_RIGHT, event->state);
}
cursor->tool_buttons--;
@@ -931,8 +926,8 @@ static void handle_request_pointer_set_cursor(struct wl_listener *listener,
static void handle_pointer_pinch_begin(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(
listener, cursor, pinch_begin);
- struct wlr_pointer_pinch_begin_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_pinch_begin *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
wlr_pointer_gestures_v1_send_pinch_begin(
cursor->pointer_gestures, cursor->seat->wlr_seat,
event->time_msec, event->fingers);
@@ -941,8 +936,8 @@ static void handle_pointer_pinch_begin(struct wl_listener *listener, void *data)
static void handle_pointer_pinch_update(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(
listener, cursor, pinch_update);
- struct wlr_pointer_pinch_update_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_pinch_update *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
wlr_pointer_gestures_v1_send_pinch_update(
cursor->pointer_gestures, cursor->seat->wlr_seat,
event->time_msec, event->dx, event->dy,
@@ -952,8 +947,8 @@ static void handle_pointer_pinch_update(struct wl_listener *listener, void *data
static void handle_pointer_pinch_end(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(
listener, cursor, pinch_end);
- struct wlr_pointer_pinch_end_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_pinch_end *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
wlr_pointer_gestures_v1_send_pinch_end(
cursor->pointer_gestures, cursor->seat->wlr_seat,
event->time_msec, event->cancelled);
@@ -962,8 +957,8 @@ static void handle_pointer_pinch_end(struct wl_listener *listener, void *data) {
static void handle_pointer_swipe_begin(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(
listener, cursor, swipe_begin);
- struct wlr_pointer_swipe_begin_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_swipe_begin *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
wlr_pointer_gestures_v1_send_swipe_begin(
cursor->pointer_gestures, cursor->seat->wlr_seat,
event->time_msec, event->fingers);
@@ -972,8 +967,8 @@ static void handle_pointer_swipe_begin(struct wl_listener *listener, void *data)
static void handle_pointer_swipe_update(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(
listener, cursor, swipe_update);
- struct wlr_pointer_swipe_update_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_swipe_update *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
wlr_pointer_gestures_v1_send_swipe_update(
cursor->pointer_gestures, cursor->seat->wlr_seat,
event->time_msec, event->dx, event->dy);
@@ -982,33 +977,13 @@ static void handle_pointer_swipe_update(struct wl_listener *listener, void *data
static void handle_pointer_swipe_end(struct wl_listener *listener, void *data) {
struct sway_cursor *cursor = wl_container_of(
listener, cursor, swipe_end);
- struct wlr_pointer_swipe_end_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
+ struct wlr_event_pointer_swipe_end *event = data;
+ cursor_handle_activity_from_device(cursor, event->device);
wlr_pointer_gestures_v1_send_swipe_end(
cursor->pointer_gestures, cursor->seat->wlr_seat,
event->time_msec, event->cancelled);
}
-static void handle_pointer_hold_begin(struct wl_listener *listener, void *data) {
- struct sway_cursor *cursor = wl_container_of(
- listener, cursor, hold_begin);
- struct wlr_pointer_hold_begin_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
- wlr_pointer_gestures_v1_send_hold_begin(
- cursor->pointer_gestures, cursor->seat->wlr_seat,
- event->time_msec, event->fingers);
-}
-
-static void handle_pointer_hold_end(struct wl_listener *listener, void *data) {
- struct sway_cursor *cursor = wl_container_of(
- listener, cursor, hold_end);
- struct wlr_pointer_hold_end_event *event = data;
- cursor_handle_activity_from_device(cursor, &event->pointer->base);
- wlr_pointer_gestures_v1_send_hold_end(
- cursor->pointer_gestures, cursor->seat->wlr_seat,
- event->time_msec, event->cancelled);
-}
-
static void handle_image_surface_destroy(struct wl_listener *listener,
void *data) {
struct sway_cursor *cursor =
@@ -1086,8 +1061,6 @@ void sway_cursor_destroy(struct sway_cursor *cursor) {
wl_list_remove(&cursor->swipe_begin.link);
wl_list_remove(&cursor->swipe_update.link);
wl_list_remove(&cursor->swipe_end.link);
- wl_list_remove(&cursor->hold_begin.link);
- wl_list_remove(&cursor->hold_end.link);
wl_list_remove(&cursor->motion.link);
wl_list_remove(&cursor->motion_absolute.link);
wl_list_remove(&cursor->button.link);
@@ -1144,10 +1117,6 @@ struct sway_cursor *sway_cursor_create(struct sway_seat *seat) {
wl_signal_add(&wlr_cursor->events.swipe_update, &cursor->swipe_update);
cursor->swipe_end.notify = handle_pointer_swipe_end;
wl_signal_add(&wlr_cursor->events.swipe_end, &cursor->swipe_end);
- cursor->hold_begin.notify = handle_pointer_hold_begin;
- wl_signal_add(&wlr_cursor->events.hold_begin, &cursor->hold_begin);
- cursor->hold_end.notify = handle_pointer_hold_end;
- wl_signal_add(&wlr_cursor->events.hold_end, &cursor->hold_end);
// input events
wl_signal_add(&wlr_cursor->events.motion, &cursor->motion);