@@ -264,10 +264,8 @@ impl Keyboard {
264
264
let k = & mut keys[ key_index] ;
265
265
let mut found = false ;
266
266
if let Some ( scancode) = self . keymap ( ) . get ( scancode_name) {
267
- k. deselect ( & picker, layer) ;
268
267
k. scancodes [ layer] = ( * scancode, scancode_name. to_string ( ) ) ;
269
268
k. refresh ( & picker) ;
270
- k. select ( & picker, layer) ;
271
269
found = true ;
272
270
}
273
271
if !found {
@@ -287,17 +285,14 @@ impl Keyboard {
287
285
eprintln ! ( "Failed to set keymap: {:?}" , err) ;
288
286
}
289
287
288
+ drop ( keys) ;
289
+ self . set_selected ( self . selected ( ) ) ;
290
290
}
291
291
292
292
fn connect_signals ( & self ) {
293
293
let kb = self ;
294
294
295
295
self . inner ( ) . stack . connect_property_visible_child_notify ( clone ! ( @weak kb => @default -panic, move |stack| {
296
- let picker = match kb. inner( ) . picker. borrow( ) . upgrade( ) {
297
- Some ( picker) => picker,
298
- None => { return ; } ,
299
- } ;
300
-
301
296
let page: Option <Page > = match stack. get_visible_child( ) {
302
297
Some ( child) => unsafe { child. get_data( "keyboard_confurator_page" ) . cloned( ) } ,
303
298
None => None ,
@@ -306,14 +301,8 @@ impl Keyboard {
306
301
println!( "{:?}" , page) ;
307
302
let last_layer = kb. layer( ) ;
308
303
kb. inner( ) . page. set( page. unwrap_or( Page :: Layer1 ) ) ;
309
- let layer = kb. layer( ) ;
310
- if layer != last_layer {
311
- if let Some ( i) = kb. inner( ) . selected. get( ) {
312
- let keys = kb. inner( ) . keys. borrow( ) ;
313
- let k = & keys[ i] ;
314
- k. deselect( & picker, last_layer) ;
315
- k. select( & picker, layer) ;
316
- }
304
+ if kb. layer( ) != last_layer {
305
+ kb. set_selected( kb. selected( ) ) ;
317
306
}
318
307
} ) ) ;
319
308
@@ -414,14 +403,22 @@ impl Keyboard {
414
403
} ;
415
404
let keys = self . inner ( ) . keys . borrow ( ) ;
416
405
417
- if let Some ( selected) = self . inner ( ) . selected . get ( ) {
418
- keys[ selected] . deselect ( & picker, self . layer ( ) ) ;
406
+ if let Some ( selected) = self . selected ( ) {
407
+ for ( _page, ( button, _label) ) in keys[ selected] . gtk . iter ( ) {
408
+ button. get_style_context ( ) . remove_class ( "selected" ) ;
409
+ }
410
+ picker. set_selected ( None ) ;
419
411
}
420
412
421
413
if let Some ( i) = i {
422
414
let k = & keys[ i] ;
423
415
println ! ( "{:#?}" , k) ;
424
- k. select ( & picker, self . layer ( ) ) ;
416
+ for ( _page, ( button, _label) ) in keys[ i] . gtk . iter ( ) {
417
+ button. get_style_context ( ) . add_class ( "selected" ) ;
418
+ }
419
+ if let Some ( ( _scancode, scancode_name) ) = keys[ i] . scancodes . get ( self . layer ( ) ) {
420
+ picker. set_selected ( Some ( scancode_name. to_string ( ) ) ) ;
421
+ }
425
422
}
426
423
427
424
self . inner ( ) . selected . set ( i) ;
0 commit comments