diff --git a/wayvr/src/assets/lang/en.json b/wayvr/src/assets/lang/en.json index 47ea1801..f9360b71 100644 --- a/wayvr/src/assets/lang/en.json +++ b/wayvr/src/assets/lang/en.json @@ -127,6 +127,8 @@ "MAXIMUM_SETS_REACHED": "Maximum number of sets reached.", "NO_SET_SELECTED": "No set is selected.", "ONE_CONTROLLER_ON_FLOOR": "Place one controller on the floor!" + "NO_KEYMAPS_CONFIGURED": "No keymaps configured." + "NO_KEYMAPS_CONFIGURED_HELP": "Check the wayvr.org on how to set up your keymaps!" }, "WATCH": { "ADD_NEW_SET": "Add a new set", diff --git a/wayvr/src/overlays/keyboard/builder.rs b/wayvr/src/overlays/keyboard/builder.rs index 52b7b48b..2f288fb4 100644 --- a/wayvr/src/overlays/keyboard/builder.rs +++ b/wayvr/src/overlays/keyboard/builder.rs @@ -109,12 +109,7 @@ pub(super) fn create_keyboard_panel( has_altgr, col, row, - &app.session - .config - .keyboard_layouts - .iter() - .map(|s| s.to_string()) - .collect::>(), + &app.session.config.keyboard_layouts, ) else { let _ = panel.layout.add_child( div.id, diff --git a/wayvr/src/overlays/keyboard/layout.rs b/wayvr/src/overlays/keyboard/layout.rs index 8ccea270..0582cf61 100644 --- a/wayvr/src/overlays/keyboard/layout.rs +++ b/wayvr/src/overlays/keyboard/layout.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, str::FromStr, sync::LazyLock}; +use std::{collections::HashMap, str::FromStr, sync::Arc, sync::LazyLock}; use regex::Regex; use serde::{Deserialize, Serialize}; @@ -66,7 +66,7 @@ impl Layout { has_altgr: bool, col: usize, row: usize, - keyboard_layouts: &[String], + keyboard_layouts: &[Arc], ) -> Option { let key = self.main_layout[row][col].as_ref()?; let mut label = Vec::with_capacity(3); diff --git a/wayvr/src/overlays/keyboard/mod.rs b/wayvr/src/overlays/keyboard/mod.rs index 630ba9aa..d6aa6bd2 100644 --- a/wayvr/src/overlays/keyboard/mod.rs +++ b/wayvr/src/overlays/keyboard/mod.rs @@ -2,9 +2,10 @@ use std::{ cell::Cell, collections::HashMap, process::{Child, Command}, - sync::atomic::Ordering, + sync::{Arc, atomic::Ordering}, }; +use crate::overlays::toast::Toast; use crate::{ KEYMAP_CHANGE, backend::{ @@ -40,7 +41,7 @@ use wgui::{ use wlx_common::windowing::{OverlayWindowState, Positioning}; use wlx_common::{ config::AltModifier, - overlays::{BackendAttrib, BackendAttribValue}, + overlays::{BackendAttrib, BackendAttribValue, ToastTopic}, }; pub mod builder; @@ -75,13 +76,7 @@ pub fn create_keyboard(app: &mut AppState) -> anyhow::Result, + keymap_switch_layouts: Vec>, keymap_switch_index: usize, keymap_switch_pending: bool, } @@ -467,7 +462,7 @@ enum KeyButtonData { release_args: Vec, }, KeymapSwitch { - layouts: Vec, + layouts: Vec>, }, } @@ -518,6 +513,15 @@ fn handle_press( play_key_click(app); } KeyButtonData::KeymapSwitch { layouts } => { + if layouts.is_empty() { + Toast::new( + ToastTopic::System, + "NO_KEYMAPS_CONFIGURED".into(), + "NO_KEYMAPS_CONFIGURED_HELP".into(), + ) + .submit(app); + return; + } keyboard.keymap_switch_index = (keyboard.keymap_switch_index + 1) % layouts.len(); keyboard.keymap_switch_pending = true; play_key_click(app);