diff --git a/dash-frontend/assets/gui/tab/donate.xml b/dash-frontend/assets/gui/tab/donate.xml
index ffa9ebe6..5b7d8610 100644
--- a/dash-frontend/assets/gui/tab/donate.xml
+++ b/dash-frontend/assets/gui/tab/donate.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/dash-frontend/assets/gui/tab/welcome_page_5.xml b/dash-frontend/assets/gui/tab/welcome_page_5.xml
index 8e588293..fdbcaecc 100644
--- a/dash-frontend/assets/gui/tab/welcome_page_5.xml
+++ b/dash-frontend/assets/gui/tab/welcome_page_5.xml
@@ -8,10 +8,10 @@
-
-
-
-
+
diff --git a/dash-frontend/src/frontend.rs b/dash-frontend/src/frontend.rs
index fc10d9ed..3ad7f540 100644
--- a/dash-frontend/src/frontend.rs
+++ b/dash-frontend/src/frontend.rs
@@ -114,6 +114,7 @@ pub enum FrontendTask {
RecenterPlayspace,
PushToast(Translation),
PlaySound(SoundType),
+ OpenURL(Rc
),
HideDashboard,
}
@@ -367,6 +368,7 @@ impl Frontend {
FrontendTask::PushToast(content) => self.toast_manager.push(content),
FrontendTask::PlaySound(sound_type) => self.queue_play_sound(sound_type),
FrontendTask::HideDashboard => self.action_hide_dashboard(params.data),
+ FrontendTask::OpenURL(url) => self.action_open_url(url),
};
Ok(())
}
@@ -542,4 +544,14 @@ impl Frontend {
fn action_hide_dashboard(&mut self, data: &mut T) {
self.interface.toggle_dashboard(data);
}
+
+ fn action_open_url(&mut self, url: Rc) {
+ let _ = std::process::Command::new("xdg-open").arg(url.as_ref()).spawn();
+ self
+ .tasks
+ .push(FrontendTask::PushToast(Translation::from_raw_text_string(format!(
+ "Opened URL: {}",
+ url
+ ))));
+ }
}
diff --git a/dash-frontend/src/tab/donate.rs b/dash-frontend/src/tab/donate.rs
index 7fb4c843..4ab8c0b2 100644
--- a/dash-frontend/src/tab/donate.rs
+++ b/dash-frontend/src/tab/donate.rs
@@ -4,13 +4,13 @@ use wgui::{
assets::AssetPath,
components::button::ComponentButton,
globals::WguiGlobals,
- layout::{Layout, WidgetID},
- parser::{Fetchable, ParseDocumentParams, ParserState, TemplateParams},
+ layout::WidgetID,
+ parser::{Fetchable, ParseDocumentParams, ParserState},
task::Tasks,
};
use crate::{
- frontend::{Frontend, FrontendTask, FrontendTasks},
+ frontend::{Frontend, FrontendTask},
tab::{Tab, TabType},
};
@@ -22,8 +22,8 @@ pub struct TabDonate {
#[allow(dead_code)]
pub state: ParserState,
marker: PhantomData,
+ #[allow(dead_code)]
tasks: Tasks,
- frontend_tasks: FrontendTasks,
}
impl Tab for TabDonate {
@@ -31,10 +31,10 @@ impl Tab for TabDonate {
TabType::Donate
}
- fn update(&mut self, frontend: &mut Frontend, _time_ms: u32, _user_data: &mut T) -> anyhow::Result<()> {
- for task in self.tasks.drain() {
- match task {}
- }
+ fn update(&mut self, _frontend: &mut Frontend, _time_ms: u32, _user_data: &mut T) -> anyhow::Result<()> {
+ // for task in self.tasks.drain() {
+ // match task {}
+ // }
Ok(())
}
@@ -52,13 +52,17 @@ impl TabDonate {
pub fn new(frontend: &mut Frontend, parent_id: WidgetID, _data: &mut T) -> anyhow::Result {
let state = wgui::parser::parse_from_assets(&doc_params(&frontend.globals), &mut frontend.layout, parent_id)?;
+ frontend.tasks.handle_button(
+ &state.fetch_component_as::("btn_donate")?,
+ FrontendTask::OpenURL(Rc::from("https://opencollective.com/wayvr-org")),
+ );
+
let tasks = Tasks::::new();
Ok(Self {
state,
marker: PhantomData,
tasks,
- frontend_tasks: frontend.tasks.clone(),
})
}
}
diff --git a/dash-frontend/src/tab/welcome.rs b/dash-frontend/src/tab/welcome.rs
index b7b2eacf..91ecae91 100644
--- a/dash-frontend/src/tab/welcome.rs
+++ b/dash-frontend/src/tab/welcome.rs
@@ -145,6 +145,12 @@ impl TabWelcome {
});
}
+ if let Ok(btn) = state.fetch_component_as::("btn_wayvr_org") {
+ self
+ .frontend_tasks
+ .handle_button(&btn, FrontendTask::OpenURL(Rc::from("https://wayvr.org")));
+ }
+
self.state_tab = Some(state);
Ok(())
diff --git a/dash-frontend/src/util/openxr_bindings.rs b/dash-frontend/src/util/openxr_bindings.rs
index 3cdbea1f..bb4e420e 100644
--- a/dash-frontend/src/util/openxr_bindings.rs
+++ b/dash-frontend/src/util/openxr_bindings.rs
@@ -91,7 +91,7 @@ pub struct ParsedOpenXrInputPath {
pub component: XrInputComponent,
}
-impl<'a> TryFrom<&'a str> for ParsedOpenXrInputPath {
+impl TryFrom<&str> for ParsedOpenXrInputPath {
type Error = anyhow::Error;
fn try_from(path: &str) -> anyhow::Result {
diff --git a/dash-frontend/src/views/bindings.rs b/dash-frontend/src/views/bindings.rs
index e7ee768a..033a4c1a 100644
--- a/dash-frontend/src/views/bindings.rs
+++ b/dash-frontend/src/views/bindings.rs
@@ -91,7 +91,7 @@ impl ViewTrait for View {
}
Task::UpdateThreshold(action_name, side, i, val) => {
let cur_profile = &mut self.profiles[self.cur_profile_idx];
- let action_mut = get_action_mut(cur_profile, &*action_name);
+ let action_mut = get_action_mut(cur_profile, &action_name);
let threshold = if matches!(side, XrInputSide::Right) {
action_mut.threshold_right.get_or_insert(DEFAULT_BUTTON_THRESHOLDS)
@@ -124,10 +124,10 @@ impl ViewTrait for View {
*side_mut = None;
}
"subpath" => {
- apply_subpath(side_mut, &side, &value, self.controller_profile);
+ apply_subpath(side_mut, side, value, self.controller_profile);
}
"comp" => {
- apply_comp(side_mut, &side, &value);
+ apply_comp(side_mut, side, value);
}
"click" => match value {
"triple" => {
@@ -244,7 +244,7 @@ impl View {
&mut mp,
self.list_parent,
action.into(),
- &self.controller_profile,
+ self.controller_profile,
current,
)?;
}
@@ -616,7 +616,7 @@ fn create_dropdown(
let title = item.translation();
context_menu::Cell {
- action_name: Some(item.action_str(&*action, side)),
+ action_name: Some(item.action_str(&action, side)),
title,
tooltip: None,
attribs: vec![],
@@ -624,7 +624,7 @@ fn create_dropdown(
})
.collect::>();
- if let Some(action_str) = B::clear_str(&*action, side) {
+ if let Some(action_str) = B::clear_str(&action, side) {
cells.insert(
0,
context_menu::Cell {