From 07a897b3b797b99022a9dfffffc0af2ff50aea85 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 18 Aug 2018 09:29:18 +1000 Subject: [PATCH] Don't send motion if the cursor hasn't moved Prevents GTK+ comboboxes from immediately closing. --- include/sway/input/seat.h | 1 + sway/input/cursor.c | 1 + sway/input/seat.c | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h index c07db61c..5c404ecd 100644 --- a/include/sway/input/seat.h +++ b/include/sway/input/seat.h @@ -70,6 +70,7 @@ struct sway_seat { double op_ref_lx, op_ref_ly; // cursor's x/y at start of op double op_ref_width, op_ref_height; // container's size at start of op double op_ref_con_lx, op_ref_con_ly; // container's x/y at start of op + bool op_moved; // if the mouse moved during a down op uint32_t last_button; uint32_t last_button_serial; diff --git a/sway/input/cursor.c b/sway/input/cursor.c index 5a2743e3..37fb203d 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -225,6 +225,7 @@ static void handle_down_motion(struct sway_seat *seat, double sy = seat->op_ref_con_ly + moved_y; wlr_seat_pointer_notify_motion(seat->wlr_seat, time_msec, sx, sy); } + seat->op_moved = true; } static void handle_move_motion(struct sway_seat *seat, diff --git a/sway/input/seat.c b/sway/input/seat.c index cc7c28d8..9d46e760 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -963,6 +963,7 @@ void seat_begin_down(struct sway_seat *seat, struct sway_container *con, seat->op_ref_ly = seat->cursor->cursor->y; seat->op_ref_con_lx = sx; seat->op_ref_con_ly = sy; + seat->op_moved = false; } void seat_begin_move(struct sway_seat *seat, struct sway_container *con, @@ -1034,7 +1035,9 @@ void seat_end_mouse_operation(struct sway_seat *seat) { // during the operation. seat->cursor->previous.x = seat->op_ref_lx; seat->cursor->previous.y = seat->op_ref_ly; - cursor_send_pointer_motion(seat->cursor, 0, true); + if (seat->op_moved) { + cursor_send_pointer_motion(seat->cursor, 0, true); + } } else { cursor_set_image(seat->cursor, "left_ptr", NULL); }