Merge pull request #886 from keyboardio/deprecate-key-masking

Deprecate key masking
pull/888/head
Jesse Vincent 4 years ago committed by GitHub
commit 43c4536a10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -212,6 +212,10 @@ allowing external tools to aid in migrations. The setting wasn't widely used -
if at all -, which is why we chose to repurpose it instead of adding a new if at all -, which is why we chose to repurpose it instead of adding a new
field. field.
### Key masking has been deprecated
Key masking was a band-aid introduced to avoid accidentally sending unintended keys when key mapping changes between a key being pressed and released. Since the introduction of keymap caching, this is no longer necessary, as long as we can keep the mapping consistent. Users of key masking are encouraged to find ways to use the caching mechanism instead.
## Bugfixes ## Bugfixes
We fixed way too many issues to list here, so we're going to narrow it down to the most important, most visible ones. We fixed way too many issues to list here, so we're going to narrow it down to the most important, most visible ones.

@ -19,6 +19,7 @@ If any of this does not make sense to you, or you have trouble updating your .in
- [MagicCombo](#magiccombo) - [MagicCombo](#magiccombo)
- [TypingBreaks](#typingbreaks) - [TypingBreaks](#typingbreaks)
- [Redial](#redial) - [Redial](#redial)
- [Key mapping has been deprecated](#key-mapping-has-been-deprecated)
+ [Deprecated APIs and their replacements](#deprecated-apis-and-their-replacements) + [Deprecated APIs and their replacements](#deprecated-apis-and-their-replacements)
- [Source code and namespace rearrangement](#source-code-and-namespace-rearrangement) - [Source code and namespace rearrangement](#source-code-and-namespace-rearrangement)
* [Removed APIs](#removed-apis) * [Removed APIs](#removed-apis)
@ -491,6 +492,14 @@ Storing the settable settings in EEPROM makes it depend on `Kaleidoscope-EEPROM-
Older versions of the plugin required one to set up `Key_Redial` manually, and let the plugin know about it via `Redial.key`. This is no longer required, as the plugin sets up the redial key itself. As such, `Redial.key` was removed, and `Key_Redial` is defined by the plugin itself. To upgrade, simply remove your definition of `Key_Redial` and the `Redial.key` assignment from your sketch. Older versions of the plugin required one to set up `Key_Redial` manually, and let the plugin know about it via `Redial.key`. This is no longer required, as the plugin sets up the redial key itself. As such, `Redial.key` was removed, and `Key_Redial` is defined by the plugin itself. To upgrade, simply remove your definition of `Key_Redial` and the `Redial.key` assignment from your sketch.
### Key masking has been deprecated
Key masking was a band-aid introduced to avoid accidentally sending unintended keys when key mapping changes between a key being pressed and released. Since the introduction of keymap caching, this is no longer necessary, as long as we can keep the mapping consistent. Users of key masking are encouraged to find ways to use the caching mechanism instead.
As an example, if you had a key event handler that in some cases masked a key, it should now map it to `Key_NoKey` instead, until released.
The masking API has been deprecated, and is scheduled to be removed after **2020-11-25**.
## Deprecated APIs and their replacements ## Deprecated APIs and their replacements
### Source code and namespace rearrangement ### Source code and namespace rearrangement

@ -269,7 +269,7 @@ class Base {
* *
* @param key_addr is the matrix address of the key. * @param key_addr is the matrix address of the key.
*/ */
void maskKey(KeyAddr key_addr) { void maskKey(KeyAddr key_addr) DEPRECATED(KEY_MASKING) {
key_scanner_.maskKey(key_addr); key_scanner_.maskKey(key_addr);
} }
/** /**

@ -23,18 +23,20 @@
namespace kaleidoscope { namespace kaleidoscope {
namespace plugin { namespace plugin {
bool EscapeOneShot::did_escape_;
EventHandlerResult EscapeOneShot::onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t keyState) { EventHandlerResult EscapeOneShot::onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t keyState) {
if (mapped_key != Key_Escape || if (mapped_key != Key_Escape || (keyState & INJECTED))
(keyState & INJECTED) ||
!keyToggledOn(keyState))
return EventHandlerResult::OK; return EventHandlerResult::OK;
if (did_escape_)
mapped_key = Key_NoKey;
did_escape_ = !keyToggledOff(keyState);
if ((!::OneShot.isActive() || ::OneShot.isPressed()) && !::OneShot.isSticky()) { if ((!::OneShot.isActive() || ::OneShot.isPressed()) && !::OneShot.isSticky()) {
return EventHandlerResult::OK; return EventHandlerResult::OK;
} }
Runtime.device().maskKey(key_addr);
::OneShot.cancel(true); ::OneShot.cancel(true);
return EventHandlerResult::EVENT_CONSUMED; return EventHandlerResult::EVENT_CONSUMED;
} }

@ -26,6 +26,9 @@ class EscapeOneShot : public kaleidoscope::Plugin {
EscapeOneShot(void) {} EscapeOneShot(void) {}
EventHandlerResult onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t keyState); EventHandlerResult onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t keyState);
private:
static bool did_escape_;
}; };
} }
} }

@ -38,7 +38,6 @@ void TapDance::interrupt(KeyAddr key_addr) {
last_tap_dance_key_ = Key_NoKey; last_tap_dance_key_ = Key_NoKey;
Runtime.device().maskKey(key_addr);
Runtime.hid().keyboard().sendReport(); Runtime.hid().keyboard().sendReport();
Runtime.hid().keyboard().releaseAllKeys(); Runtime.hid().keyboard().releaseAllKeys();
@ -114,13 +113,11 @@ EventHandlerResult TapDance::onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr,
if (last_tap_dance_key_ == Key_NoKey) if (last_tap_dance_key_ == Key_NoKey)
return EventHandlerResult::OK; return EventHandlerResult::OK;
if (keyToggledOn(keyState)) if (keyToggledOn(keyState)) {
interrupt(key_addr); interrupt(key_addr);
mapped_key = Key_NoKey;
if (Runtime.device().isKeyMasked(key_addr)) {
Runtime.device().unMaskKey(key_addr);
return EventHandlerResult::EVENT_CONSUMED;
} }
return EventHandlerResult::OK; return EventHandlerResult::OK;
} }

@ -27,6 +27,12 @@
/* Messages */ /* Messages */
#define _DEPRECATED_MESSAGE_KEY_MASKING __NL__ \
"Key masking has been deprecated, please map keys to NoKey instead.\n" __NL__ \
"\n" __NL__ \
"For further information and examples on how to do that, \n" __NL__ \
"please see UPGRADING.md"
#define _DEPRECATED_MESSAGE_HID_FACADE __NL__ \ #define _DEPRECATED_MESSAGE_HID_FACADE __NL__ \
"The HID facade in the `kaleidoscope::hid` namespace is deprecated.\n" __NL__ \ "The HID facade in the `kaleidoscope::hid` namespace is deprecated.\n" __NL__ \
"Please use `Kaleidoscope.hid()` instead." "Please use `Kaleidoscope.hid()` instead."

Loading…
Cancel
Save