Merge pull request #892 from gedankenexperimenter/system-control-rollover-fix

Fix System Control rollover bug
pull/909/head
Jesse Vincent 4 years ago committed by GitHub
commit 4a0d5b3466
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -207,10 +207,15 @@ class Keyboard {
consumer_control_.release(CONSUMER(mapped_key)); consumer_control_.release(CONSUMER(mapped_key));
} }
void pressSystemControl(Key mapped_key) { void pressSystemControl(Key mapped_key) {
system_control_.press(mapped_key.getKeyCode()); uint8_t keycode = mapped_key.getKeyCode();
system_control_.press(keycode);
last_system_control_keycode_ = keycode;
} }
void releaseSystemControl(Key mapped_key) { void releaseSystemControl(Key mapped_key) {
system_control_.release(); uint8_t keycode = mapped_key.getKeyCode();
if (keycode == last_system_control_keycode_) {
system_control_.release();
}
} }
// pressKey takes a Key, as well as optional boolean 'toggledOn' which defaults // pressKey takes a Key, as well as optional boolean 'toggledOn' which defaults
@ -373,6 +378,12 @@ class Keyboard {
} }
private: private:
// To prevent premature release of a System Control key when rolling
// over from one to another, we record the last System Control
// keycode that was pressed. It's initialized to zero, which should
// not be a valid System Control keycode.
uint8_t last_system_control_keycode_ = 0;
// modifier_flag_mask is a bitmask of modifiers that we found attached to // modifier_flag_mask is a bitmask of modifiers that we found attached to
// keys that were newly pressed down during the most recent cycle with any new // keys that were newly pressed down during the most recent cycle with any new
// keypresses. // keypresses.

Loading…
Cancel
Save