Skip to content

Commit cc7113d

Browse files
ids1024jackpot51
authored andcommitted
improv: Make members of application::Keyboard private
Adds methods for cases where Picker needs to access them. Still could use improvement.
1 parent b9dffd9 commit cc7113d

File tree

2 files changed

+47
-33
lines changed

2 files changed

+47
-33
lines changed

src/application/keyboard.rs

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ use super::page::Page;
2424
use super::picker::Picker;
2525

2626
pub struct Keyboard {
27-
pub(crate) daemon: Rc<dyn Daemon>,
28-
pub(crate) daemon_board: usize,
29-
pub(crate) keymap: HashMap<String, u16>,
30-
pub(crate) keys: RefCell<Vec<Key>>,
27+
daemon: Rc<dyn Daemon>,
28+
daemon_board: usize,
29+
keymap: HashMap<String, u16>,
30+
keys: RefCell<Vec<Key>>,
3131
page: Cell<Page>,
3232
picker: RefCell<WeakRef<Picker>>,
33-
pub(crate) selected: Cell<Option<usize>>,
33+
selected: Cell<Option<usize>>,
3434
}
3535

3636
impl Keyboard {
@@ -101,6 +101,45 @@ impl Keyboard {
101101
}
102102
}
103103

104+
pub fn selected(&self) -> Option<usize> {
105+
self.selected.get()
106+
}
107+
108+
pub fn has_scancode(&self, scancode_name: &str) -> bool {
109+
self.keymap.contains_key(scancode_name)
110+
}
111+
112+
pub fn keymap_set(&self, picker: &Picker, key_index: usize, layer: usize, scancode_name: &str) {
113+
// XXX avoid reference to Picker
114+
let mut keys = self.keys.borrow_mut();
115+
let k = &mut keys[key_index];
116+
let mut found = false;
117+
if let Some(scancode) = self.keymap.get(scancode_name) {
118+
k.deselect(&picker, layer);
119+
k.scancodes[layer] = (*scancode, scancode_name.to_string());
120+
k.refresh(&picker);
121+
k.select(&picker, layer);
122+
found = true;
123+
}
124+
if !found {
125+
return;
126+
}
127+
println!(
128+
" set {}, {}, {} to {:04X}",
129+
layer, k.electrical.0, k.electrical.1, k.scancodes[layer].0
130+
);
131+
if let Err(err) = self.daemon.keymap_set(
132+
self.daemon_board,
133+
layer as u8,
134+
k.electrical.0,
135+
k.electrical.1,
136+
k.scancodes[layer].0,
137+
) {
138+
eprintln!("Failed to set keymap: {:?}", err);
139+
}
140+
141+
}
142+
104143
pub fn gtk(self: Rc<Self>) -> gtk::Box {
105144
let stack = cascade! {
106145
gtk::Stack::new();

src/application/picker/mod.rs

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -173,33 +173,8 @@ impl Picker {
173173
let layer = kb.layer();
174174

175175
println!("Clicked {} layer {}", name, layer);
176-
if let Some(i) = kb.selected.get() {
177-
let mut keys = kb.keys.borrow_mut();
178-
let k = &mut keys[i];
179-
let mut found = false;
180-
if let Some(scancode) = kb.keymap.get(name.as_str()) {
181-
k.deselect(&picker, layer);
182-
k.scancodes[layer] = (*scancode, name.clone());
183-
k.refresh(&picker);
184-
k.select(&picker, layer);
185-
found = true;
186-
}
187-
if !found {
188-
return;
189-
}
190-
println!(
191-
" set {}, {}, {} to {:04X}",
192-
layer, k.electrical.0, k.electrical.1, k.scancodes[layer].0
193-
);
194-
if let Err(err) = kb.daemon.keymap_set(
195-
kb.daemon_board,
196-
layer as u8,
197-
k.electrical.0,
198-
k.electrical.1,
199-
k.scancodes[layer].0,
200-
) {
201-
eprintln!("Failed to set keymap: {:?}", err);
202-
}
176+
if let Some(i) = kb.selected() {
177+
kb.keymap_set(&picker, i, layer, &name);
203178
}
204179
}));
205180
}
@@ -222,7 +197,7 @@ impl Picker {
222197
for group in self.inner().groups.iter() {
223198
for key in group.iter_keys() {
224199
// Check that scancode is available for the keyboard
225-
let sensitive = kb.keymap.contains_key(key.name.as_str());
200+
let sensitive = kb.has_scancode(&key.name);
226201
key.gtk.set_sensitive(sensitive);
227202
}
228203
}

0 commit comments

Comments
 (0)