From bd0b83412890ec4e126e01c92cfbc87e6e2e78cd Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Wed, 19 Aug 2026 18:08:21 +0200 Subject: [PATCH] element/stack: Use correct serial for tablet grabs --- src/shell/element/stack.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/shell/element/stack.rs b/src/shell/element/stack.rs index 5ab022d9..a97f5778 100644 --- a/src/shell/element/stack.rs +++ b/src/shell/element/stack.rs @@ -121,6 +121,7 @@ pub struct CosmicStackInternal { previous_keyboard: AtomicUsize, pointer_entered: AtomicU8, touch_serial: AtomicU32, + tablet_serial: AtomicU32, reenter: AtomicBool, potential_drag: Mutex>, override_alive: AtomicBool, @@ -180,6 +181,7 @@ impl CosmicStack { previous_keyboard: AtomicUsize::new(0), pointer_entered: AtomicU8::new(0), touch_serial: AtomicU32::new(0), + tablet_serial: AtomicU32::new(0), reenter: AtomicBool::new(false), potential_drag: Mutex::new(None), override_alive: AtomicBool::new(true), @@ -1958,12 +1960,19 @@ impl TabletToolTarget for CosmicStack { tool_descriptor: &TabletToolDescriptor, event: &ToolDownEvent, ) { + self.0.with_program(|p| { + p.tablet_serial + .store(event.serial.into(), Ordering::Release) + }); match self.0.with_program(|p| p.current_focus()) { Some(Focus::Header) => { TabletToolTarget::down(&self.0, seat, data, tool_descriptor, event) } Some(x) => { - let serial = event.serial; + let serial = self + .0 + .with_program(|p| p.tablet_serial.load(Ordering::Acquire)) + .into(); let seat = seat.clone(); let Some(surface) = self.0.with_program(|p| { let window = &p.windows.lock().unwrap()[p.active.load(Ordering::SeqCst)]; @@ -2051,7 +2060,13 @@ impl TabletToolTarget for CosmicStack { || event.location.x < 64.0 || event.location.x > (active_window_geo.size.w as f64 - 64.0) { - self.start_drag(data, seat, event.serial); + self.start_drag( + data, + seat, + self.0 + .with_program(|p| p.tablet_serial.load(Ordering::Acquire)) + .into(), + ); } }