WayVR: shown_at_start app param support
This commit is contained in:
@@ -1,13 +1,20 @@
|
|||||||
#[cfg(not(feature = "wayvr"))]
|
#[cfg(not(feature = "wayvr"))]
|
||||||
compile_error!("WayVR feature is not enabled");
|
compile_error!("WayVR feature is not enabled");
|
||||||
|
|
||||||
use std::collections::{BTreeMap, HashMap};
|
use std::{
|
||||||
|
collections::{BTreeMap, HashMap},
|
||||||
|
sync::Arc,
|
||||||
|
};
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
backend::overlay::RelativeTo,
|
backend::{
|
||||||
|
overlay::RelativeTo,
|
||||||
|
task::{TaskContainer, TaskType},
|
||||||
|
},
|
||||||
config::{load_known_yaml, ConfigType},
|
config::{load_known_yaml, ConfigType},
|
||||||
|
overlays::wayvr::WayVRAction,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Flat version of RelativeTo
|
// Flat version of RelativeTo
|
||||||
@@ -45,13 +52,14 @@ pub struct WayVRAppEntry {
|
|||||||
pub exec: String,
|
pub exec: String,
|
||||||
pub args: Option<String>,
|
pub args: Option<String>,
|
||||||
pub env: Option<Vec<String>>,
|
pub env: Option<Vec<String>>,
|
||||||
|
pub shown_at_start: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Deserialize, Serialize)]
|
#[derive(Clone, Deserialize, Serialize)]
|
||||||
pub struct WayVRDisplay {
|
pub struct WayVRDisplay {
|
||||||
pub width: u32,
|
pub width: u32,
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
pub scale: f32,
|
pub scale: Option<f32>,
|
||||||
pub rotation: Option<Rotation>,
|
pub rotation: Option<Rotation>,
|
||||||
pub pos: Option<[f32; 3]>,
|
pub pos: Option<[f32; 3]>,
|
||||||
pub attach_to: Option<AttachTo>,
|
pub attach_to: Option<AttachTo>,
|
||||||
@@ -83,6 +91,21 @@ impl WayVRConfig {
|
|||||||
pub fn get_display(&self, name: &str) -> Option<&WayVRDisplay> {
|
pub fn get_display(&self, name: &str) -> Option<&WayVRDisplay> {
|
||||||
self.displays.get(name)
|
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 {
|
pub fn load_wayvr() -> WayVRConfig {
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ where
|
|||||||
conf_display.width,
|
conf_display.width,
|
||||||
conf_display.height,
|
conf_display.height,
|
||||||
display_handle,
|
display_handle,
|
||||||
conf_display.scale,
|
conf_display.scale.unwrap_or(1.0),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if let Some(attach_to) = &conf_display.attach_to {
|
if let Some(attach_to) = &conf_display.attach_to {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ displays:
|
|||||||
Disp1:
|
Disp1:
|
||||||
width: 640
|
width: 640
|
||||||
height: 480
|
height: 480
|
||||||
scale: 1.25
|
|
||||||
Disp2:
|
Disp2:
|
||||||
width: 1280
|
width: 1280
|
||||||
height: 720
|
height: 720
|
||||||
@@ -29,6 +28,7 @@ catalogs:
|
|||||||
target_display: "Disp1"
|
target_display: "Disp1"
|
||||||
exec: "kcalc"
|
exec: "kcalc"
|
||||||
env: ["FOO=bar"]
|
env: ["FOO=bar"]
|
||||||
|
shown_at_start: false
|
||||||
|
|
||||||
- name: "htop"
|
- name: "htop"
|
||||||
target_display: "Watch"
|
target_display: "Watch"
|
||||||
|
|||||||
11
src/state.rs
11
src/state.rs
@@ -91,12 +91,21 @@ impl AppState {
|
|||||||
shaders.insert("frag_swapchain", shader);
|
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();
|
let session = AppSession::load();
|
||||||
|
|
||||||
|
#[cfg(feature = "wayvr")]
|
||||||
|
session.wayvr_config.post_load(&mut tasks);
|
||||||
|
|
||||||
Ok(AppState {
|
Ok(AppState {
|
||||||
fc: FontCache::new(session.config.primary_font.clone())?,
|
fc: FontCache::new(session.config.primary_font.clone())?,
|
||||||
session,
|
session,
|
||||||
tasks: TaskContainer::new(),
|
tasks,
|
||||||
graphics,
|
graphics,
|
||||||
input_state: InputState::new(),
|
input_state: InputState::new(),
|
||||||
hid_provider: crate::hid::initialize(),
|
hid_provider: crate::hid::initialize(),
|
||||||
|
|||||||
Reference in New Issue
Block a user