struct xkb_compose_state *compose_state;
struct libevdev *dev;
+
+ uint32_t leds_state_invalid : 1;
};
static bool
updated_state = xkb_state_update_key (input_device->keyboard_state, keycode, xkb_key_direction);
- if ((updated_state & XKB_STATE_LEDS) != 0)
+ if ((updated_state & XKB_STATE_LEDS) != 0) {
+ input_device->leds_state_invalid = true;
ply_trigger_pull (input_device->leds_changed_trigger, input_device);
+ }
/* If the key is repeating, or is being pressed down */
if (key_state == PLY_KEY_HELD || key_state == PLY_KEY_DOWN)
if (mods_depressed == xkb_state->mods_depressed &&
mods_latched == xkb_state->mods_latched &&
mods_locked == xkb_state->mods_locked &&
- group == xkb_state->group)
+ group == xkb_state->group &&
+ !input_device->leds_state_invalid)
return;
mods_depressed = xkb_state->mods_depressed;
ev[i].code = SYN_REPORT;
ply_write (input_device->fd, ev, sizeof(ev));
+ input_device->leds_state_invalid = false;
}
ply_xkb_keyboard_state_t