Send numlock keypress when disabling the numpad layer.

This avoids the OS being stuck with Numlock on, which leaves the LED on
if other keyboard are attached, and breaks FVWM.

See keyboardio/Model01-Firmware#42
pull/365/head
Evan Danaher 7 years ago
parent 952198a98a
commit 1017cfd600

@ -12,6 +12,13 @@ void NumPad_::begin(void) {
Kaleidoscope.useLoopHook(loopHook); Kaleidoscope.useLoopHook(loopHook);
} }
static void syncNumlock(bool state) {
bool numState = !!(kaleidoscope::hid::getKeyboardLEDs() & LED_NUM_LOCK);
if (numState != state) {
kaleidoscope::hid::pressKey(Key_KeypadNumLock);
}
}
void NumPad_::loopHook(bool postClear) { void NumPad_::loopHook(bool postClear) {
if (!postClear) if (!postClear)
return; return;
@ -19,16 +26,14 @@ void NumPad_::loopHook(bool postClear) {
if (!Layer.isOn(numPadLayer)) { if (!Layer.isOn(numPadLayer)) {
if (!cleanupDone) { if (!cleanupDone) {
LEDControl.set_mode(LEDControl.get_mode_index()); LEDControl.set_mode(LEDControl.get_mode_index());
syncNumlock(false);
cleanupDone = true; cleanupDone = true;
} }
return; return;
} }
cleanupDone = false; cleanupDone = false;
bool numState = !!(kaleidoscope::hid::getKeyboardLEDs() & LED_NUM_LOCK); syncNumlock(true);
if (!numState) {
kaleidoscope::hid::pressKey(Key_KeypadNumLock);
}
LEDControl.set_mode(LEDControl.get_mode_index()); LEDControl.set_mode(LEDControl.get_mode_index());

Loading…
Cancel
Save