From d74c56fc76669dc94b2b9649f85ee92b4c0f5b17 Mon Sep 17 00:00:00 2001 From: kossLAN Date: Fri, 29 May 2026 19:21:15 -0400 Subject: [PATCH] config: split keymap handling --- src/config/handler.rs | 62 +-------------------------------- src/config/handler/keymaps.rs | 64 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 61 deletions(-) create mode 100644 src/config/handler/keymaps.rs diff --git a/src/config/handler.rs b/src/config/handler.rs index 5ae44880..dea5ceb2 100644 --- a/src/config/handler.rs +++ b/src/config/handler.rs @@ -89,6 +89,7 @@ use { mod dispatch; mod input_devices; +mod keymaps; mod matchers; mod options; mod outputs; @@ -219,10 +220,6 @@ impl ConfigProxyHandler { self.send(&ServerMessage::Response { response: msg }) } - fn id(&self) -> u64 { - self.next_id.fetch_add(1) - } - fn handle_log_request( &self, level: ConfigLogLevel, @@ -251,52 +248,6 @@ impl ConfigProxyHandler { log::log!(level, "{:?}", debug); } - fn handle_parse_keymap(&self, keymap: &str) -> Result<(), CphError> { - let (keymap, res) = match self.state.kb_ctx.parse_keymap(keymap.as_bytes()) { - Ok(keymap) => { - let id = Keymap(self.id()); - self.keymaps.set(id, keymap); - (id, Ok(())) - } - Err(e) => (Keymap::INVALID, Err(CphError::ParseKeymapError(e))), - }; - self.respond(Response::ParseKeymap { keymap }); - res - } - - fn handle_keymap_from_names( - &self, - rules: Option<&str>, - model: Option<&str>, - groups: Option>>, - options: Option>, - ) -> Result<(), CphError> { - let kbvm_groups = groups.map(|groups| { - groups - .iter() - .map(|g| kbvm::xkb::rmlvo::Group { - layout: g.layout, - variant: g.variant, - }) - .collect::>() - }); - let (keymap, res) = match self.state.kb_ctx.keymap_from_names( - rules, - model, - kbvm_groups.as_deref(), - options.as_deref(), - ) { - Ok(keymap) => { - let id = Keymap(self.id()); - self.keymaps.set(id, keymap); - (id, Ok(())) - } - Err(e) => (Keymap::INVALID, Err(CphError::ParseKeymapError(e))), - }; - self.respond(Response::KeymapFromNames { keymap }); - res - } - fn handle_reload(&self) { self.state.reload_config(); } @@ -393,13 +344,6 @@ impl ConfigProxyHandler { } } - fn get_keymap(&self, keymap: Keymap) -> Result, CphError> { - match self.keymaps.get(&keymap) { - Some(k) => Ok(k), - None => Err(CphError::KeymapDoesNotExist(keymap)), - } - } - fn handle_run( &self, prog: &str, @@ -437,10 +381,6 @@ impl ConfigProxyHandler { self.state.backend.get().switch_to(vtnr); } - fn handle_destroy_keymap(&self, keymap: Keymap) { - self.keymaps.remove(&keymap); - } - pub fn auto_focus(&self, data: &ToplevelData) -> bool { for matcher in self.window_matcher_no_auto_focus.lock().values() { if matcher.node.pull(data) { diff --git a/src/config/handler/keymaps.rs b/src/config/handler/keymaps.rs new file mode 100644 index 00000000..2b493466 --- /dev/null +++ b/src/config/handler/keymaps.rs @@ -0,0 +1,64 @@ +use super::*; + +impl ConfigProxyHandler { + fn id(&self) -> u64 { + self.next_id.fetch_add(1) + } + + pub(super) fn handle_parse_keymap(&self, keymap: &str) -> Result<(), CphError> { + let (keymap, res) = match self.state.kb_ctx.parse_keymap(keymap.as_bytes()) { + Ok(keymap) => { + let id = Keymap(self.id()); + self.keymaps.set(id, keymap); + (id, Ok(())) + } + Err(e) => (Keymap::INVALID, Err(CphError::ParseKeymapError(e))), + }; + self.respond(Response::ParseKeymap { keymap }); + res + } + + pub(super) fn handle_keymap_from_names( + &self, + rules: Option<&str>, + model: Option<&str>, + groups: Option>>, + options: Option>, + ) -> Result<(), CphError> { + let kbvm_groups = groups.map(|groups| { + groups + .iter() + .map(|g| kbvm::xkb::rmlvo::Group { + layout: g.layout, + variant: g.variant, + }) + .collect::>() + }); + let (keymap, res) = match self.state.kb_ctx.keymap_from_names( + rules, + model, + kbvm_groups.as_deref(), + options.as_deref(), + ) { + Ok(keymap) => { + let id = Keymap(self.id()); + self.keymaps.set(id, keymap); + (id, Ok(())) + } + Err(e) => (Keymap::INVALID, Err(CphError::ParseKeymapError(e))), + }; + self.respond(Response::KeymapFromNames { keymap }); + res + } + + pub(super) fn get_keymap(&self, keymap: Keymap) -> Result, CphError> { + match self.keymaps.get(&keymap) { + Some(k) => Ok(k), + None => Err(CphError::KeymapDoesNotExist(keymap)), + } + } + + pub(super) fn handle_destroy_keymap(&self, keymap: Keymap) { + self.keymaps.remove(&keymap); + } +}