@@ -1224,7 +1224,7 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
};
let keymap_state = xkb::State::new(&keymap);
let keyboard_layout = LinuxKeyboardLayout::new(&keymap_state);
- state.keymap_state = Some(xkb::State::new(&keymap));
+ state.keymap_state = Some(keymap_state);
state.compose_state = get_xkb_compose_state(&xkb_context);
update_keyboard_mapper(&mut state, keyboard_layout, 0);
drop(state);
@@ -1270,7 +1270,7 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
let old_layout =
keymap_state.serialize_layout(xkbcommon::xkb::STATE_LAYOUT_EFFECTIVE);
keymap_state.update_mask(mods_depressed, mods_latched, mods_locked, 0, 0, group);
- state.modifiers = Modifiers::from_xkb(&keymap_state);
+ state.modifiers = Modifiers::from_xkb(keymap_state);
state.capslock = Capslock::from_xkb(&keymap_state);
let keymap_state = state.keymap_state.as_mut().unwrap();
@@ -2185,16 +2185,13 @@ fn update_keyboard_mapper(
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)
- };
+ let id = keyboard_layout.id().to_string();
+ let mapper = client
+ .keyboard_mapper_cache
+ .entry(id)
+ .or_insert(Rc::new(LinuxKeyboardMapper::new(0, 0, group)))
+ .clone();
+
+ client.keyboard_mapper = Some(mapper);
client.keyboard_layout = Box::new(keyboard_layout);
}
@@ -1072,8 +1072,7 @@ impl X11Client {
match compose_state.status() {
xkbc::Status::Composed => {
state.pre_edit_text.take();
- let key_char = compose_state.utf8();
- keystroke.key_char = key_char;
+ keystroke.key_char = compose_state.utf8();
if let Some(keysym) = compose_state.keysym() {
keystroke.key = xkbc::keysym_get_name(keysym);
}
@@ -2311,19 +2310,17 @@ fn update_keyboard_mapper(
latched_group: u32,
locked_group: u32,
) {
- client.keyboard_mapper =
- if let Some(mapper) = client.keyboard_mapper_cache.get(keyboard_layout.id()) {
- Rc::clone(mapper)
- } else {
- let mapper = Rc::new(LinuxKeyboardMapper::new(
- base_group,
- latched_group,
- locked_group,
- ));
- client
- .keyboard_mapper_cache
- .insert(keyboard_layout.id().to_string(), Rc::clone(&mapper));
- mapper
- };
+ let id = keyboard_layout.id().to_string();
+ let mapper = client
+ .keyboard_mapper_cache
+ .entry(id)
+ .or_insert(Rc::new(LinuxKeyboardMapper::new(
+ base_group,
+ latched_group,
+ locked_group,
+ )))
+ .clone();
+
+ client.keyboard_mapper = mapper;
client.keyboard_layout = Box::new(keyboard_layout);
}