1
0
Fork 0
forked from wry/wry

kbvm: use indicators to determine the active LEDs

This commit is contained in:
Julian Orth 2025-09-07 15:34:38 +02:00
parent 0c7f7429db
commit f5e04355d7
8 changed files with 101 additions and 57 deletions

View file

@ -80,11 +80,11 @@ impl ZwpVirtualKeyboardV1RequestHandler for ZwpVirtualKeyboardV1 {
.map_err(ZwpVirtualKeyboardV1Error::ParseKeymap)?;
*self.kb_state.borrow_mut() = KeyboardState {
id: self.client.state.keyboard_state_ids.next(),
map: map.map.clone(),
xwayland_map: map.xwayland_map.clone(),
map: map.clone(),
pressed_keys: Default::default(),
mods: Default::default(),
mods_changed: Default::default(),
leds: Default::default(),
leds_changed: Default::default(),
};
Ok(())
}
@ -113,15 +113,12 @@ impl ZwpVirtualKeyboardV1RequestHandler for ZwpVirtualKeyboardV1 {
fn modifiers(&self, req: Modifiers, _slf: &Rc<Self>) -> Result<(), Self::Error> {
let kb_state = &mut *self.kb_state.borrow_mut();
let locked_mods = kb_state.mods.mods_locked;
kb_state.mods.mods_pressed.0 = req.mods_depressed;
kb_state.mods.mods_latched.0 = req.mods_latched;
kb_state.mods.mods_locked.0 = req.mods_locked;
kb_state.mods.group_locked.0 = req.group;
kb_state.mods.update_effective();
if locked_mods != kb_state.mods.mods_locked {
kb_state.dispatch_locked_mods_listeners();
}
kb_state.update_leds();
self.for_each_kb(|serial, surface, kb| {
kb.on_mods_changed(serial, surface.id, &kb_state);
});