keymap: Simplified key state passing

There's no need to treat states as a shared resource before they are placed inside buttons.
This commit is contained in:
Dorota Czaplejewicz
2019-10-09 15:38:21 +00:00
parent 9cd439767e
commit dc2bc46167
3 changed files with 31 additions and 9 deletions

View File

@ -19,6 +19,7 @@ use ::keyboard::{
};
use ::resources;
use ::util::c::as_str;
use ::util::hash_map_map;
use ::xdg;
// traits, derives
@ -346,23 +347,31 @@ impl Layout {
};
(
name.into(),
Rc::new(RefCell::new(KeyState {
KeyState {
pressed: false,
locked: false,
keycodes,
action,
}))
}
)
});
let button_states =
HashMap::<String, Rc<RefCell<KeyState>>>::from_iter(
let button_states
= HashMap::<String, KeyState>::from_iter(
button_states
);
// TODO: generate from symbols
let keymap_str = generate_keymap(&button_states)?;
let button_states_cache = hash_map_map(
button_states,
|name, state| {(
name,
Rc::new(RefCell::new(state))
)}
);
let views = HashMap::from_iter(
self.views.iter().map(|(name, view)| {(
name.clone(),
@ -386,7 +395,7 @@ impl Layout {
&self.buttons,
&self.outlines,
name,
button_states.get(name.into())
button_states_cache.get(name.into())
.expect("Button state not created")
.clone()
))