@ -574,7 +574,7 @@ static void handle_tablet_tool_position(struct sway_cursor *cursor,
// The logic for whether we should send a tablet event or an emulated pointer
// The logic for whether we should send a tablet event or an emulated pointer
// event is tricky. It comes down to:
// event is tricky. It comes down to:
// * If we began a drag on a non-tablet surface (simulat ed_tool_tip_down ),
// * If we began a drag on a non-tablet surface (simulat ing_pointer_from_tool_tip ),
// then we should continue sending emulated pointer events regardless of
// then we should continue sending emulated pointer events regardless of
// whether the surface currently under us accepts tablet or not.
// whether the surface currently under us accepts tablet or not.
// * Otherwise, if we are over a surface that accepts tablet, then we should
// * Otherwise, if we are over a surface that accepts tablet, then we should
@ -582,7 +582,7 @@ static void handle_tablet_tool_position(struct sway_cursor *cursor,
// * If we began a drag over a tablet surface, we should continue sending
// * If we began a drag over a tablet surface, we should continue sending
// tablet events until the drag is released, even if we are now over a
// tablet events until the drag is released, even if we are now over a
// non-tablet surface.
// non-tablet surface.
if ( ! cursor - > simulat ed_tool_tip_down & &
if ( ! cursor - > simulat ing_pointer_from_tool_tip & &
( ( surface & & wlr_surface_accepts_tablet_v2 ( tablet - > tablet_v2 , surface ) ) | |
( ( surface & & wlr_surface_accepts_tablet_v2 ( tablet - > tablet_v2 , surface ) ) | |
wlr_tablet_tool_v2_has_implicit_grab ( tool - > tablet_v2_tool ) ) ) {
wlr_tablet_tool_v2_has_implicit_grab ( tool - > tablet_v2_tool ) ) ) {
seatop_tablet_tool_motion ( seat , tool , time_msec , dx , dy ) ;
seatop_tablet_tool_motion ( seat , tool , time_msec , dx , dy ) ;
@ -671,9 +671,9 @@ static void handle_tool_tip(struct wl_listener *listener, void *data) {
wlr_tablet_v2_tablet_tool_notify_up ( sway_tool - > tablet_v2_tool ) ;
wlr_tablet_v2_tablet_tool_notify_up ( sway_tool - > tablet_v2_tool ) ;
}
}
cursor - > simulat ed_tool_tip_down = event - > state = = WLR_TABLET_TOOL_TIP_DOWN ;
cursor - > simulat ing_pointer_from_tool_tip = event - > state = = WLR_TABLET_TOOL_TIP_DOWN ;
dispatch_cursor_button ( cursor , event - > device , event - > time_msec ,
dispatch_cursor_button ( cursor , event - > device , event - > time_msec ,
BTN_LEFT , cursor - > simulat ed_tool_tip_down ?
BTN_LEFT , cursor - > simulat ing_pointer_from_tool_tip ?
WLR_BUTTON_PRESSED : WLR_BUTTON_RELEASED ) ;
WLR_BUTTON_PRESSED : WLR_BUTTON_RELEASED ) ;
wlr_seat_pointer_notify_frame ( cursor - > seat - > wlr_seat ) ;
wlr_seat_pointer_notify_frame ( cursor - > seat - > wlr_seat ) ;
transaction_commit_dirty ( ) ;
transaction_commit_dirty ( ) ;
@ -684,10 +684,10 @@ static void handle_tool_tip(struct wl_listener *listener, void *data) {
wlr_tablet_v2_tablet_tool_notify_down ( sway_tool - > tablet_v2_tool ) ;
wlr_tablet_v2_tablet_tool_notify_down ( sway_tool - > tablet_v2_tool ) ;
wlr_tablet_tool_v2_start_implicit_grab ( sway_tool - > tablet_v2_tool ) ;
wlr_tablet_tool_v2_start_implicit_grab ( sway_tool - > tablet_v2_tool ) ;
} else {
} else {
if ( cursor - > simulat ed_tool_tip_down ) {
if ( cursor - > simulat ing_pointer_from_tool_tip ) {
dispatch_cursor_button ( cursor , event - > device , event - > time_msec , BTN_LEFT ,
dispatch_cursor_button ( cursor , event - > device , event - > time_msec , BTN_LEFT ,
WLR_BUTTON_RELEASED ) ;
WLR_BUTTON_RELEASED ) ;
cursor - > simulat ed_tool_tip_down = false ;
cursor - > simulat ing_pointer_from_tool_tip = false ;
}
}
wlr_tablet_v2_tablet_tool_notify_up ( sway_tool - > tablet_v2_tool ) ;
wlr_tablet_v2_tablet_tool_notify_up ( sway_tool - > tablet_v2_tool ) ;