From 7af39ce41986feee45a91acbe4d417482c9b6458 Mon Sep 17 00:00:00 2001 From: En-En <39373446+En-En-Code@users.noreply.github.com> Date: Tue, 20 Jan 2026 18:49:04 +0000 Subject: [PATCH] fix: test `TabletServer` initialization on `Enter` Previously, a `zwp_tablet_pad_v2` `Enter` event would attempt to initialize the clientside tablet. Since initializing the clientside tablet is the job of `zwp_tablet_seat_v2` `TabletAdded` event, it would be already initialized, which triggers an `expect` in `LateInitObjectKey::init`. To remedy this, the `Enter` event instead checks for an initialized tablet before entering, and early returns otherwise. --- src/server/event.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/server/event.rs b/src/server/event.rs index e856c0e..2e2afc1 100644 --- a/src/server/event.rs +++ b/src/server/event.rs @@ -1514,7 +1514,6 @@ impl Event for zwp_tablet_pad_v2::Event { tablet, surface, } => { - let (e_tab, s_tablet) = from_client::(&tablet, state); let Some(surface) = surface .data() .copied() @@ -1522,10 +1521,16 @@ impl Event for zwp_tablet_pad_v2::Event { else { return; }; + let Some(s_tablet) = + tablet + .data() + .and_then(|key: &LateInitObjectKey| { + state.world.get::<&TabletServer>(key.get()).ok() + }) + else { + return; + }; pad.enter(serial, &s_tablet, &surface); - drop(pad); - drop(surface); - state.world.spawn_at(e_tab, (tablet, s_tablet)); } _ => simple_event_shunt! { pad, self => [