aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sway/input/cursor.h1
-rw-r--r--sway/input/cursor.c7
2 files changed, 7 insertions, 1 deletions
diff --git a/include/sway/input/cursor.h b/include/sway/input/cursor.h
index b053b85f..7d66e699 100644
--- a/include/sway/input/cursor.h
+++ b/include/sway/input/cursor.h
@@ -54,6 +54,7 @@ struct sway_cursor {
struct wl_listener touch_motion;
struct wl_listener touch_frame;
bool simulating_pointer_from_touch;
+ bool pointer_touch_up;
int32_t pointer_touch_id;
struct wl_listener tool_axis;
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 96b5b935..2fe5b202 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -507,7 +507,7 @@ static void handle_touch_up(struct wl_listener *listener, void *data) {
if (cursor->simulating_pointer_from_touch) {
if (cursor->pointer_touch_id == cursor->seat->touch_id) {
- cursor->simulating_pointer_from_touch = false;
+ cursor->pointer_touch_up = true;
dispatch_cursor_button(cursor, event->device, event->time_msec,
BTN_LEFT, WLR_BUTTON_RELEASED);
}
@@ -565,6 +565,11 @@ static void handle_touch_frame(struct wl_listener *listener, void *data) {
if (cursor->simulating_pointer_from_touch) {
wlr_seat_pointer_notify_frame(wlr_seat);
+
+ if (cursor->pointer_touch_up) {
+ cursor->pointer_touch_up = false;
+ cursor->simulating_pointer_from_touch = false;
+ }
} else {
wlr_seat_touch_notify_frame(wlr_seat);
}