diff --git a/wayvr/src/backend/openvr/mod.rs b/wayvr/src/backend/openvr/mod.rs index 83b479d8..b2773d97 100644 --- a/wayvr/src/backend/openvr/mod.rs +++ b/wayvr/src/backend/openvr/mod.rs @@ -58,7 +58,11 @@ pub fn openvr_uninstall() { } #[allow(clippy::too_many_lines, clippy::cognitive_complexity)] -pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendError> { +pub fn openvr_run( + show_by_default: bool, + headless: bool, + no_autostart: bool, +) -> Result<(), BackendError> { let app_type = EVRApplicationType::VRApplication_Overlay; let Ok(context) = ovr_overlay::Context::init(app_type) else { log::warn!("Will not use OpenVR: Context init failed"); @@ -91,6 +95,8 @@ pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr AppState::from_graphics(gfx, gfx_extras, XrBackend::OpenVR)? }; + app.session.no_autostart = no_autostart; + if show_by_default { app.tasks.enqueue_at( TaskType::Overlay(OverlayTask::ShowHide), diff --git a/wayvr/src/backend/openxr/mod.rs b/wayvr/src/backend/openxr/mod.rs index 57a6506b..acdb2086 100644 --- a/wayvr/src/backend/openxr/mod.rs +++ b/wayvr/src/backend/openxr/mod.rs @@ -53,7 +53,11 @@ struct XrState { } #[allow(clippy::too_many_lines, clippy::cognitive_complexity)] -pub fn openxr_run(show_by_default: bool, headless: bool) -> Result<(), BackendError> { +pub fn openxr_run( + show_by_default: bool, + headless: bool, + no_autostart: bool, +) -> Result<(), BackendError> { let (xr_instance, system) = match helpers::init_xr() { Ok((xr_instance, system)) => (xr_instance, system), Err(e) => { @@ -67,6 +71,8 @@ pub fn openxr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr AppState::from_graphics(gfx, gfx_extras, XrBackend::OpenXR)? }; + app.session.no_autostart = no_autostart; + let modes = xr_instance.enumerate_environment_blend_modes(system, VIEW_TYPE)?; if show_by_default { diff --git a/wayvr/src/main.rs b/wayvr/src/main.rs index 8c692ca9..7a49f02e 100644 --- a/wayvr/src/main.rs +++ b/wayvr/src/main.rs @@ -84,6 +84,10 @@ struct Args { #[arg(long)] headless: bool, + /// Do not auto-start registered apps + #[arg(long)] + no_autostart: bool, + /// Path to write logs to #[arg(short, long, value_name = "FILE_PATH")] log_to: Option, @@ -150,7 +154,7 @@ fn auto_run(args: Args, used_backend: &mut Option) { if !args_get_openvr(&args) { use crate::backend::{BackendError, openxr::openxr_run}; tried_xr = true; - match openxr_run(args.show, args.headless) { + match openxr_run(args.show, args.headless, args.no_autostart) { Ok(()) => { used_backend.replace(XrBackend::OpenXR); return; @@ -168,7 +172,7 @@ fn auto_run(args: Args, used_backend: &mut Option) { if !args_get_openxr(&args) { use crate::backend::{BackendError, openvr::openvr_run}; tried_vr = true; - match openvr_run(args.show, args.headless) { + match openvr_run(args.show, args.headless, args.no_autostart) { Ok(()) => { used_backend.replace(XrBackend::OpenVR); return; diff --git a/wayvr/src/overlays/dashboard.rs b/wayvr/src/overlays/dashboard.rs index 4d0b7958..8a635bee 100644 --- a/wayvr/src/overlays/dashboard.rs +++ b/wayvr/src/overlays/dashboard.rs @@ -73,8 +73,12 @@ impl DashFrontend { fn new(app: &mut AppState) -> anyhow::Result { let mut interface = DashInterfaceLive::new(); - for p in app.session.config.autostart_apps.clone() { - let _ = interface.process_launch(app, false, p); + if app.session.no_autostart { + log::info!("Not starting apps due to --no-autostart") + } else { + for p in app.session.config.autostart_apps.clone() { + let _ = interface.process_launch(app, false, p); + } } let frontend = frontend::Frontend::new(frontend::InitParams { diff --git a/wayvr/src/state.rs b/wayvr/src/state.rs index 9e8d7da2..76d48422 100644 --- a/wayvr/src/state.rs +++ b/wayvr/src/state.rs @@ -218,6 +218,8 @@ pub struct AppSession { pub config: GeneralConfig, pub config_dirty: bool, + pub no_autostart: bool, + pub toast_topics: IdMap, } @@ -240,6 +242,7 @@ impl AppSession { Self { config, toast_topics, + no_autostart: false, config_dirty: false, } }