From dc6d03605f9d84ccb65ed20735ba51a6673c58c8 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Fri, 26 Dec 2025 13:19:57 +0900 Subject: [PATCH] wayvr overlay removal --- wlx-overlay-s/src/backend/wayvr/mod.rs | 10 ++++++++-- wlx-overlay-s/src/overlays/wayvr.rs | 6 +++++- wlx-overlay-s/src/windowing/backend.rs | 2 ++ wlx-overlay-s/src/windowing/manager.rs | 6 ++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/wlx-overlay-s/src/backend/wayvr/mod.rs b/wlx-overlay-s/src/backend/wayvr/mod.rs index abd0c07..b467476 100644 --- a/wlx-overlay-s/src/backend/wayvr/mod.rs +++ b/wlx-overlay-s/src/backend/wayvr/mod.rs @@ -353,10 +353,11 @@ impl WayVR { continue; }; - if let Some(oid) = self.state.window_to_overlay.get(&window_handle) { + if let Some(oid) = self.state.window_to_overlay.remove(&window_handle) { app.tasks.enqueue(TaskType::Overlay(OverlayTask::Drop( - OverlaySelector::Id(*oid), + OverlaySelector::Id(oid), ))); + self.state.overlay_to_window.remove(oid); } self.state.wm.remove_window(window_handle); @@ -389,6 +390,11 @@ impl WayVR { .tasks .send(WayVRTask::ProcessTerminationRequest(process_handle)); } + + pub fn overlay_added(&mut self, oid: OverlayID, window: window::WindowHandle) { + self.state.overlay_to_window.insert(oid, window); + self.state.window_to_overlay.insert(window, oid); + } } impl WayVRState { diff --git a/wlx-overlay-s/src/overlays/wayvr.rs b/wlx-overlay-s/src/overlays/wayvr.rs index a49dbb7..5393916 100644 --- a/wlx-overlay-s/src/overlays/wayvr.rs +++ b/wlx-overlay-s/src/overlays/wayvr.rs @@ -226,8 +226,12 @@ impl OverlayBackend for WayVRBackend { fn notify( &mut self, _app: &mut state::AppState, - _event_data: OverlayEventData, + event_data: OverlayEventData, ) -> anyhow::Result<()> { + if let OverlayEventData::IdAssigned(oid) = event_data { + let wayvr = &mut self.wayvr.borrow_mut().data; + wayvr.overlay_added(oid, self.window.clone()); + } Ok(()) } diff --git a/wlx-overlay-s/src/windowing/backend.rs b/wlx-overlay-s/src/windowing/backend.rs index 14771d0..40365c2 100644 --- a/wlx-overlay-s/src/windowing/backend.rs +++ b/wlx-overlay-s/src/windowing/backend.rs @@ -115,6 +115,8 @@ pub struct OverlayMeta { #[allow(clippy::enum_variant_names)] pub enum OverlayEventData { + /// Notifies a newly added overlay of its ID, even before the overlay is shown. + IdAssigned(OverlayID), ActiveSetChanged(Option), NumSetsChanged(usize), EditModeChanged(bool), diff --git a/wlx-overlay-s/src/windowing/manager.rs b/wlx-overlay-s/src/windowing/manager.rs index 8f9c861..df48f53 100644 --- a/wlx-overlay-s/src/windowing/manager.rs +++ b/wlx-overlay-s/src/windowing/manager.rs @@ -636,6 +636,12 @@ impl OverlayWindowManager { } } + self.overlays[oid] + .config + .backend + .notify(app, OverlayEventData::IdAssigned(oid)) + .unwrap(); // IdAssigned not expected to fail + if !shown && show_on_spawn { log::debug!("activating {name} due to show_on_spawn"); self.overlays[oid].config.activate(app);