From 17addcde78e1f7ac9e063fc10f186567e5c6a0d4 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Tue, 23 Jul 2024 19:09:04 +0900 Subject: [PATCH] fix --show behavior --- src/backend/common.rs | 3 +-- src/backend/openvr/mod.rs | 13 ++++++++++++- src/backend/openxr/mod.rs | 15 +++++++++++++-- src/backend/task.rs | 1 + 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/backend/common.rs b/src/backend/common.rs index 71fba69..79ae84c 100644 --- a/src/backend/common.rs +++ b/src/backend/common.rs @@ -60,7 +60,7 @@ impl OverlayContainer where T: Default, { - pub fn new(app: &mut AppState, show_by_default: bool) -> anyhow::Result { + pub fn new(app: &mut AppState) -> anyhow::Result { let mut overlays = IdMap::new(); let mut wl = create_wl_client(); @@ -95,7 +95,6 @@ where for (meta, mut state, backend) in data.screens { if show_screens.arc_get(state.name.as_ref()) { state.show_hide = true; - state.want_visible = show_by_default; } overlays.insert( state.id, diff --git a/src/backend/openvr/mod.rs b/src/backend/openvr/mod.rs index e86b762..6872c95 100644 --- a/src/backend/openvr/mod.rs +++ b/src/backend/openvr/mod.rs @@ -1,5 +1,6 @@ use std::{ collections::VecDeque, + ops::Add, sync::{ atomic::{AtomicBool, AtomicUsize, Ordering}, Arc, @@ -95,6 +96,13 @@ pub fn openvr_run(running: Arc, show_by_default: bool) -> Result<(), AppState::from_graphics(graphics)? }; + if show_by_default { + state.tasks.enqueue_at( + TaskType::System(SystemTask::ShowHide), + Instant::now().add(Duration::from_secs(1)), + ) + } + if let Ok(ipd) = system_mgr.get_tracked_device_property::( TrackedDeviceIndex::HMD, ETrackedDeviceProperty::Prop_UserIpdMeters_Float, @@ -105,7 +113,7 @@ pub fn openvr_run(running: Arc, show_by_default: bool) -> Result<(), let _ = install_manifest(&mut app_mgr); - let mut overlays = OverlayContainer::::new(&mut state, show_by_default)?; + let mut overlays = OverlayContainer::::new(&mut state)?; let mut notifications = NotificationManager::new(); notifications.run_dbus(); notifications.run_udp(); @@ -250,6 +258,9 @@ pub fn openvr_run(running: Arc, show_by_default: bool) -> Result<(), SystemTask::ResetPlayspace => { playspace.reset_offset(&mut chaperone_mgr, &state.input_state); } + SystemTask::ShowHide => { + overlays.show_hide(&mut state); + } }, } } diff --git a/src/backend/openxr/mod.rs b/src/backend/openxr/mod.rs index 494c638..0718297 100644 --- a/src/backend/openxr/mod.rs +++ b/src/backend/openxr/mod.rs @@ -1,10 +1,11 @@ use std::{ collections::VecDeque, + ops::Add, sync::{ atomic::{AtomicBool, AtomicUsize, Ordering}, Arc, }, - time::Duration, + time::{Duration, Instant}, }; use glam::{Affine3A, Vec3}; @@ -66,7 +67,14 @@ pub fn openxr_run(running: Arc, show_by_default: bool) -> Result<(), AppState::from_graphics(graphics)? }; - let mut overlays = OverlayContainer::::new(&mut app_state, show_by_default)?; + if show_by_default { + app_state.tasks.enqueue_at( + TaskType::System(SystemTask::ShowHide), + Instant::now().add(Duration::from_secs(1)), + ) + } + + let mut overlays = OverlayContainer::::new(&mut app_state)?; let mut lines = LinePool::new(app_state.graphics.clone())?; let mut notifications = NotificationManager::new(); @@ -384,6 +392,9 @@ pub fn openxr_run(running: Arc, show_by_default: bool) -> Result<(), playspace.reset_offset(); } } + SystemTask::ShowHide => { + overlays.show_hide(&mut app_state); + } _ => {} }, } diff --git a/src/backend/task.rs b/src/backend/task.rs index 2b15251..dc07b86 100644 --- a/src/backend/task.rs +++ b/src/backend/task.rs @@ -46,6 +46,7 @@ pub enum SystemTask { ColorGain(ColorChannel, f32), ResetPlayspace, FixFloor, + ShowHide, } pub type OverlayTask = dyn FnOnce(&mut AppState, &mut OverlayState) + Send;