@@ -136,10 +141,10 @@
-
diff --git a/dash-frontend/src/frontend.rs b/dash-frontend/src/frontend.rs
index 78b35e45..327b3e64 100644
--- a/dash-frontend/src/frontend.rs
+++ b/dash-frontend/src/frontend.rs
@@ -1,11 +1,12 @@
-use std::{path::PathBuf, rc::Rc};
+use std::{collections::HashMap, path::PathBuf, rc::Rc};
use chrono::Timelike;
use glam::Vec2;
+use strum::EnumCount;
use wgui::{
assets::{AssetPath, AssetProvider},
components::button::ComponentButton,
- event::StyleSetRequest,
+ event::{CallbackDataCommon, StyleSetRequest},
font_config::WguiFontConfig,
globals::WguiGlobals,
i18n::Translation,
@@ -61,6 +62,7 @@ pub struct Frontend
{
state: ParserState,
current_tab: Option>>,
+ side_buttons: Vec<(TabType, Rc)>,
pub tasks: FrontendTasks,
@@ -181,6 +183,7 @@ impl Frontend {
layout,
state,
current_tab: None,
+ side_buttons: Vec::with_capacity(TabType::COUNT),
globals,
tasks,
ticks: 0,
@@ -439,6 +442,15 @@ impl Frontend {
self.current_tab = Some(tab);
+ let mut common = CallbackDataCommon {
+ state: &self.layout.state,
+ alterables: &mut self.layout.alterables,
+ };
+
+ for (t, btn) in self.side_buttons.iter() {
+ btn.set_sticky_state(&mut common, tab_type == *t);
+ }
+
Ok(())
}
@@ -454,34 +466,29 @@ impl Frontend {
// ################################
// "Home" side button
- self.tasks.handle_button(
- &self.state.fetch_component_as::("btn_side_home")?,
- FrontendTask::SetTab(TabType::Home),
- );
+ let btn = self.state.fetch_component_as::("btn_side_home")?;
+ self.tasks.handle_button(&btn, FrontendTask::SetTab(TabType::Home));
+ self.side_buttons.push((TabType::Home, btn));
// "Apps" side button
- self.tasks.handle_button(
- &self.state.fetch_component_as::("btn_side_apps")?,
- FrontendTask::SetTab(TabType::Apps),
- );
+ let btn = self.state.fetch_component_as::("btn_side_apps")?;
+ self.tasks.handle_button(&btn, FrontendTask::SetTab(TabType::Apps));
+ self.side_buttons.push((TabType::Apps, btn));
// "Games" side button
- self.tasks.handle_button(
- &self.state.fetch_component_as::("btn_side_games")?,
- FrontendTask::SetTab(TabType::Games),
- );
+ let btn = self.state.fetch_component_as::("btn_side_games")?;
+ self.tasks.handle_button(&btn, FrontendTask::SetTab(TabType::Games));
+ self.side_buttons.push((TabType::Games, btn));
// "Monado side button"
- self.tasks.handle_button(
- &self.state.fetch_component_as::("btn_side_monado")?,
- FrontendTask::SetTab(TabType::Monado),
- );
+ let btn = self.state.fetch_component_as::("btn_side_monado")?;
+ self.tasks.handle_button(&btn, FrontendTask::SetTab(TabType::Monado));
+ self.side_buttons.push((TabType::Monado, btn));
// "Settings" side button
- self.tasks.handle_button(
- &self.state.fetch_component_as::("btn_side_settings")?,
- FrontendTask::SetTab(TabType::Settings),
- );
+ let btn = self.state.fetch_component_as::("btn_side_settings")?;
+ self.tasks.handle_button(&btn, FrontendTask::SetTab(TabType::Settings));
+ self.side_buttons.push((TabType::Settings, btn));
// ################################
// BOTTOM BAR BUTTONS
diff --git a/dash-frontend/src/tab/mod.rs b/dash-frontend/src/tab/mod.rs
index 6d8ae8c6..881084de 100644
--- a/dash-frontend/src/tab/mod.rs
+++ b/dash-frontend/src/tab/mod.rs
@@ -1,3 +1,5 @@
+use strum::EnumCount;
+
use crate::frontend::Frontend;
pub mod apps;
@@ -8,7 +10,7 @@ pub mod monado;
pub mod settings;
pub mod welcome;
-#[derive(Clone, Copy, Debug)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumCount)]
pub enum TabType {
Home,
Apps,