symbol: Eliminate in favor of Action

This commit is contained in:
Dorota Czaplejewicz
2019-10-09 08:06:17 +00:00
parent 46d3312c86
commit ef38fd3e64
4 changed files with 33 additions and 49 deletions

View File

@ -319,7 +319,7 @@ impl Layout {
pressed: false, pressed: false,
locked: false, locked: false,
keycode: keycodes.get(*name).map(|k| *k), keycode: keycodes.get(*name).map(|k| *k),
symbol: create_symbol( action: create_action(
&self.buttons, &self.buttons,
name, name,
self.views.keys().collect() self.views.keys().collect()
@ -380,11 +380,11 @@ impl Layout {
} }
} }
fn create_symbol( fn create_action(
button_info: &HashMap<String, ButtonMeta>, button_info: &HashMap<String, ButtonMeta>,
name: &str, name: &str,
view_names: Vec<&String>, view_names: Vec<&String>,
) -> ::symbol::Symbol { ) -> ::symbol::Action {
let default_meta = ButtonMeta::default(); let default_meta = ButtonMeta::default();
let symbol_meta = button_info.get(name) let symbol_meta = button_info.get(name)
.unwrap_or(&default_meta); .unwrap_or(&default_meta);
@ -440,13 +440,12 @@ fn create_symbol(
}; };
match &symbol_meta.action { match &symbol_meta.action {
Some(Action::SetView(view_name)) => ::symbol::Symbol { Some(Action::SetView(view_name)) => ::symbol::Action::SetLevel(
action: ::symbol::Action::SetLevel(
filter_view_name(name, view_name.clone(), &view_names) filter_view_name(name, view_name.clone(), &view_names)
), ),
}, Some(Action::Locking {
Some(Action::Locking { lock_view, unlock_view }) => ::symbol::Symbol { lock_view, unlock_view
action: ::symbol::Action::LockLevel { }) => ::symbol::Action::LockLevel {
lock: filter_view_name(name, lock_view.clone(), &view_names), lock: filter_view_name(name, lock_view.clone(), &view_names),
unlock: filter_view_name( unlock: filter_view_name(
name, name,
@ -454,21 +453,16 @@ fn create_symbol(
&view_names &view_names
), ),
}, },
}, Some(Action::ShowPrefs) => ::symbol::Action::Submit {
Some(Action::ShowPrefs) => ::symbol::Symbol {
action: ::symbol::Action::Submit {
text: None, text: None,
keys: Vec::new(), keys: Vec::new(),
}, },
}, None => ::symbol::Action::Submit {
None => ::symbol::Symbol {
action: ::symbol::Action::Submit {
text: None, text: None,
keys: vec!( keys: vec!(
::symbol::KeySym(keysym.unwrap()), ::symbol::KeySym(keysym.unwrap()),
), ),
}, },
},
} }
} }
@ -674,7 +668,7 @@ mod tests {
#[test] #[test]
fn test_key_unicode() { fn test_key_unicode() {
assert_eq!( assert_eq!(
create_symbol( create_action(
&hashmap!{ &hashmap!{
".".into() => ButtonMeta { ".".into() => ButtonMeta {
icon: None, icon: None,
@ -687,11 +681,9 @@ mod tests {
".", ".",
Vec::new() Vec::new()
), ),
::symbol::Symbol { ::symbol::Action::Submit {
action: ::symbol::Action::Submit {
text: None, text: None,
keys: vec!(::symbol::KeySym("U002E".into())), keys: vec!(::symbol::KeySym("U002E".into())),
},
} }
); );
} }

View File

@ -7,7 +7,7 @@ use std::io;
use std::rc::Rc; use std::rc::Rc;
use std::string::FromUtf8Error; use std::string::FromUtf8Error;
use ::symbol::{ Symbol, Action }; use ::symbol::Action;
use std::io::Write; use std::io::Write;
use std::iter::{ FromIterator, IntoIterator }; use std::iter::{ FromIterator, IntoIterator };
@ -73,7 +73,8 @@ pub struct KeyState {
pub pressed: bool, pub pressed: bool,
pub locked: bool, pub locked: bool,
pub keycode: Option<u32>, pub keycode: Option<u32>,
pub symbol: Symbol, /// Static description of what the key does when pressed or released
pub action: Action,
} }
/// Generates a mapping where each key gets a keycode, starting from 8 /// Generates a mapping where each key gets a keycode, starting from 8
@ -124,7 +125,7 @@ pub fn generate_keymap(
for (name, state) in keystates.iter() { for (name, state) in keystates.iter() {
let state = state.borrow(); let state = state.borrow();
if let ::symbol::Action::Submit { text: _, keys } = &state.symbol.action { if let ::symbol::Action::Submit { text: _, keys } = &state.action {
match keys.len() { match keys.len() {
0 => eprintln!("Key {} has no keysyms", name), 0 => eprintln!("Key {} has no keysyms", name),
a => { a => {
@ -156,7 +157,7 @@ pub fn generate_keymap(
)?; )?;
for (name, state) in keystates.iter() { for (name, state) in keystates.iter() {
if let ::symbol::Action::Submit { text: _, keys } = &state.borrow().symbol.action { if let ::symbol::Action::Submit { text: _, keys } = &state.borrow().action {
if let Some(keysym) = keys.iter().next() { if let Some(keysym) = keys.iter().next() {
write!( write!(
buf, buf,

View File

@ -268,7 +268,7 @@ pub mod c {
) { ) {
let layout = unsafe { &mut *layout }; let layout = unsafe { &mut *layout };
let view_name = match key.to_owned().symbol.action { let view_name = match key.to_owned().action {
::symbol::Action::SetLevel(name) => { ::symbol::Action::SetLevel(name) => {
Some(name.clone()) Some(name.clone())
}, },
@ -485,9 +485,7 @@ pub mod c {
pressed: false, pressed: false,
locked: false, locked: false,
keycode: None, keycode: None,
symbol: Symbol {
action: Action::SetLevel("default".into()), action: Action::SetLevel("default".into()),
}
})) }))
} }

View File

@ -37,10 +37,3 @@ pub enum Action {
keys: Vec<KeySym>, keys: Vec<KeySym>,
}, },
} }
/// Contains a static description of a particular key's actions
#[derive(Debug, Clone, PartialEq)]
pub struct Symbol {
/// The action that this key performs
pub action: Action,
}