kbvm: use indicators to determine the active LEDs
This commit is contained in:
parent
0c7f7429db
commit
f5e04355d7
8 changed files with 101 additions and 57 deletions
|
|
@ -28,7 +28,7 @@ impl ZwpInputMethodKeyboardGrabV2 {
|
|||
}
|
||||
|
||||
fn send_keymap(&self, kb_state: &KeyboardState) {
|
||||
let map = match kb_state.map.create_unprotected_fd() {
|
||||
let map = match kb_state.map.map.create_unprotected_fd() {
|
||||
Ok(m) => m,
|
||||
Err(e) => {
|
||||
log::error!("Could not create new keymap fd: {}", ErrorFmt(e));
|
||||
|
|
|
|||
|
|
@ -86,11 +86,11 @@ impl ZwpVirtualKeyboardManagerV1RequestHandler for ZwpVirtualKeyboardManagerV1 {
|
|||
version: self.version,
|
||||
kb_state: Rc::new(RefCell::new(KeyboardState {
|
||||
id: self.client.state.keyboard_state_ids.next(),
|
||||
map: seat_keymap.map.clone(),
|
||||
xwayland_map: seat_keymap.xwayland_map.clone(),
|
||||
map: seat_keymap.clone(),
|
||||
pressed_keys: Default::default(),
|
||||
mods: Default::default(),
|
||||
mods_changed: Default::default(),
|
||||
leds: Default::default(),
|
||||
leds_changed: Default::default(),
|
||||
})),
|
||||
});
|
||||
track!(self.client, kb);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue