@@ -32,7 +32,7 @@ pub struct KeyboardInner {
32
32
daemon : OnceCell < Rc < dyn Daemon > > ,
33
33
daemon_board : OnceCell < usize > ,
34
34
keymap : OnceCell < HashMap < String , u16 > > ,
35
- keys : RefCell < Vec < Key > > ,
35
+ keys : OnceCell < Box < [ Key ] > > ,
36
36
page : Cell < Page > ,
37
37
picker : RefCell < WeakRef < Picker > > ,
38
38
selected : Cell < Option < usize > > ,
@@ -105,7 +105,7 @@ impl ObjectSubclass for KeyboardInner {
105
105
daemon : OnceCell :: new ( ) ,
106
106
daemon_board : OnceCell :: new ( ) ,
107
107
keymap : OnceCell :: new ( ) ,
108
- keys : RefCell :: new ( Vec :: new ( ) ) ,
108
+ keys : OnceCell :: new ( ) ,
109
109
page : Cell :: new ( Page :: Layer1 ) ,
110
110
picker : RefCell :: new ( WeakRef :: new ( ) ) ,
111
111
selected : Cell :: new ( None ) ,
@@ -186,10 +186,10 @@ impl Keyboard {
186
186
} ;
187
187
println ! ( " Scancode Name: {}" , scancode_name) ;
188
188
189
- key. scancodes . push ( ( scancode, scancode_name) ) ;
189
+ key. scancodes . borrow_mut ( ) . push ( ( scancode, scancode_name) ) ;
190
190
}
191
191
}
192
- * keyboard. inner ( ) . keys . borrow_mut ( ) = keys;
192
+ let _ = keyboard. inner ( ) . keys . set ( keys. into_boxed_slice ( ) ) ;
193
193
194
194
let _ = keyboard. inner ( ) . daemon . set ( daemon) ;
195
195
let _ = keyboard. inner ( ) . daemon_board . set ( daemon_board) ;
@@ -258,12 +258,15 @@ impl Keyboard {
258
258
self . keymap ( ) . contains_key ( scancode_name)
259
259
}
260
260
261
+ fn keys ( & self ) -> & [ Key ] {
262
+ self . inner ( ) . keys . get ( ) . unwrap ( )
263
+ }
264
+
261
265
pub fn keymap_set ( & self , key_index : usize , layer : usize , scancode_name : & str ) {
262
- let mut keys = self . inner ( ) . keys . borrow_mut ( ) ;
263
- let k = & mut keys[ key_index] ;
266
+ let k = & self . keys ( ) [ key_index] ;
264
267
let mut found = false ;
265
268
if let Some ( scancode) = self . keymap ( ) . get ( scancode_name) {
266
- k. scancodes [ layer] = ( * scancode, scancode_name. to_string ( ) ) ;
269
+ k. scancodes . borrow_mut ( ) [ layer] = ( * scancode, scancode_name. to_string ( ) ) ;
267
270
k. refresh ( ) ;
268
271
found = true ;
269
272
}
@@ -272,19 +275,18 @@ impl Keyboard {
272
275
}
273
276
println ! (
274
277
" set {}, {}, {} to {:04X}" ,
275
- layer, k. electrical. 0 , k. electrical. 1 , k. scancodes[ layer] . 0
278
+ layer, k. electrical. 0 , k. electrical. 1 , k. scancodes. borrow ( ) [ layer] . 0
276
279
) ;
277
280
if let Err ( err) = self . daemon ( ) . keymap_set (
278
281
self . daemon_board ( ) ,
279
282
layer as u8 ,
280
283
k. electrical . 0 ,
281
284
k. electrical . 1 ,
282
- k. scancodes [ layer] . 0 ,
285
+ k. scancodes . borrow_mut ( ) [ layer] . 0 ,
283
286
) {
284
287
eprintln ! ( "Failed to set keymap: {:?}" , err) ;
285
288
}
286
289
287
- drop ( keys) ;
288
290
self . set_selected ( self . selected ( ) ) ;
289
291
}
290
292
@@ -325,10 +327,10 @@ impl Keyboard {
325
327
// TODO: Replace with something type-safe
326
328
unsafe { fixed. set_data ( "keyboard_confurator_page" , page) } ;
327
329
328
- let keys_len = self . inner ( ) . keys . borrow ( ) . len ( ) ;
330
+ let keys_len = self . keys ( ) . len ( ) ;
329
331
for i in 0 ..keys_len {
330
332
let ( button, label) = {
331
- let keys = self . inner ( ) . keys . borrow ( ) ;
333
+ let keys = self . keys ( ) ;
332
334
let k = & keys[ i] ;
333
335
334
336
let scale = 64.0 ;
@@ -374,10 +376,9 @@ impl Keyboard {
374
376
}
375
377
} ) ) ;
376
378
377
- let mut keys = self . inner ( ) . keys . borrow_mut ( ) ;
378
- let k = & mut keys[ i] ;
379
+ let k = & self . keys ( ) [ i] ;
379
380
k. refresh ( ) ;
380
- k. gtk . insert ( page, ( button, label) ) ;
381
+ k. gtk . borrow_mut ( ) . insert ( page, ( button, label) ) ;
381
382
}
382
383
}
383
384
}
@@ -395,10 +396,10 @@ impl Keyboard {
395
396
Some ( picker) => picker,
396
397
None => { return ; } ,
397
398
} ;
398
- let keys = self . inner ( ) . keys . borrow ( ) ;
399
+ let keys = self . keys ( ) ;
399
400
400
401
if let Some ( selected) = self . selected ( ) {
401
- for ( _page, ( button, _label) ) in keys[ selected] . gtk . iter ( ) {
402
+ for ( _page, ( button, _label) ) in keys[ selected] . gtk . borrow ( ) . iter ( ) {
402
403
button. get_style_context ( ) . remove_class ( "selected" ) ;
403
404
}
404
405
picker. set_selected ( None ) ;
@@ -407,10 +408,10 @@ impl Keyboard {
407
408
if let Some ( i) = i {
408
409
let k = & keys[ i] ;
409
410
println ! ( "{:#?}" , k) ;
410
- for ( _page, ( button, _label) ) in keys[ i] . gtk . iter ( ) {
411
+ for ( _page, ( button, _label) ) in keys[ i] . gtk . borrow ( ) . iter ( ) {
411
412
button. get_style_context ( ) . add_class ( "selected" ) ;
412
413
}
413
- if let Some ( ( _scancode, scancode_name) ) = keys[ i] . scancodes . get ( self . layer ( ) ) {
414
+ if let Some ( ( _scancode, scancode_name) ) = keys[ i] . scancodes . borrow ( ) . get ( self . layer ( ) ) {
414
415
picker. set_selected ( Some ( scancode_name. to_string ( ) ) ) ;
415
416
}
416
417
}
0 commit comments