diff options
Diffstat (limited to 'sway/input/cursor.c')
-rw-r--r-- | sway/input/cursor.c | 45 |
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 | ||
699 | static struct sway_tablet *get_tablet_for_device(struct sway_cursor *cursor, | 692 | static struct sway_tablet *get_tablet_for_device(struct sway_cursor *cursor, |