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 dispatch;
|
||||||
mod input_devices;
|
mod input_devices;
|
||||||
|
mod keymaps;
|
||||||
mod matchers;
|
mod matchers;
|
||||||
mod options;
|
mod options;
|
||||||
mod outputs;
|
mod outputs;
|
||||||
|
|
@ -219,10 +220,6 @@ impl ConfigProxyHandler {
|
||||||
self.send(&ServerMessage::Response { response: msg })
|
self.send(&ServerMessage::Response { response: msg })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn id(&self) -> u64 {
|
|
||||||
self.next_id.fetch_add(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_log_request(
|
fn handle_log_request(
|
||||||
&self,
|
&self,
|
||||||
level: ConfigLogLevel,
|
level: ConfigLogLevel,
|
||||||
|
|
@ -251,52 +248,6 @@ impl ConfigProxyHandler {
|
||||||
log::log!(level, "{:?}", debug);
|
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) {
|
fn handle_reload(&self) {
|
||||||
self.state.reload_config();
|
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(
|
fn handle_run(
|
||||||
&self,
|
&self,
|
||||||
prog: &str,
|
prog: &str,
|
||||||
|
|
@ -437,10 +381,6 @@ impl ConfigProxyHandler {
|
||||||
self.state.backend.get().switch_to(vtnr);
|
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 {
|
pub fn auto_focus(&self, data: &ToplevelData) -> bool {
|
||||||
for matcher in self.window_matcher_no_auto_focus.lock().values() {
|
for matcher in self.window_matcher_no_auto_focus.lock().values() {
|
||||||
if matcher.node.pull(data) {
|
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