From 01d11e84854237277ad9e75b746945b90aef0b77 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Wed, 29 Oct 2025 19:56:33 +0900 Subject: [PATCH] events with user data to also trigger internal listeners + toast fix --- wgui/src/event.rs | 16 +++--- wlx-overlay-s/src/assets/gui/watch.xml | 6 +-- wlx-overlay-s/src/backend/openxr/mod.rs | 4 ++ wlx-overlay-s/src/gui/panel/mod.rs | 67 ++++++++++--------------- wlx-overlay-s/src/overlays/mod.rs | 1 + wlx-overlay-s/src/overlays/toast.rs | 5 +- wlx-overlay-s/src/windowing/window.rs | 6 +-- 7 files changed, 51 insertions(+), 54 deletions(-) diff --git a/wgui/src/event.rs b/wgui/src/event.rs index 1a3112d..2dab9e3 100644 --- a/wgui/src/event.rs +++ b/wgui/src/event.rs @@ -219,8 +219,8 @@ new_key_type! { pub struct EventListener { kind: EventListenerKind, callback: EventCallbackInternal, - tid1: TypeId, - tid2: TypeId, + tid1: Option, + tid2: Option, } impl EventListener { @@ -230,7 +230,9 @@ impl EventListener { data: &mut CallbackData, user_data: &mut (&mut U1, &mut U2), ) -> anyhow::Result { - (self.callback)(common, data, user_data.0, user_data.1) + let a1: &mut (dyn Any + 'static) = if self.tid1.is_none() { &mut () } else { user_data.0 }; + let a2: &mut (dyn Any + 'static) = if self.tid2.is_none() { &mut () } else { user_data.1 }; + (self.callback)(common, data, a1, a2) } } @@ -250,7 +252,7 @@ impl EventListenerCollection { self .inner .values() - .filter(move |p| p.tid1 == tid1 && p.tid2 == tid2 && p.kind == kind) + .filter(move |p| p.tid1.is_none_or(|a| a == tid1) && p.tid2.is_none_or(|a| a == tid2) && p.kind == kind) } pub fn register( @@ -258,6 +260,8 @@ impl EventListenerCollection { kind: EventListenerKind, callback: EventCallback, ) -> EventListenerID { + let tid_unit = TypeId::of::<()>(); + let tid1 = TypeId::of::(); let tid2 = TypeId::of::(); @@ -274,8 +278,8 @@ impl EventListenerCollection { let new_item = EventListener { kind, callback: callback_inner, - tid1, - tid2, + tid1: (tid1 != tid_unit).then_some(tid1), + tid2: (tid2 != tid_unit).then_some(tid2), }; self.inner.insert(new_item) diff --git a/wlx-overlay-s/src/assets/gui/watch.xml b/wlx-overlay-s/src/assets/gui/watch.xml index c07fa4f..d717bc2 100644 --- a/wlx-overlay-s/src/assets/gui/watch.xml +++ b/wlx-overlay-s/src/assets/gui/watch.xml @@ -26,7 +26,7 @@