@@ -15,22 +15,6 @@ mod rect;
15
15
use keyboard:: Keyboard ;
16
16
use picker:: Picker ;
17
17
18
- //TODO: allow multiple keyboards
19
- fn main_keyboard ( app : & gtk:: Application , keyboard : Keyboard ) -> gtk:: Box {
20
- let picker = Picker :: new ( ) ;
21
- picker. set_keyboard ( Some ( keyboard. clone ( ) ) ) ;
22
-
23
- let vbox = cascade ! {
24
- gtk:: Box :: new( gtk:: Orientation :: Vertical , 32 ) ;
25
- ..set_property_margin( 10 ) ;
26
- ..set_halign( gtk:: Align :: Center ) ;
27
- ..add( & keyboard) ;
28
- ..add( & picker) ;
29
- } ;
30
-
31
- vbox
32
- }
33
-
34
18
fn main_app ( app : & gtk:: Application , daemon : Rc < dyn Daemon > ) {
35
19
let boards = daemon. boards ( ) . expect ( "Failed to load boards" ) ;
36
20
@@ -43,23 +27,27 @@ fn main_app(app: >k::Application, daemon: Rc<dyn Daemon>) {
43
27
..set_transition_duration( 0 ) ;
44
28
} ;
45
29
46
- board_dropdown. connect_changed ( clone ! ( @weak stack => @default -panic, move |combobox| {
30
+ let picker = Picker :: new ( ) ;
31
+
32
+ board_dropdown. connect_changed ( clone ! ( @weak stack, @weak picker => @default -panic, move |combobox| {
47
33
if let Some ( id) = combobox. get_active_id( ) {
48
34
stack. set_visible_child_name( & id) ;
35
+ let keyboard = stack. get_child_by_name( & id) . unwrap( ) . downcast( ) . unwrap( ) ;
36
+ picker. set_keyboard( Some ( keyboard) ) ;
49
37
}
50
38
} ) ) ;
51
39
52
40
let mut count = 0 ;
53
41
for ( i, board) in boards. iter ( ) . enumerate ( ) {
54
42
if let Some ( keyboard) = Keyboard :: new_board ( board, daemon. clone ( ) , i) {
55
- let widget = main_keyboard ( app, keyboard) ;
56
43
board_dropdown. append ( Some ( & board) , & board) ;
57
- stack. add_named ( & widget , & board) ;
44
+ stack. add_named ( & keyboard , & board) ;
58
45
count += 1 ;
59
46
60
47
if count == 1 {
61
- widget . show ( ) ;
48
+ keyboard . show ( ) ;
62
49
board_dropdown. set_active_id ( Some ( & board) ) ;
50
+ picker. set_keyboard ( Some ( keyboard. clone ( ) ) ) ;
63
51
}
64
52
} else {
65
53
eprintln ! ( "Failed to locate layout for '{}'" , board) ;
@@ -75,14 +63,14 @@ fn main_app(app: >k::Application, daemon: Rc<dyn Daemon>) {
75
63
76
64
for ( i, board) in boards. iter ( ) . enumerate ( ) {
77
65
if let Some ( keyboard) = Keyboard :: new_board ( board, daemon. clone ( ) , i) {
78
- let widget = main_keyboard ( app, keyboard) ;
79
66
board_dropdown. append ( Some ( & board) , & board) ;
80
- stack. add_named ( & widget , & board) ;
67
+ stack. add_named ( & keyboard , & board) ;
81
68
count += 1 ;
82
69
83
70
if count == 1 {
84
- widget . show ( ) ;
71
+ keyboard . show ( ) ;
85
72
board_dropdown. set_active_id ( Some ( & board) ) ;
73
+ picker. set_keyboard ( Some ( keyboard. clone ( ) ) ) ;
86
74
}
87
75
} else {
88
76
eprintln ! ( "Failed to locate layout for '{}'" , board) ;
@@ -92,8 +80,11 @@ fn main_app(app: >k::Application, daemon: Rc<dyn Daemon>) {
92
80
93
81
let vbox = cascade ! {
94
82
gtk:: Box :: new( gtk:: Orientation :: Vertical , 32 ) ;
83
+ ..set_property_margin( 10 ) ;
84
+ ..set_halign( gtk:: Align :: Center ) ;
95
85
..add( & board_dropdown) ;
96
86
..add( & stack) ;
87
+ ..add( & picker) ;
97
88
} ;
98
89
99
90
let scrolled_window = cascade ! {
0 commit comments