diff --git a/Cargo.lock b/Cargo.lock
index 2e8f4b6..75e661e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2884,8 +2884,7 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
[[package]]
name = "libmonado"
version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f56d8582a273a05076c57d5478faa51c39958744760938f2da770e890b43c62d"
+source = "git+https://github.com/technobaboo/libmonado-rs.git?rev=26292e5b14663ee2f089f66f0851438a0c00ee67#26292e5b14663ee2f089f66f0851438a0c00ee67"
dependencies = [
"bindgen",
"cmake",
diff --git a/dash-frontend/assets/gui/tab/monado.xml b/dash-frontend/assets/gui/tab/monado.xml
index 1534d01..cd89474 100644
--- a/dash-frontend/assets/gui/tab/monado.xml
+++ b/dash-frontend/assets/gui/tab/monado.xml
@@ -28,8 +28,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/dash-frontend/assets/lang/de.json b/dash-frontend/assets/lang/de.json
index 4188434..f2192eb 100644
--- a/dash-frontend/assets/lang/de.json
+++ b/dash-frontend/assets/lang/de.json
@@ -144,5 +144,6 @@
},
"AUTOSTART": "Automatisch beim Start ausführen",
"LAUNCH": "Starten"
- }
+ },
+ "DISPLAY_BRIGHTNESS": "Bildschirmhelligkeit"
}
\ No newline at end of file
diff --git a/dash-frontend/assets/lang/en.json b/dash-frontend/assets/lang/en.json
index 7342d2a..7a50884 100644
--- a/dash-frontend/assets/lang/en.json
+++ b/dash-frontend/assets/lang/en.json
@@ -113,6 +113,7 @@
"VOLUME": "Volume"
},
"CLOSE_WINDOW": "Close window",
+ "DISPLAY_BRIGHTNESS": "Display brightness",
"FAILED_TO_LAUNCH_APPLICATION": "Failed to launch a application:",
"GAME_LAUNCHED": "Game launched",
"GAME_LIST": {
diff --git a/dash-frontend/assets/lang/es.json b/dash-frontend/assets/lang/es.json
index 06ee798..a5278e4 100644
--- a/dash-frontend/assets/lang/es.json
+++ b/dash-frontend/assets/lang/es.json
@@ -144,5 +144,6 @@
},
"AUTOSTART": "Ejecutar automáticamente al inicio",
"LAUNCH": "Iniciar"
- }
+ },
+ "DISPLAY_BRIGHTNESS": "Brillo de la pantalla"
}
\ No newline at end of file
diff --git a/dash-frontend/assets/lang/ja.json b/dash-frontend/assets/lang/ja.json
index b9e381f..c854e82 100644
--- a/dash-frontend/assets/lang/ja.json
+++ b/dash-frontend/assets/lang/ja.json
@@ -144,5 +144,6 @@
},
"AUTOSTART": "起動時に自動実行",
"LAUNCH": "起動"
- }
+ },
+ "DISPLAY_BRIGHTNESS": "ディスプレイの明るさ"
}
\ No newline at end of file
diff --git a/dash-frontend/assets/lang/pl.json b/dash-frontend/assets/lang/pl.json
index 7f48b75..ba29a10 100644
--- a/dash-frontend/assets/lang/pl.json
+++ b/dash-frontend/assets/lang/pl.json
@@ -1,148 +1,149 @@
{
- "ACTIONS": {
- "RECENTER_PLAYSPACE": "Wycentruj przestrzeń"
- },
- "APP_SETTINGS": {
- "HIDE_USERNAME": "Ukryj nazwę użytkownika",
- "OPAQUE_BACKGROUND": "Nieprzezroczyste tło",
- "WLX": {},
- "LOOK_AND_FEEL": "Wygląd i działanie",
- "HIDE_GRAB_HELP": "Ukryj pomoc dotyczącą chwytania",
- "ANIMATION_SPEED": "Prędkość animacji UI",
- "ROUND_MULTIPLIER": "Zaokrąglenie krawędzi UI",
- "USE_SKYBOX": "Włącz niebo",
- "USE_PASSTHROUGH": "Włącz passthrough",
- "CLOCK_12H": "Zegar 12-godzinny",
- "FEATURES": "Funkcje",
- "NOTIFICATIONS_ENABLED": "Włącz powiadomienia",
- "NOTIFICATIONS_SOUND_ENABLED": "Dźwięki powiadomień",
- "KEYBOARD_SOUND_ENABLED": "Dźwięki klawiatury",
- "SPACE_DRAG_MULTIPLIER": "Mnożnik przesuwania przestrzeni",
- "SPACE_DRAG_UNLOCKED": "Pozwól na przesuwanie przestrzeni na wszystkich osiach",
- "SPACE_ROTATE_UNLOCKED": "Pozwól na rotację przestrzeni na wszystkich osiach",
- "BLOCK_GAME_INPUT": "Blokuj input z gry",
- "BLOCK_GAME_INPUT_IGNORE_WATCH": "Nie blokuj inputu gry, gdy zegarek jest używany",
- "CONTROLS": "Sterowanie",
- "FOCUS_FOLLOWS_MOUSE_MODE": "Ruch myszą po dotknięciu spustu",
- "LEFT_HANDED_MOUSE": "Myszka dla leworęcznych",
- "ALLOW_SLIDING": "Interakcja z drążkami podczas chwytania",
- "INVERT_SCROLL_DIRECTION_X": "Odwróć kierunek przewijania w poziomie",
- "INVERT_SCROLL_DIRECTION_Y": "Odwróć kierunek przewijania w pionie",
- "SCROLL_SPEED": "Prędkość przewijania",
- "LONG_PRESS_DURATION": "Czas długiego przytrzymania",
- "POINTER_LERP_FACTOR": "Wygładzanie wskaźnika",
- "XR_CLICK_SENSITIVITY": "Czułość kliknięć XR",
- "XR_CLICK_SENSITIVITY_RELEASE": "Czułość zwalniania XR",
- "CLICK_FREEZE_TIME_MS": "Czas zamrożenia po kliknięciu (ms)",
- "MISC": "Różne",
- "XWAYLAND_BY_DEFAULT": "Uruchamiaj aplikacje domyślnie w trybie kompatybilności",
- "UPRIGHT_SCREEN_FIX": "Naprawa pozycji ekranu",
- "DOUBLE_CURSOR_FIX": "Naprawa podwójnego kursora",
- "SCREEN_RENDER_DOWN": "Renderuj ekran w niższej rozdzielczości",
- "UPRIGHT_SCREEN_FIX_HELP": "Naprawia pionowe ekrany na niektórych komputerach",
- "DOUBLE_CURSOR_FIX_HELP": "Włącz to, jeśli widzisz 2 kursory",
- "XR_CLICK_SENSITIVITY_HELP": "Czułość analogowego spustu",
- "XR_CLICK_SENSITIVITY_RELEASE_HELP": "Musi być niższa niż kliknięcie",
- "CLICK_FREEZE_TIME_MS_HELP": "Pomaga w precyzji podwójnego kliknięcia",
- "LEFT_HANDED_MOUSE_HELP": "Użyj tego, jeśli przyciski myszy są zamienione",
- "BLOCK_GAME_INPUT_HELP": "Blokuje wszystkie dane wejściowe, gdy kursor najedzie na nakładkę",
- "BLOCK_GAME_INPUT_IGNORE_WATCH_HELP": "Nie blokuj inputu, gdy wskaźnik jest najedzony",
- "USE_SKYBOX_HELP": "Wyświetlaj niebo, jeśli nie ma aplikacji sceny lub passthrough",
- "USE_PASSTHROUGH_HELP": "Pozwól na passthrough, jeśli runtime XR to obsługuje",
- "SCREEN_RENDER_DOWN_HELP": "Pomaga redukować aliasing na ekranach o wysokiej rozdzielczości",
- "SETS_ON_WATCH": "Lista zestawów na zegarku",
- "TROUBLESHOOTING": "Rozwiązywanie problemów",
- "CLEAR_SAVED_STATE": "Wyczyść zapisany stan",
- "CLEAR_PIPEWIRE_TOKENS": "Wyczyść tokeny PipeWire",
- "DELETE_ALL_CONFIGS": "Wyczyść konfigurację",
- "RESTART_SOFTWARE": "Uruchom ponownie oprogramowanie",
- "CLEAR_SAVED_STATE_HELP": "Zresetuj zestawy i pozycje nakładek",
- "CLEAR_PIPEWIRE_TOKENS_HELP": "Zapytaj o wybór ekranu przy następnym uruchomieniu",
- "DELETE_ALL_CONFIGS_HELP": "Usuń wszystkie pliki konfiguracyjne z katalogu conf.d",
- "RESTART_SOFTWARE_HELP": "Zastosuj ustawienia wymagające ponownego uruchomienia",
- "CAPTURE_METHOD": "Przechwytywanie ekranu Wayland",
- "CAPTURE_METHOD_HELP": "Spróbuj zmienić tę opcję, jeśli masz\nproblemy z czarnym lub migoczącym ekranem",
- "KEYBOARD_MIDDLE_CLICK": "Środkowy przycisk myszy na klawiaturze",
- "KEYBOARD_MIDDLE_CLICK_HELP": "Modyfikator, który ma zostać użyty podczas pisania\nfioletową wiązką lasera",
- "OPTION": {
- "PIPEWIRE_HELP": "Szybkie przechwytywanie GPU. Zalecane",
- "PW_FALLBACK_HELP": "Wolno. Wypróbuj w przypadku, gdy PipeWire GPU nie działa.",
- "SCREENCOPY_HELP": "Wolne. Działa na: Hyprland, Niri, River, Sway"
- }
- },
- "APPLICATION_LAUNCHER": "Uruchamiacz aplikacji",
- "APPLICATIONS": "Aplikacje",
- "AUDIO": {
- "AUTO_SWITCH_TO_VR_AUDIO": "Automatyczne przełączanie na dźwięk VR",
- "CARDS": "Karty",
- "FAILED_TO_SWITCH_MICROPHONE": "Nie udało się przełączyć mikrofon",
- "MICROPHONE_SET_SUCCESSFULLY": "Mikrofon ustawiono pomyślnie",
- "MICROPHONES": "Mikrofony",
- "NO_VR_MICROPHONE_SWITCH_MANUALLY": "Brak mikrofonu VR. Włącz go ręcznie.",
- "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "Brak głośników VR. Włącz je ręcznie.",
- "SELECT_AUDIO_CARD_PROFILE": "Wybierz profil karty dźwiękowej",
- "SETTINGS": "Ustawienia dźwięku",
- "SPEAKERS": "Głośniki",
- "SPEAKERS_SET_SUCCESSFULLY": "Głośniki ustawiono pomyślnie",
- "VOLUME": "Głośność"
- },
- "GAMES": "Gry",
- "GENERAL_SETTINGS": "Ustawienia ogólne",
- "HEIGHT": "Wysokość",
- "HELLO": "Witaj!",
- "HELLO_USER": "Witaj, {USER}!",
- "HIDE": "Ukryj",
- "HOME_SCREEN": "Ekran główny",
- "LIST_OF_PROCESSES": "Lista procesów",
- "MONADO_RUNTIME": "Środowisko Monado",
- "POPUP_ADD_DISPLAY": {
- "RESOLUTION": "Rozdzielczość"
- },
- "REMOVE": "Usuń",
- "SETTINGS": "Ustawienia",
- "SHOW": "Pokaż",
- "WIDTH": "Szerokość",
- "PROCESSES": "Procesy",
- "PROCESS_LIST": {
- "NO_PROCESSES_FOUND": "Nie znaleziono procesów",
- "LOCATED_ON": "na",
- "TERMINATE_PROCESS_NAMED_X": "Zakończ proces \"{PROCESS_NAME}\""
- },
- "FAILED_TO_LAUNCH_APPLICATION": "Nie udało się uruchomić aplikacji:",
- "NO_WINDOWS_FOUND": "Nie znaleziono okien",
- "WINDOW_OPTIONS": "Opcje okna",
- "APPLICATION_STARTED": "Aplikacja uruchomiona",
- "LIST_OF_WINDOWS": "Lista okien",
- "CLOSE_WINDOW": "Zamknij okno",
- "GAME_LIST": {
- "NO_GAMES_FOUND": "Nie znaleziono gier"
- },
- "TERMINATE_PROCESS": "Zakończ proces",
- "GAME_LAUNCHED": "Gra uruchomiona",
- "APP_LAUNCHER": {
- "MODE": {
- "NATIVE": "Tryb natywny",
- "CAGE": "Tryb kompatybilności (Cage)"
- },
- "RES_TITLE": "Rozdzielczość",
- "ASPECT_TITLE": "Proporcje",
- "ASPECT": {
- "WIDE": "Szeroki",
- "SEMI_WIDE": "Półszeroki",
- "SQUARE": "Kwadrat",
- "SEMI_TALL": "Pół-wysoki",
- "TALL": "Wysoki"
- },
- "POS_TITLE": "Pozycjonowanie",
- "POS": {
- "FLOATING": "Pływający",
- "ANCHORED": "Przymocowane",
- "STATIC": "Statyczny",
- "FLOATING_HELP": "Porusza się niezależnie, wycentrowuje się po otwarciu.",
- "ANCHORED_HELP": "Pozostaje nieruchoma względem centralnego znacznika.",
- "STATIC_HELP": "Nie należy do żadnego zestawu. Nie wyśrodkowuje."
- },
- "AUTOSTART": "Uruchom automatycznie przy starcie",
- "LAUNCH": "Uruchom"
- }
-}
+ "ACTIONS": {
+ "RECENTER_PLAYSPACE": "Wycentruj przestrzeń"
+ },
+ "APP_SETTINGS": {
+ "HIDE_USERNAME": "Ukryj nazwę użytkownika",
+ "OPAQUE_BACKGROUND": "Nieprzezroczyste tło",
+ "WLX": {},
+ "LOOK_AND_FEEL": "Wygląd i działanie",
+ "HIDE_GRAB_HELP": "Ukryj pomoc dotyczącą chwytania",
+ "ANIMATION_SPEED": "Prędkość animacji UI",
+ "ROUND_MULTIPLIER": "Zaokrąglenie krawędzi UI",
+ "USE_SKYBOX": "Włącz niebo",
+ "USE_PASSTHROUGH": "Włącz passthrough",
+ "CLOCK_12H": "Zegar 12-godzinny",
+ "FEATURES": "Funkcje",
+ "NOTIFICATIONS_ENABLED": "Włącz powiadomienia",
+ "NOTIFICATIONS_SOUND_ENABLED": "Dźwięki powiadomień",
+ "KEYBOARD_SOUND_ENABLED": "Dźwięki klawiatury",
+ "SPACE_DRAG_MULTIPLIER": "Mnożnik przesuwania przestrzeni",
+ "SPACE_DRAG_UNLOCKED": "Pozwól na przesuwanie przestrzeni na wszystkich osiach",
+ "SPACE_ROTATE_UNLOCKED": "Pozwól na rotację przestrzeni na wszystkich osiach",
+ "BLOCK_GAME_INPUT": "Blokuj input z gry",
+ "BLOCK_GAME_INPUT_IGNORE_WATCH": "Nie blokuj inputu gry, gdy zegarek jest używany",
+ "CONTROLS": "Sterowanie",
+ "FOCUS_FOLLOWS_MOUSE_MODE": "Ruch myszą po dotknięciu spustu",
+ "LEFT_HANDED_MOUSE": "Myszka dla leworęcznych",
+ "ALLOW_SLIDING": "Interakcja z drążkami podczas chwytania",
+ "INVERT_SCROLL_DIRECTION_X": "Odwróć kierunek przewijania w poziomie",
+ "INVERT_SCROLL_DIRECTION_Y": "Odwróć kierunek przewijania w pionie",
+ "SCROLL_SPEED": "Prędkość przewijania",
+ "LONG_PRESS_DURATION": "Czas długiego przytrzymania",
+ "POINTER_LERP_FACTOR": "Wygładzanie wskaźnika",
+ "XR_CLICK_SENSITIVITY": "Czułość kliknięć XR",
+ "XR_CLICK_SENSITIVITY_RELEASE": "Czułość zwalniania XR",
+ "CLICK_FREEZE_TIME_MS": "Czas zamrożenia po kliknięciu (ms)",
+ "MISC": "Różne",
+ "XWAYLAND_BY_DEFAULT": "Uruchamiaj aplikacje domyślnie w trybie kompatybilności",
+ "UPRIGHT_SCREEN_FIX": "Naprawa pozycji ekranu",
+ "DOUBLE_CURSOR_FIX": "Naprawa podwójnego kursora",
+ "SCREEN_RENDER_DOWN": "Renderuj ekran w niższej rozdzielczości",
+ "UPRIGHT_SCREEN_FIX_HELP": "Naprawia pionowe ekrany na niektórych komputerach",
+ "DOUBLE_CURSOR_FIX_HELP": "Włącz to, jeśli widzisz 2 kursory",
+ "XR_CLICK_SENSITIVITY_HELP": "Czułość analogowego spustu",
+ "XR_CLICK_SENSITIVITY_RELEASE_HELP": "Musi być niższa niż kliknięcie",
+ "CLICK_FREEZE_TIME_MS_HELP": "Pomaga w precyzji podwójnego kliknięcia",
+ "LEFT_HANDED_MOUSE_HELP": "Użyj tego, jeśli przyciski myszy są zamienione",
+ "BLOCK_GAME_INPUT_HELP": "Blokuje wszystkie dane wejściowe, gdy kursor najedzie na nakładkę",
+ "BLOCK_GAME_INPUT_IGNORE_WATCH_HELP": "Nie blokuj inputu, gdy wskaźnik jest najedzony",
+ "USE_SKYBOX_HELP": "Wyświetlaj niebo, jeśli nie ma aplikacji sceny lub passthrough",
+ "USE_PASSTHROUGH_HELP": "Pozwól na passthrough, jeśli runtime XR to obsługuje",
+ "SCREEN_RENDER_DOWN_HELP": "Pomaga redukować aliasing na ekranach o wysokiej rozdzielczości",
+ "SETS_ON_WATCH": "Lista zestawów na zegarku",
+ "TROUBLESHOOTING": "Rozwiązywanie problemów",
+ "CLEAR_SAVED_STATE": "Wyczyść zapisany stan",
+ "CLEAR_PIPEWIRE_TOKENS": "Wyczyść tokeny PipeWire",
+ "DELETE_ALL_CONFIGS": "Wyczyść konfigurację",
+ "RESTART_SOFTWARE": "Uruchom ponownie oprogramowanie",
+ "CLEAR_SAVED_STATE_HELP": "Zresetuj zestawy i pozycje nakładek",
+ "CLEAR_PIPEWIRE_TOKENS_HELP": "Zapytaj o wybór ekranu przy następnym uruchomieniu",
+ "DELETE_ALL_CONFIGS_HELP": "Usuń wszystkie pliki konfiguracyjne z katalogu conf.d",
+ "RESTART_SOFTWARE_HELP": "Zastosuj ustawienia wymagające ponownego uruchomienia",
+ "CAPTURE_METHOD": "Przechwytywanie ekranu Wayland",
+ "CAPTURE_METHOD_HELP": "Spróbuj zmienić tę opcję, jeśli masz\nproblemy z czarnym lub migoczącym ekranem",
+ "KEYBOARD_MIDDLE_CLICK": "Środkowy przycisk myszy na klawiaturze",
+ "KEYBOARD_MIDDLE_CLICK_HELP": "Modyfikator, który ma zostać użyty podczas pisania\nfioletową wiązką lasera",
+ "OPTION": {
+ "PIPEWIRE_HELP": "Szybkie przechwytywanie GPU. Zalecane",
+ "PW_FALLBACK_HELP": "Wolno. Wypróbuj w przypadku, gdy PipeWire GPU nie działa.",
+ "SCREENCOPY_HELP": "Wolne. Działa na: Hyprland, Niri, River, Sway"
+ }
+ },
+ "APPLICATION_LAUNCHER": "Uruchamiacz aplikacji",
+ "APPLICATIONS": "Aplikacje",
+ "AUDIO": {
+ "AUTO_SWITCH_TO_VR_AUDIO": "Automatyczne przełączanie na dźwięk VR",
+ "CARDS": "Karty",
+ "FAILED_TO_SWITCH_MICROPHONE": "Nie udało się przełączyć mikrofon",
+ "MICROPHONE_SET_SUCCESSFULLY": "Mikrofon ustawiono pomyślnie",
+ "MICROPHONES": "Mikrofony",
+ "NO_VR_MICROPHONE_SWITCH_MANUALLY": "Brak mikrofonu VR. Włącz go ręcznie.",
+ "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "Brak głośników VR. Włącz je ręcznie.",
+ "SELECT_AUDIO_CARD_PROFILE": "Wybierz profil karty dźwiękowej",
+ "SETTINGS": "Ustawienia dźwięku",
+ "SPEAKERS": "Głośniki",
+ "SPEAKERS_SET_SUCCESSFULLY": "Głośniki ustawiono pomyślnie",
+ "VOLUME": "Głośność"
+ },
+ "GAMES": "Gry",
+ "GENERAL_SETTINGS": "Ustawienia ogólne",
+ "HEIGHT": "Wysokość",
+ "HELLO": "Witaj!",
+ "HELLO_USER": "Witaj, {USER}!",
+ "HIDE": "Ukryj",
+ "HOME_SCREEN": "Ekran główny",
+ "LIST_OF_PROCESSES": "Lista procesów",
+ "MONADO_RUNTIME": "Środowisko Monado",
+ "POPUP_ADD_DISPLAY": {
+ "RESOLUTION": "Rozdzielczość"
+ },
+ "REMOVE": "Usuń",
+ "SETTINGS": "Ustawienia",
+ "SHOW": "Pokaż",
+ "WIDTH": "Szerokość",
+ "PROCESSES": "Procesy",
+ "PROCESS_LIST": {
+ "NO_PROCESSES_FOUND": "Nie znaleziono procesów",
+ "LOCATED_ON": "na",
+ "TERMINATE_PROCESS_NAMED_X": "Zakończ proces \"{PROCESS_NAME}\""
+ },
+ "FAILED_TO_LAUNCH_APPLICATION": "Nie udało się uruchomić aplikacji:",
+ "NO_WINDOWS_FOUND": "Nie znaleziono okien",
+ "WINDOW_OPTIONS": "Opcje okna",
+ "APPLICATION_STARTED": "Aplikacja uruchomiona",
+ "LIST_OF_WINDOWS": "Lista okien",
+ "CLOSE_WINDOW": "Zamknij okno",
+ "GAME_LIST": {
+ "NO_GAMES_FOUND": "Nie znaleziono gier"
+ },
+ "TERMINATE_PROCESS": "Zakończ proces",
+ "GAME_LAUNCHED": "Gra uruchomiona",
+ "APP_LAUNCHER": {
+ "MODE": {
+ "NATIVE": "Tryb natywny",
+ "CAGE": "Tryb kompatybilności (Cage)"
+ },
+ "RES_TITLE": "Rozdzielczość",
+ "ASPECT_TITLE": "Proporcje",
+ "ASPECT": {
+ "WIDE": "Szeroki",
+ "SEMI_WIDE": "Półszeroki",
+ "SQUARE": "Kwadrat",
+ "SEMI_TALL": "Pół-wysoki",
+ "TALL": "Wysoki"
+ },
+ "POS_TITLE": "Pozycjonowanie",
+ "POS": {
+ "FLOATING": "Pływający",
+ "ANCHORED": "Przymocowane",
+ "STATIC": "Statyczny",
+ "FLOATING_HELP": "Porusza się niezależnie, wycentrowuje się po otwarciu.",
+ "ANCHORED_HELP": "Pozostaje nieruchoma względem centralnego znacznika.",
+ "STATIC_HELP": "Nie należy do żadnego zestawu. Nie wyśrodkowuje."
+ },
+ "AUTOSTART": "Uruchom automatycznie przy starcie",
+ "LAUNCH": "Uruchom"
+ },
+ "DISPLAY_BRIGHTNESS": "Jasność wyświetlacza"
+}
\ No newline at end of file
diff --git a/dash-frontend/src/tab/monado.rs b/dash-frontend/src/tab/monado.rs
index 8540ee6..30abf19 100644
--- a/dash-frontend/src/tab/monado.rs
+++ b/dash-frontend/src/tab/monado.rs
@@ -2,7 +2,7 @@ use std::{collections::HashMap, marker::PhantomData, rc::Rc};
use wgui::{
assets::AssetPath,
- components::checkbox::ComponentCheckbox,
+ components::{checkbox::ComponentCheckbox, slider::ComponentSlider},
globals::WguiGlobals,
layout::WidgetID,
parser::{self, Fetchable, ParseDocumentParams, ParserState},
@@ -19,6 +19,7 @@ use crate::{
enum Task {
Refresh,
FocusClient(String),
+ SetBrightness(f32),
}
pub struct TabMonado {
@@ -46,6 +47,7 @@ impl Tab for TabMonado {
match task {
Task::Refresh => self.refresh(frontend, data)?,
Task::FocusClient(name) => self.focus_client(frontend, data, name)?,
+ Task::SetBrightness(brightness) => self.set_brightness(frontend, data, brightness),
}
}
@@ -152,6 +154,22 @@ impl TabMonado {
self.mount_client(frontend, &client)?;
}
+ // get brightness
+ let slider_brightness = self.state.fetch_component_as::("slider_brightness")?;
+ if let Some(brightness) = frontend.interface.monado_brightness_get(data) {
+ let mut c = frontend.layout.start_common();
+ slider_brightness.set_value(&mut c.common(), brightness * 100.0);
+ c.finish()?;
+
+ slider_brightness.on_value_changed({
+ let tasks = self.tasks.clone();
+ Box::new(move |_common, e| {
+ tasks.push(Task::SetBrightness(e.value / 100.0));
+ Ok(())
+ })
+ });
+ }
+
Ok(())
}
@@ -160,4 +178,8 @@ impl TabMonado {
self.tasks.push(Task::Refresh);
Ok(())
}
+
+ fn set_brightness(&mut self, frontend: &mut Frontend, data: &mut T, brightness: f32) {
+ frontend.interface.monado_brightness_set(data, brightness);
+ }
}
diff --git a/wlx-common/src/dash_interface.rs b/wlx-common/src/dash_interface.rs
index 1c47efd..1fd6fb1 100644
--- a/wlx-common/src/dash_interface.rs
+++ b/wlx-common/src/dash_interface.rs
@@ -31,6 +31,8 @@ pub trait DashInterface {
fn process_terminate(&mut self, data: &mut T, handle: WvrProcessHandle) -> anyhow::Result<()>;
fn monado_client_list(&mut self, data: &mut T) -> anyhow::Result>;
fn monado_client_focus(&mut self, data: &mut T, name: &str) -> anyhow::Result<()>;
+ fn monado_brightness_get(&mut self, data: &mut T) -> Option;
+ fn monado_brightness_set(&mut self, data: &mut T, brightness: f32) -> Option<()>;
fn recenter_playspace(&mut self, data: &mut T) -> anyhow::Result<()>;
fn desktop_finder<'a>(&'a mut self, data: &'a mut T) -> &'a mut DesktopFinder;
fn general_config<'a>(&'a mut self, data: &'a mut T) -> &'a mut GeneralConfig;
diff --git a/wlx-common/src/dash_interface_emulated.rs b/wlx-common/src/dash_interface_emulated.rs
index d521663..abc74f5 100644
--- a/wlx-common/src/dash_interface_emulated.rs
+++ b/wlx-common/src/dash_interface_emulated.rs
@@ -62,6 +62,7 @@ pub struct DashInterfaceEmulated {
desktop_finder: DesktopFinder,
general_config: GeneralConfig,
monado_clients: Vec,
+ brightness: f32,
}
impl DashInterfaceEmulated {
@@ -119,6 +120,7 @@ impl DashInterfaceEmulated {
desktop_finder,
general_config,
monado_clients,
+ brightness: 1.0,
}
}
}
@@ -243,4 +245,13 @@ impl DashInterface<()> for DashInterfaceEmulated {
}
Ok(())
}
+
+ fn monado_brightness_get(&mut self, _: &mut ()) -> Option {
+ Some(self.brightness)
+ }
+
+ fn monado_brightness_set(&mut self, _: &mut (), brightness: f32) -> Option<()> {
+ self.brightness = brightness;
+ Some(())
+ }
}
diff --git a/wlx-overlay-s/Cargo.toml b/wlx-overlay-s/Cargo.toml
index ca36f99..6052181 100644
--- a/wlx-overlay-s/Cargo.toml
+++ b/wlx-overlay-s/Cargo.toml
@@ -57,7 +57,7 @@ interprocess = { version = "2.2.3" }
json = { version = "0.12.4", optional = true }
json5 = "1.3.0"
libc = "0.2.178"
-libmonado = { version = "1.3.2", optional = true }
+libmonado = { git = "https://github.com/technobaboo/libmonado-rs.git", rev = "26292e5b14663ee2f089f66f0851438a0c00ee67", optional = true }
log-panics = { version = "2.1.0", features = ["with-backtrace"] }
mint = "0.5.9"
openxr = { git = "https://github.com/Ralith/openxrs", rev = "d0afdd3365bc1e14de28f6a3a21f457e788a702e", features = [
diff --git a/wlx-overlay-s/src/overlays/dashboard.rs b/wlx-overlay-s/src/overlays/dashboard.rs
index 6d7a1b2..8033643 100644
--- a/wlx-overlay-s/src/overlays/dashboard.rs
+++ b/wlx-overlay-s/src/overlays/dashboard.rs
@@ -487,10 +487,37 @@ impl DashInterface for DashInterfaceLive {
app.monado_init();
Ok(())
}
+
+ fn monado_brightness_get(&mut self, app: &mut AppState) -> Option {
+ let Some(monado) = &mut app.monado else {
+ return None;
+ };
+
+ monado_get_brightness(monado)
+ }
+
+ fn monado_brightness_set(&mut self, app: &mut AppState, brightness: f32) -> Option<()> {
+ let Some(monado) = &mut app.monado else {
+ return None;
+ };
+
+ monado_set_brightness(monado, brightness).ok()
+ }
}
const CLIENT_NAME_BLACKLIST: [&str; 2] = ["wlx-overlay-s", "libmonado"];
+fn monado_get_brightness(monado: &mut libmonado::Monado) -> Option {
+ let device = monado.device_from_role(libmonado::DeviceRole::Head).ok()?;
+ device.brightness().ok()
+}
+
+fn monado_set_brightness(monado: &mut libmonado::Monado, brightness: f32) -> anyhow::Result<()> {
+ let device = monado.device_from_role(libmonado::DeviceRole::Head)?;
+ device.set_brightness(brightness, false)?;
+ Ok(())
+}
+
fn monado_list_clients_filtered(
monado: &mut libmonado::Monado,
) -> anyhow::Result>> {