submission.rs: Restore active modifiers after changing keymaps

and clear all modifiers when changing layouts.

Fixes #373

Part-of: <https://gitlab.gnome.org/World/Phosh/squeekboard/-/merge_requests/598>
This commit is contained in:
MoonlightWave-12
2024-10-15 17:44:36 +02:00
parent f5aa1f3b19
commit 155cc45051

View File

@ -296,10 +296,13 @@ impl Submission {
fn select_keymap(&mut self, idx: usize, time: Timestamp) { fn select_keymap(&mut self, idx: usize, time: Timestamp) {
if self.keymap_idx != Some(idx) { if self.keymap_idx != Some(idx) {
self.keymap_idx = Some(idx); self.keymap_idx = Some(idx);
let modifiers = self.modifiers_active.clone();
self.clear_all_modifiers(); self.clear_all_modifiers();
self.release_all_virtual_keys(time); self.release_all_virtual_keys(time);
let keymap = &self.keymap_fds[idx]; let keymap = &self.keymap_fds[idx];
self.virtual_keyboard.update_keymap(keymap); self.virtual_keyboard.update_keymap(keymap);
self.modifiers_active = modifiers;
self.update_modifiers();
} }
} }
@ -316,5 +319,8 @@ impl Submission {
// However, self.keymap_idx needs to become Option<> // However, self.keymap_idx needs to become Option<>
// in order to force update on new layouts. // in order to force update on new layouts.
self.select_keymap(0, time); self.select_keymap(0, time);
// Reset modifiers when changing layouts.
self.clear_all_modifiers();
} }
} }