aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/cursor.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/input/cursor.c')
-rw-r--r--sway/input/cursor.c45
1 files changed, 19 insertions, 26 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 85d0e825..1a211c3b 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -663,37 +663,30 @@ static void handle_tool_tip(struct wl_listener *listener, void *data) {
663 node_at_coords(seat, cursor->cursor->x, cursor->cursor->y, 663 node_at_coords(seat, cursor->cursor->x, cursor->cursor->y,
664 &surface, &sx, &sy); 664 &surface, &sx, &sy);
665 665
666 if (!surface || !wlr_surface_accepts_tablet_v2(tablet_v2, surface)) { 666 if (cursor->simulating_pointer_from_tool_tip &&
667 // If we started holding the tool tip down on a surface that accepts tablet 667 event->state == WLR_TABLET_TOOL_TIP_UP) {
668 // v2, we should notify that surface if it gets released over a surface that 668 cursor->simulating_pointer_from_tool_tip = false;
669 // doesn't support v2.
670 if (event->state == WLR_TABLET_TOOL_TIP_UP) {
671 wlr_tablet_v2_tablet_tool_notify_up(sway_tool->tablet_v2_tool);
672 }
673
674 cursor->simulating_pointer_from_tool_tip = event->state == WLR_TABLET_TOOL_TIP_DOWN;
675 dispatch_cursor_button(cursor, event->device, event->time_msec, 669 dispatch_cursor_button(cursor, event->device, event->time_msec,
676 BTN_LEFT, cursor->simulating_pointer_from_tool_tip ? 670 BTN_LEFT, WLR_BUTTON_RELEASED);
677 WLR_BUTTON_PRESSED : WLR_BUTTON_RELEASED);
678 wlr_seat_pointer_notify_frame(cursor->seat->wlr_seat); 671 wlr_seat_pointer_notify_frame(cursor->seat->wlr_seat);
679 transaction_commit_dirty(); 672 transaction_commit_dirty();
680 return; 673 } else if (!surface || !wlr_surface_accepts_tablet_v2(tablet_v2, surface)) {
681 } 674 // If we started holding the tool tip down on a surface that accepts
682 675 // tablet v2, we should notify that surface if it gets released over a
683 if (event->state == WLR_TABLET_TOOL_TIP_DOWN) { 676 // surface that doesn't support v2.
684 wlr_tablet_v2_tablet_tool_notify_down(sway_tool->tablet_v2_tool); 677 if (event->state == WLR_TABLET_TOOL_TIP_UP) {
685 wlr_tablet_tool_v2_start_implicit_grab(sway_tool->tablet_v2_tool); 678 seatop_tablet_tool_tip(seat, sway_tool, event->time_msec,
686 } else { 679 WLR_TABLET_TOOL_TIP_UP);
687 if (cursor->simulating_pointer_from_tool_tip) { 680 } else {
688 dispatch_cursor_button(cursor, event->device, event->time_msec, BTN_LEFT, 681 cursor->simulating_pointer_from_tool_tip = true;
689 WLR_BUTTON_RELEASED); 682 dispatch_cursor_button(cursor, event->device, event->time_msec,
690 cursor->simulating_pointer_from_tool_tip = false; 683 BTN_LEFT, WLR_BUTTON_PRESSED);
684 wlr_seat_pointer_notify_frame(cursor->seat->wlr_seat);
685 transaction_commit_dirty();
691 } 686 }
692 687 } else {
693 wlr_tablet_v2_tablet_tool_notify_up(sway_tool->tablet_v2_tool); 688 seatop_tablet_tool_tip(seat, sway_tool, event->time_msec, event->state);
694 } 689 }
695
696 seatop_tablet_tool_tip(seat, sway_tool, event->time_msec, event->state);
697} 690}
698 691
699static struct sway_tablet *get_tablet_for_device(struct sway_cursor *cursor, 692static struct sway_tablet *get_tablet_for_device(struct sway_cursor *cursor,