This commit is contained in:
Junkui Zhang
2025-05-22 16:20:12 +08:00
parent 7ab7eab54e
commit e019ce8260

View File

@@ -990,17 +990,7 @@ impl X11Client {
state.xkb = xkb_state;
drop(state);
self.handle_keyboard_layout_change();
state.keyboard_mapper =
if let Some(mapper) = state.keyboard_mapper_cache.get(keyboard_layout.id()) {
Rc::clone(mapper)
} else {
let mapper = Rc::new(LinuxKeyboardMapper::new(0, 0, 0));
state
.keyboard_mapper_cache
.insert(keyboard_layout.id().to_string(), Rc::clone(&mapper));
mapper
};
state.keyboard_layout = Box::new(keyboard_layout);
update_keyboard_mapper(&mut state, keyboard_layout, 0, 0, 0);
}
Event::XkbStateNotify(event) => {
let mut state = self.0.borrow_mut();
@@ -2320,3 +2310,27 @@ fn create_invisible_cursor(
xcb_flush(connection);
Ok(cursor)
}
fn update_keyboard_mapper(
client: &mut X11ClientState,
keyboard_layout: LinuxKeyboardLayout,
base_group: u32,
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
};
client.keyboard_layout = Box::new(keyboard_layout);
}