Change summary
crates/gpui/src/platform/linux/wayland/client.rs | 30 ++++++++++++------
1 file changed, 20 insertions(+), 10 deletions(-)
Detailed changes
@@ -1227,16 +1227,7 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
let keyboard_layout = LinuxKeyboardLayout::new(&keymap_state);
state.keymap_state = Some(xkb::State::new(&keymap));
state.compose_state = get_xkb_compose_state(&xkb_context);
- if let Some(mapper) = state.keyboard_mapper_cache.get(keyboard_layout.id()) {
- state.keyboard_mapper = Some(mapper.clone());
- } else {
- let mapper = Rc::new(LinuxKeyboardMapper::new(0, 0, 0));
- state.keyboard_mapper = Some(mapper.clone());
- state
- .keyboard_mapper_cache
- .insert(keyboard_layout.id().to_string(), mapper);
- }
- state.keyboard_layout = Box::new(keyboard_layout);
+ update_keyboard_mapper(&mut state, keyboard_layout, 0);
drop(state);
this.handle_keyboard_layout_change();
@@ -2192,3 +2183,22 @@ impl Dispatch<zwp_primary_selection_source_v1::ZwpPrimarySelectionSourceV1, ()>
}
}
}
+
+fn update_keyboard_mapper(
+ client: &mut WaylandClientState,
+ keyboard_layout: LinuxKeyboardLayout,
+ group: u32,
+) {
+ client.keyboard_mapper =
+ if let Some(mapper) = client.keyboard_mapper_cache.get(keyboard_layout.id()) {
+ Some(mapper.clone())
+ } else {
+ let mapper = Rc::new(LinuxKeyboardMapper::new(0, 0, group));
+ client.keyboard_mapper = Some(mapper.clone());
+ client
+ .keyboard_mapper_cache
+ .insert(keyboard_layout.id().to_string(), mapper.clone());
+ Some(mapper)
+ };
+ client.keyboard_layout = Box::new(keyboard_layout);
+}