WayVR: shown_at_start app param support

This commit is contained in:
Aleksander
2024-10-26 18:40:05 +02:00
committed by galister
parent 7cb8e4a9d2
commit cf5eabdfdf
4 changed files with 38 additions and 6 deletions

View File

@@ -1,13 +1,20 @@
#[cfg(not(feature = "wayvr"))]
compile_error!("WayVR feature is not enabled");
use std::collections::{BTreeMap, HashMap};
use std::{
collections::{BTreeMap, HashMap},
sync::Arc,
};
use serde::{Deserialize, Serialize};
use crate::{
backend::overlay::RelativeTo,
backend::{
overlay::RelativeTo,
task::{TaskContainer, TaskType},
},
config::{load_known_yaml, ConfigType},
overlays::wayvr::WayVRAction,
};
// Flat version of RelativeTo
@@ -45,13 +52,14 @@ pub struct WayVRAppEntry {
pub exec: String,
pub args: Option<String>,
pub env: Option<Vec<String>>,
pub shown_at_start: Option<bool>,
}
#[derive(Clone, Deserialize, Serialize)]
pub struct WayVRDisplay {
pub width: u32,
pub height: u32,
pub scale: f32,
pub scale: Option<f32>,
pub rotation: Option<Rotation>,
pub pos: Option<[f32; 3]>,
pub attach_to: Option<AttachTo>,
@@ -83,6 +91,21 @@ impl WayVRConfig {
pub fn get_display(&self, name: &str) -> Option<&WayVRDisplay> {
self.displays.get(name)
}
pub fn post_load(&self, tasks: &mut TaskContainer) {
for (catalog_name, catalog) in &self.catalogs {
for app in &catalog.apps {
if let Some(b) = app.shown_at_start {
if b {
tasks.enqueue(TaskType::WayVR(WayVRAction::AppClick {
catalog_name: Arc::from(catalog_name.as_str()),
app_name: Arc::from(app.name.as_str()),
}));
}
}
}
}
}
}
pub fn load_wayvr() -> WayVRConfig {

View File

@@ -328,7 +328,7 @@ where
conf_display.width,
conf_display.height,
display_handle,
conf_display.scale,
conf_display.scale.unwrap_or(1.0),
)?;
if let Some(attach_to) = &conf_display.attach_to {

View File

@@ -16,7 +16,6 @@ displays:
Disp1:
width: 640
height: 480
scale: 1.25
Disp2:
width: 1280
height: 720
@@ -29,6 +28,7 @@ catalogs:
target_display: "Disp1"
exec: "kcalc"
env: ["FOO=bar"]
shown_at_start: false
- name: "htop"
target_display: "Watch"

View File

@@ -91,12 +91,21 @@ impl AppState {
shaders.insert("frag_swapchain", shader);
}
#[cfg(feature = "wayvr")]
let mut tasks = TaskContainer::new();
#[cfg(not(feature = "wayvr"))]
let tasks = TaskContainer::new();
let session = AppSession::load();
#[cfg(feature = "wayvr")]
session.wayvr_config.post_load(&mut tasks);
Ok(AppState {
fc: FontCache::new(session.config.primary_font.clone())?,
session,
tasks: TaskContainer::new(),
tasks,
graphics,
input_state: InputState::new(),
hid_provider: crate::hid::initialize(),