config: split keymap handling
This commit is contained in:
parent
32ad879a65
commit
d74c56fc76
2 changed files with 65 additions and 61 deletions
|
|
@ -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<Vec<Group<'_>>>,
|
||||
options: Option<Vec<&str>>,
|
||||
) -> Result<(), CphError> {
|
||||
let kbvm_groups = groups.map(|groups| {
|
||||
groups
|
||||
.iter()
|
||||
.map(|g| kbvm::xkb::rmlvo::Group {
|
||||
layout: g.layout,
|
||||
variant: g.variant,
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
});
|
||||
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<Rc<KbvmMap>, 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) {
|
||||
|
|
|
|||
64
src/config/handler/keymaps.rs
Normal file
64
src/config/handler/keymaps.rs
Normal file
|
|
@ -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<Vec<Group<'_>>>,
|
||||
options: Option<Vec<&str>>,
|
||||
) -> Result<(), CphError> {
|
||||
let kbvm_groups = groups.map(|groups| {
|
||||
groups
|
||||
.iter()
|
||||
.map(|g| kbvm::xkb::rmlvo::Group {
|
||||
layout: g.layout,
|
||||
variant: g.variant,
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
});
|
||||
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<Rc<KbvmMap>, 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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue