@@ -40,7 +40,9 @@ pub static SCANCODE_LABELS: Lazy<HashMap<String, String>> = Lazy::new(|| {
40
40
41
41
#[ derive( Default ) ]
42
42
pub struct PickerInner {
43
- group_boxes : DerefCell < Vec < PickerGroupBox > > ,
43
+ stack_switcher : DerefCell < gtk:: StackSwitcher > ,
44
+ basics_group_box : DerefCell < PickerGroupBox > ,
45
+ extras_group_box : DerefCell < PickerGroupBox > ,
44
46
keyboard : RefCell < Option < Keyboard > > ,
45
47
selected : RefCell < Vec < Keycode > > ,
46
48
shift : Cell < bool > ,
@@ -100,8 +102,9 @@ impl ObjectImpl for PickerInner {
100
102
..show_all( ) ;
101
103
} ;
102
104
103
- self . group_boxes
104
- . set ( vec ! [ basics_group_box, extras_group_box] ) ;
105
+ self . stack_switcher . set ( stack_switcher) ;
106
+ self . basics_group_box . set ( basics_group_box) ;
107
+ self . extras_group_box . set ( extras_group_box) ;
105
108
self . tap_hold . set ( tap_hold) ;
106
109
}
107
110
}
@@ -156,26 +159,35 @@ impl Picker {
156
159
PickerInner :: from_instance ( self )
157
160
}
158
161
162
+ fn group_boxes ( & self ) -> [ & PickerGroupBox ; 2 ] {
163
+ [
164
+ & * self . inner ( ) . basics_group_box ,
165
+ & * self . inner ( ) . extras_group_box ,
166
+ ]
167
+ }
168
+
159
169
pub ( crate ) fn set_keyboard ( & self , keyboard : Option < Keyboard > ) {
160
170
if let Some ( old_kb) = & * self . inner ( ) . keyboard . borrow ( ) {
161
171
old_kb. set_picker ( None ) ;
162
172
}
163
173
164
174
if let Some ( kb) = & keyboard {
165
175
// Check that scancode is available for the keyboard
166
- for group_box in self . inner ( ) . group_boxes . iter ( ) {
167
- group_box. set_key_visibility ( |name| {
168
- kb. has_scancode ( & Keycode :: Basic ( Mods :: empty ( ) , name. to_string ( ) ) )
169
- } ) ;
176
+ for group_box in self . group_boxes ( ) {
177
+ group_box. set_key_visibility ( |name| kb. layout ( ) . has_scancode ( name) ) ;
170
178
}
179
+ let is_qmk = kb. layout ( ) . meta . is_qmk ;
180
+ self . inner ( ) . extras_group_box . set_visible ( is_qmk) ;
181
+ self . inner ( ) . tap_hold . set_visible ( is_qmk) ;
182
+ self . inner ( ) . stack_switcher . set_visible ( is_qmk) ;
171
183
kb. set_picker ( Some ( & self ) ) ;
172
184
}
173
185
174
186
* self . inner ( ) . keyboard . borrow_mut ( ) = keyboard;
175
187
}
176
188
177
189
pub ( crate ) fn set_selected ( & self , scancode_names : Vec < Keycode > ) {
178
- for group_box in self . inner ( ) . group_boxes . iter ( ) {
190
+ for group_box in self . group_boxes ( ) {
179
191
group_box. set_selected ( scancode_names. clone ( ) ) ;
180
192
}
181
193
self . inner ( ) . tap_hold . set_selected ( scancode_names. clone ( ) ) ;
@@ -271,7 +283,7 @@ impl Picker {
271
283
allow_non_basic = true ;
272
284
}
273
285
274
- for group_box in self . inner ( ) . group_boxes . iter ( ) {
286
+ for group_box in self . group_boxes ( ) {
275
287
group_box. set_key_sensitivity ( |name| {
276
288
if [ "LEFT_SHIFT" , "LEFT_ALT" , "LEFT_CTRL" , "LEFT_SUPER" ] . contains ( & name) {
277
289
allow_left_mods
0 commit comments