shell: Handle Tablet grabs

This commit is contained in:
Victoria Brekenfeld 2026-08-18 19:24:27 +02:00 • committed by Victoria Brekenfeld
parent bb95a57f5a
commit 6bf75e1c10

View file

@ -49,7 +49,7 @@ use smithay::{
pointer::{ pointer::{
CursorImageStatus, CursorImageSurfaceData, Focus, GrabStartData as PointerGrabStartData, CursorImageStatus, CursorImageSurfaceData, Focus, GrabStartData as PointerGrabStartData,
}, },
tablet::tool::GrabTrigger as TabletGrabTrigger, tablet::{TabletSeatTrait, tool::GrabTrigger as TabletGrabTrigger},
}, },
output::{Output, WeakOutput}, output::{Output, WeakOutput},
reexports::{ reexports::{
@ -5164,10 +5164,19 @@ pub fn check_grab_preconditions(
let pointer = seat.get_pointer().unwrap(); let pointer = seat.get_pointer().unwrap();
let touch = seat.get_touch().unwrap(); let touch = seat.get_touch().unwrap();
let tablet = seat.tablet_seat();
let tools = tablet.get_tools();
let start_data = let start_data =
if serial.is_some_and(|serial| touch.has_grab(serial)) { if serial.is_some_and(|serial| touch.has_grab(serial)) {
GrabStartData::Touch(touch.grab_start_data().unwrap()) GrabStartData::Touch(touch.grab_start_data().unwrap())
} else if let Some((desc, tool)) =
serial.and_then(|serial| tools.iter().find(|(_, tool)| tool.has_grab(serial)))
{
GrabStartData::TabletTool {
tool: desc.clone(),
data: tool.grab_start_data().unwrap(),
}
} else { } else {
GrabStartData::Pointer(pointer.grab_start_data().unwrap_or_else(|| { GrabStartData::Pointer(pointer.grab_start_data().unwrap_or_else(|| {
PointerGrabStartData { PointerGrabStartData {