fix --show behavior
This commit is contained in:
@@ -60,7 +60,7 @@ impl<T> OverlayContainer<T>
|
|||||||
where
|
where
|
||||||
T: Default,
|
T: Default,
|
||||||
{
|
{
|
||||||
pub fn new(app: &mut AppState, show_by_default: bool) -> anyhow::Result<Self> {
|
pub fn new(app: &mut AppState) -> anyhow::Result<Self> {
|
||||||
let mut overlays = IdMap::new();
|
let mut overlays = IdMap::new();
|
||||||
let mut wl = create_wl_client();
|
let mut wl = create_wl_client();
|
||||||
|
|
||||||
@@ -95,7 +95,6 @@ where
|
|||||||
for (meta, mut state, backend) in data.screens {
|
for (meta, mut state, backend) in data.screens {
|
||||||
if show_screens.arc_get(state.name.as_ref()) {
|
if show_screens.arc_get(state.name.as_ref()) {
|
||||||
state.show_hide = true;
|
state.show_hide = true;
|
||||||
state.want_visible = show_by_default;
|
|
||||||
}
|
}
|
||||||
overlays.insert(
|
overlays.insert(
|
||||||
state.id,
|
state.id,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use std::{
|
use std::{
|
||||||
collections::VecDeque,
|
collections::VecDeque,
|
||||||
|
ops::Add,
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicBool, AtomicUsize, Ordering},
|
atomic::{AtomicBool, AtomicUsize, Ordering},
|
||||||
Arc,
|
Arc,
|
||||||
@@ -95,6 +96,13 @@ pub fn openvr_run(running: Arc<AtomicBool>, show_by_default: bool) -> Result<(),
|
|||||||
AppState::from_graphics(graphics)?
|
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::<f32>(
|
if let Ok(ipd) = system_mgr.get_tracked_device_property::<f32>(
|
||||||
TrackedDeviceIndex::HMD,
|
TrackedDeviceIndex::HMD,
|
||||||
ETrackedDeviceProperty::Prop_UserIpdMeters_Float,
|
ETrackedDeviceProperty::Prop_UserIpdMeters_Float,
|
||||||
@@ -105,7 +113,7 @@ pub fn openvr_run(running: Arc<AtomicBool>, show_by_default: bool) -> Result<(),
|
|||||||
|
|
||||||
let _ = install_manifest(&mut app_mgr);
|
let _ = install_manifest(&mut app_mgr);
|
||||||
|
|
||||||
let mut overlays = OverlayContainer::<OpenVrOverlayData>::new(&mut state, show_by_default)?;
|
let mut overlays = OverlayContainer::<OpenVrOverlayData>::new(&mut state)?;
|
||||||
let mut notifications = NotificationManager::new();
|
let mut notifications = NotificationManager::new();
|
||||||
notifications.run_dbus();
|
notifications.run_dbus();
|
||||||
notifications.run_udp();
|
notifications.run_udp();
|
||||||
@@ -250,6 +258,9 @@ pub fn openvr_run(running: Arc<AtomicBool>, show_by_default: bool) -> Result<(),
|
|||||||
SystemTask::ResetPlayspace => {
|
SystemTask::ResetPlayspace => {
|
||||||
playspace.reset_offset(&mut chaperone_mgr, &state.input_state);
|
playspace.reset_offset(&mut chaperone_mgr, &state.input_state);
|
||||||
}
|
}
|
||||||
|
SystemTask::ShowHide => {
|
||||||
|
overlays.show_hide(&mut state);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
use std::{
|
use std::{
|
||||||
collections::VecDeque,
|
collections::VecDeque,
|
||||||
|
ops::Add,
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicBool, AtomicUsize, Ordering},
|
atomic::{AtomicBool, AtomicUsize, Ordering},
|
||||||
Arc,
|
Arc,
|
||||||
},
|
},
|
||||||
time::Duration,
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
|
|
||||||
use glam::{Affine3A, Vec3};
|
use glam::{Affine3A, Vec3};
|
||||||
@@ -66,7 +67,14 @@ pub fn openxr_run(running: Arc<AtomicBool>, show_by_default: bool) -> Result<(),
|
|||||||
AppState::from_graphics(graphics)?
|
AppState::from_graphics(graphics)?
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut overlays = OverlayContainer::<OpenXrOverlayData>::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::<OpenXrOverlayData>::new(&mut app_state)?;
|
||||||
let mut lines = LinePool::new(app_state.graphics.clone())?;
|
let mut lines = LinePool::new(app_state.graphics.clone())?;
|
||||||
|
|
||||||
let mut notifications = NotificationManager::new();
|
let mut notifications = NotificationManager::new();
|
||||||
@@ -384,6 +392,9 @@ pub fn openxr_run(running: Arc<AtomicBool>, show_by_default: bool) -> Result<(),
|
|||||||
playspace.reset_offset();
|
playspace.reset_offset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SystemTask::ShowHide => {
|
||||||
|
overlays.show_hide(&mut app_state);
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ pub enum SystemTask {
|
|||||||
ColorGain(ColorChannel, f32),
|
ColorGain(ColorChannel, f32),
|
||||||
ResetPlayspace,
|
ResetPlayspace,
|
||||||
FixFloor,
|
FixFloor,
|
||||||
|
ShowHide,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type OverlayTask = dyn FnOnce(&mut AppState, &mut OverlayState) + Send;
|
pub type OverlayTask = dyn FnOnce(&mut AppState, &mut OverlayState) + Send;
|
||||||
|
|||||||
Reference in New Issue
Block a user