diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h index eb674b705..ff4476d19 100644 --- a/include/sway/input/seat.h +++ b/include/sway/input/seat.h @@ -9,13 +9,15 @@ struct sway_seat; struct sway_seatop_impl { + void (*button)(struct sway_seat *seat, uint32_t time_msec, + struct wlr_input_device *device, uint32_t button, + enum wlr_button_state state); void (*motion)(struct sway_seat *seat, uint32_t time_msec); void (*finish)(struct sway_seat *seat, uint32_t time_msec); void (*abort)(struct sway_seat *seat); void (*unref)(struct sway_seat *seat, struct sway_container *con); void (*render)(struct sway_seat *seat, struct sway_output *output, pixman_region32_t *damage); - bool allows_events; }; struct sway_seat_device { @@ -214,6 +216,10 @@ void seat_consider_warp_to_focus(struct sway_seat *seat); bool seat_doing_seatop(struct sway_seat *seat); +void seatop_button(struct sway_seat *seat, uint32_t time_msec, + struct wlr_input_device *device, uint32_t button, + enum wlr_button_state state); + void seatop_motion(struct sway_seat *seat, uint32_t time_msec); /** @@ -240,6 +246,4 @@ void seatop_unref(struct sway_seat *seat, struct sway_container *con); void seatop_render(struct sway_seat *seat, struct sway_output *output, pixman_region32_t *damage); -bool seatop_allows_events(struct sway_seat *seat); - #endif diff --git a/sway/input/cursor.c b/sway/input/cursor.c index d531a20e3..011b4929a 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -610,9 +610,7 @@ void dispatch_cursor_button(struct sway_cursor *cursor, } else { state_erase_button(cursor, button); } - if (seatop_allows_events(seat)) { - seat_pointer_notify_button(seat, time_msec, button, state); - } + seatop_button(seat, time_msec, device, button, state); if (button == seat->seatop_button && state == WLR_BUTTON_RELEASED) { seatop_finish(seat, time_msec); } diff --git a/sway/input/seat.c b/sway/input/seat.c index e56a65105..2c9a85c49 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -1216,6 +1216,14 @@ void seatop_unref(struct sway_seat *seat, struct sway_container *con) { } } +void seatop_button(struct sway_seat *seat, uint32_t time_msec, + struct wlr_input_device *device, uint32_t button, + enum wlr_button_state state) { + if (seat->seatop_impl && seat->seatop_impl->button) { + seat->seatop_impl->button(seat, time_msec, device, button, state); + } +} + void seatop_motion(struct sway_seat *seat, uint32_t time_msec) { if (seat->seatop_impl && seat->seatop_impl->motion) { seat->seatop_impl->motion(seat, time_msec); @@ -1246,7 +1254,3 @@ void seatop_render(struct sway_seat *seat, struct sway_output *output, seat->seatop_impl->render(seat, output, damage); } } - -bool seatop_allows_events(struct sway_seat *seat) { - return seat->seatop_impl && seat->seatop_impl->allows_events; -} diff --git a/sway/input/seatop_down.c b/sway/input/seatop_down.c index 895571b10..fb2cf1d07 100644 --- a/sway/input/seatop_down.c +++ b/sway/input/seatop_down.c @@ -11,6 +11,12 @@ struct seatop_down_event { bool moved; }; +static void handle_button(struct sway_seat *seat, uint32_t time_msec, + struct wlr_input_device *device, uint32_t button, + enum wlr_button_state state) { + seat_pointer_notify_button(seat, time_msec, button, state); +} + static void handle_motion(struct sway_seat *seat, uint32_t time_msec) { struct seatop_down_event *e = seat->seatop_data; struct sway_container *con = e->con; @@ -54,11 +60,11 @@ static void handle_unref(struct sway_seat *seat, struct sway_container *con) { } static const struct sway_seatop_impl seatop_impl = { + .button = handle_button, .motion = handle_motion, .finish = handle_finish, .abort = handle_abort, .unref = handle_unref, - .allows_events = true, }; void seatop_begin_down(struct sway_seat *seat, struct sway_container *con,