@@ -22,7 +22,7 @@ use super::picker::Picker;
22
22
use super :: rect:: Rect ;
23
23
24
24
pub struct Keyboard {
25
- daemon_opt : RefCell < Option < Box < dyn Daemon > > > ,
25
+ daemon_opt : Option < Rc < RefCell < dyn Daemon > > > ,
26
26
daemon_board : usize ,
27
27
keymap : HashMap < String , u16 > ,
28
28
keys : RefCell < Vec < Key > > ,
@@ -32,7 +32,7 @@ pub struct Keyboard {
32
32
}
33
33
34
34
impl Keyboard {
35
- pub fn new < P : AsRef < Path > > ( dir : P , daemon_opt : Option < Box < dyn Daemon > > , daemon_board : usize ) -> Rc < Self > {
35
+ pub fn new < P : AsRef < Path > > ( dir : P , daemon_opt : Option < Rc < RefCell < dyn Daemon > > > , daemon_board : usize ) -> Rc < Self > {
36
36
let dir = dir. as_ref ( ) ;
37
37
38
38
let keymap_csv = fs:: read_to_string ( dir. join ( "keymap.csv" ) )
@@ -44,7 +44,7 @@ impl Keyboard {
44
44
Self :: new_data ( & keymap_csv, & layout_csv, & physical_json, daemon_opt, daemon_board)
45
45
}
46
46
47
- pub fn new_board ( board : & str , daemon_opt : Option < Box < dyn Daemon > > , daemon_board : usize ) -> Option < Rc < Self > > {
47
+ pub fn new_board ( board : & str , daemon_opt : Option < Rc < RefCell < dyn Daemon > > > , daemon_board : usize ) -> Option < Rc < Self > > {
48
48
macro_rules! keyboard {
49
49
( $board: expr) => ( if board == $board {
50
50
let keymap_csv = include_str!( concat!( "../../layouts/" , $board, "/keymap.csv" ) ) ;
@@ -68,7 +68,7 @@ impl Keyboard {
68
68
None
69
69
}
70
70
71
- pub fn new_data ( keymap_csv : & str , layout_csv : & str , physical_json : & str , mut daemon_opt : Option < Box < dyn Daemon > > , daemon_board : usize ) -> Rc < Self > {
71
+ fn new_data ( keymap_csv : & str , layout_csv : & str , physical_json : & str , daemon_opt : Option < Rc < RefCell < dyn Daemon > > > , daemon_board : usize ) -> Rc < Self > {
72
72
let mut keymap = HashMap :: new ( ) ;
73
73
let mut scancode_names = HashMap :: new ( ) ;
74
74
scancode_names. insert ( 0 , "NONE" ) ;
@@ -179,7 +179,8 @@ impl Keyboard {
179
179
let mut scancodes = Vec :: new ( ) ;
180
180
for layer in 0 ..2 {
181
181
println ! ( " Layer {}" , layer) ;
182
- let scancode = if let Some ( ref mut daemon) = daemon_opt {
182
+ let scancode = if let Some ( ref daemon) = daemon_opt {
183
+ let mut daemon = daemon. borrow_mut ( ) ;
183
184
match daemon. keymap_get ( daemon_board, layer, electrical. 0 , electrical. 1 ) {
184
185
Ok ( value) => value,
185
186
Err ( err) => {
@@ -237,7 +238,7 @@ impl Keyboard {
237
238
}
238
239
239
240
Rc :: new ( Self {
240
- daemon_opt : RefCell :: new ( daemon_opt ) ,
241
+ daemon_opt,
241
242
daemon_board,
242
243
keymap,
243
244
keys : RefCell :: new ( keys) ,
@@ -350,7 +351,8 @@ button {
350
351
return ;
351
352
}
352
353
println ! ( " set {}, {}, {} to {:04X}" , layer, k. electrical. 0 , k. electrical. 1 , k. scancodes[ layer] . 0 ) ;
353
- if let Some ( ref mut daemon) = * kb. daemon_opt . borrow_mut ( ) {
354
+ if let Some ( ref daemon) = kb. daemon_opt {
355
+ let mut daemon = daemon. borrow_mut ( ) ;
354
356
if let Err ( err) = daemon. keymap_set ( kb. daemon_board , layer as u8 , k. electrical . 0 , k. electrical . 1 , k. scancodes [ layer] . 0 ) {
355
357
eprintln ! ( "Failed to set keymap: {:?}" , err) ;
356
358
}
0 commit comments