element/stack: Use correct serial for tablet grabs

This commit is contained in:
Victoria Brekenfeld 2026-08-19 18:08:21 +02:00 • committed by Victoria Brekenfeld
parent 1c8a0070c0
commit bd0b834128

View file

@ -121,6 +121,7 @@ pub struct CosmicStackInternal {
previous_keyboard: AtomicUsize, previous_keyboard: AtomicUsize,
pointer_entered: AtomicU8, pointer_entered: AtomicU8,
touch_serial: AtomicU32, touch_serial: AtomicU32,
tablet_serial: AtomicU32,
reenter: AtomicBool, reenter: AtomicBool,
potential_drag: Mutex<Option<usize>>, potential_drag: Mutex<Option<usize>>,
override_alive: AtomicBool, override_alive: AtomicBool,
@ -180,6 +181,7 @@ impl CosmicStack {
previous_keyboard: AtomicUsize::new(0), previous_keyboard: AtomicUsize::new(0),
pointer_entered: AtomicU8::new(0), pointer_entered: AtomicU8::new(0),
touch_serial: AtomicU32::new(0), touch_serial: AtomicU32::new(0),
tablet_serial: AtomicU32::new(0),
reenter: AtomicBool::new(false), reenter: AtomicBool::new(false),
potential_drag: Mutex::new(None), potential_drag: Mutex::new(None),
override_alive: AtomicBool::new(true), override_alive: AtomicBool::new(true),
@ -1958,12 +1960,19 @@ impl TabletToolTarget<State> for CosmicStack {
tool_descriptor: &TabletToolDescriptor, tool_descriptor: &TabletToolDescriptor,
event: &ToolDownEvent, 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()) { match self.0.with_program(|p| p.current_focus()) {
Some(Focus::Header) => { Some(Focus::Header) => {
TabletToolTarget::down(&self.0, seat, data, tool_descriptor, event) TabletToolTarget::down(&self.0, seat, data, tool_descriptor, event)
} }
Some(x) => { 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 seat = seat.clone();
let Some(surface) = self.0.with_program(|p| { let Some(surface) = self.0.with_program(|p| {
let window = &p.windows.lock().unwrap()[p.active.load(Ordering::SeqCst)]; let window = &p.windows.lock().unwrap()[p.active.load(Ordering::SeqCst)];
@ -2051,7 +2060,13 @@ impl TabletToolTarget<State> for CosmicStack {
|| event.location.x < 64.0 || event.location.x < 64.0
|| event.location.x > (active_window_geo.size.w as f64 - 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(),
);
} }
} }