diff --git a/dash-frontend/src/tab/settings/mod.rs b/dash-frontend/src/tab/settings/mod.rs index 5477078e..32ec394a 100644 --- a/dash-frontend/src/tab/settings/mod.rs +++ b/dash-frontend/src/tab/settings/mod.rs @@ -5,6 +5,7 @@ use wgui::{ assets::AssetPath, components::tabs::ComponentTabs, drawing, + event::StyleSetRequest, globals::WguiGlobals, i18n::Translation, layout::{Layout, WidgetID}, @@ -585,7 +586,7 @@ impl TabSettings { Ok(()) } - pub fn new(frontend: &mut Frontend, parent_id: WidgetID, _data: &mut T) -> anyhow::Result { + pub fn new(frontend: &mut Frontend, parent_id: WidgetID, data: &mut T) -> anyhow::Result { let doc_params = ParseDocumentParams { globals: frontend.layout.state.globals.clone(), path: AssetPath::BuiltIn("gui/tab/settings.xml"), @@ -595,6 +596,16 @@ impl TabSettings { let parser_state = wgui::parser::parse_from_assets(&doc_params, &mut frontend.layout, parent_id)?; let tasks = Tasks::default(); let tabs = parser_state.fetch_component_as::("tabs")?; + + if !frontend.interface.get_feats(data).openxr { + let skybox_btn = tabs.get_tab_button("skybox").unwrap(); + frontend + .layout + .common() + .alterables + .set_style(skybox_btn.get_rect(), StyleSetRequest::Display(taffy::Display::None)); + } + tabs.on_select({ let tasks = tasks.clone(); Rc::new(move |_common, evt| { diff --git a/wayvr/src/overlays/dashboard.rs b/wayvr/src/overlays/dashboard.rs index 10b05964..a0b531d7 100644 --- a/wayvr/src/overlays/dashboard.rs +++ b/wayvr/src/overlays/dashboard.rs @@ -476,6 +476,13 @@ impl DashInterface for DashInterfaceLive { .enqueue(TaskType::Overlay(OverlayTask::ToggleDashboard)); } + fn get_feats(&mut self, data: &mut AppState) -> dash_interface::InterfaceFeats { + dash_interface::InterfaceFeats { + openxr: matches!(data.xr_backend, XrBackend::OpenXR), + monado: data.monado_state.is_some(), + } + } + #[cfg(feature = "openxr")] fn monado_client_list( &mut self, diff --git a/wgui/src/components/tabs.rs b/wgui/src/components/tabs.rs index 521fb842..293cc00a 100644 --- a/wgui/src/components/tabs.rs +++ b/wgui/src/components/tabs.rs @@ -9,7 +9,7 @@ use crate::{ layout::WidgetPair, widget::{ConstructEssentials, div::WidgetDiv}, }; -use std::{cell::RefCell, rc::Rc}; +use std::{cell::RefCell, fmt::Pointer, rc::Rc}; use taffy::{ AlignItems, prelude::{length, percent}, @@ -94,6 +94,16 @@ impl ComponentTabs { pub fn on_select(&self, callback: TabSelectCallback) { self.state.borrow_mut().on_select = Some(callback); } + + pub fn get_tab_button(&self, name: &str) -> Option> { + self + .state + .borrow_mut() + .mounted_entries + .iter() + .find(|e| name == &*e.name) + .map(|e| e.button.clone()) + } } pub fn construct(ess: &mut ConstructEssentials, params: Params) -> anyhow::Result<(WidgetPair, Rc)> { diff --git a/wlx-common/src/dash_interface.rs b/wlx-common/src/dash_interface.rs index bf9544ae..34990443 100644 --- a/wlx-common/src/dash_interface.rs +++ b/wlx-common/src/dash_interface.rs @@ -43,6 +43,12 @@ pub enum RecenterMode { Reset, } +#[derive(Clone, Copy)] +pub struct InterfaceFeats { + pub openxr: bool, + pub monado: bool, +} + pub trait DashInterface { fn window_list(&mut self, data: &mut T) -> anyhow::Result>; fn window_set_visible(&mut self, data: &mut T, handle: WvrWindowHandle, visible: bool) -> anyhow::Result<()>; @@ -68,6 +74,7 @@ pub trait DashInterface { fn config_changed(&mut self, data: &mut T, kind: ConfigChangeKind); fn restart(&mut self, data: &mut T); fn toggle_dashboard(&mut self, data: &mut T); + fn get_feats(&mut self, data: &mut T) -> InterfaceFeats; } #[derive(Clone, Copy)] diff --git a/wlx-common/src/dash_interface_emulated.rs b/wlx-common/src/dash_interface_emulated.rs index d2479e86..919054dd 100644 --- a/wlx-common/src/dash_interface_emulated.rs +++ b/wlx-common/src/dash_interface_emulated.rs @@ -236,6 +236,13 @@ impl DashInterface<()> for DashInterfaceEmulated { fn toggle_dashboard(&mut self, _data: &mut ()) {} + fn get_feats(&mut self, _data: &mut ()) -> dash_interface::InterfaceFeats { + dash_interface::InterfaceFeats { + openxr: true, + monado: true, + } + } + fn monado_client_list( &mut self, _data: &mut (),