diff --git a/client-toolkit/examples/keymap.rs b/client-toolkit/examples/keymap.rs index 1e31b159f9..73ab5fd536 100644 --- a/client-toolkit/examples/keymap.rs +++ b/client-toolkit/examples/keymap.rs @@ -25,6 +25,7 @@ struct AppData { keyboard: Option, keymap_state: KeymapState, keymap: Option, + group: Option, } impl ProvidesRegistryState for AppData { @@ -143,12 +144,13 @@ impl KeyboardHandler for AppData { impl KeymapHandler for AppData { fn group( &mut self, - conn: &Connection, - qh: &QueueHandle, - keyboard: &wl_keyboard::WlKeyboard, - keymap: &zcosmic_keymap_v1::ZcosmicKeymapV1, + _conn: &Connection, + _qh: &QueueHandle, + _keyboard: &wl_keyboard::WlKeyboard, + _keymap: &zcosmic_keymap_v1::ZcosmicKeymapV1, group: u32, ) { + self.group = Some(group); } } @@ -166,15 +168,31 @@ fn main() { keymap_state, keyboard: None, keymap: None, + group: None, }; while app_data.keymap.is_none() { event_queue.blocking_dispatch(&mut app_data).unwrap(); } + let keyboard = app_data.keyboard.as_ref().unwrap(); + let cosmic_keymap = app_data.keymap_state.get_keymap(&keyboard, &qh).unwrap(); + + while app_data.group.is_none() { + event_queue.blocking_dispatch(&mut app_data).unwrap(); + } + let group = app_data.group.unwrap(); + let keymap = app_data.keymap.as_ref().unwrap(); for (n, name) in keymap.layouts().enumerate() { + // Bold active layout + if n as u32 == group { + print!("\x1b[1m"); + } println!("{}: {}", n, name); + if n as u32 == group { + print!("\x1b[22m"); + } } print!("Choose layout: "); @@ -183,8 +201,6 @@ fn main() { io::stdin().read_line(&mut line).unwrap(); let index = u32::from_str(line.trim()).unwrap(); - let keyboard = app_data.keyboard.as_ref().unwrap(); - let cosmic_keymap = app_data.keymap_state.get_keymap(&keyboard, &qh).unwrap(); cosmic_keymap.set_group(index); event_queue.roundtrip(&mut app_data).unwrap(); diff --git a/client-toolkit/src/keymap.rs b/client-toolkit/src/keymap.rs index 7f08f4e9f5..d605661af4 100644 --- a/client-toolkit/src/keymap.rs +++ b/client-toolkit/src/keymap.rs @@ -1,4 +1,4 @@ -use cosmic_protocols::keymap::v1::client::{zcosmic_keymap_v1, zcosmic_keymap_manager_v1}; +use cosmic_protocols::keymap::v1::client::{zcosmic_keymap_manager_v1, zcosmic_keymap_v1}; use sctk::registry::RegistryState; use wayland_client::{protocol::wl_keyboard, Connection, Dispatch, QueueHandle}; @@ -29,13 +29,21 @@ impl KeymapState { Self { keymap_manager } } - pub fn get_keymap(&self, keyboard: &wl_keyboard::WlKeyboard, qh: &QueueHandle) -> Option + pub fn get_keymap( + &self, + keyboard: &wl_keyboard::WlKeyboard, + qh: &QueueHandle, + ) -> Option where D: Dispatch + 'static, { - Some(self.keymap_manager.as_ref()?.get_keymap(keyboard, qh, KeymapUserData { - keyboard: keyboard.clone() - })) + Some(self.keymap_manager.as_ref()?.get_keymap( + keyboard, + qh, + KeymapUserData { + keyboard: keyboard.clone(), + }, + )) } } @@ -44,7 +52,7 @@ where D: Dispatch, { fn event( - state: &mut D, + _: &mut D, _: &zcosmic_keymap_manager_v1::ZcosmicKeymapManagerV1, event: zcosmic_keymap_manager_v1::Event, _: &(),