From 23d8c6577e1997eebf9f1c6bd5b0daf5b0e37c51 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Tue, 17 Nov 2020 15:31:36 -0600 Subject: [PATCH] Adapt ShapeShifter to active keys cache Signed-off-by: Michael Richters --- src/kaleidoscope/plugin/ShapeShifter.cpp | 24 ++++++++++++++---------- src/kaleidoscope/plugin/ShapeShifter.h | 4 ---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/kaleidoscope/plugin/ShapeShifter.cpp b/src/kaleidoscope/plugin/ShapeShifter.cpp index c1fed6e9..b2058daa 100644 --- a/src/kaleidoscope/plugin/ShapeShifter.cpp +++ b/src/kaleidoscope/plugin/ShapeShifter.cpp @@ -16,25 +16,20 @@ */ #include +#include "kaleidoscope/keyswitch_state.h" namespace kaleidoscope { namespace plugin { const ShapeShifter::dictionary_t *ShapeShifter::dictionary = NULL; -bool ShapeShifter::mod_active_; - -EventHandlerResult ShapeShifter::beforeReportingState() { - mod_active_ = kaleidoscope::Runtime.hid().keyboard().isModifierKeyActive(Key_LeftShift) || - kaleidoscope::Runtime.hid().keyboard().isModifierKeyActive(Key_RightShift); - return EventHandlerResult::OK; -} EventHandlerResult ShapeShifter::onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t key_state) { - if (!dictionary) + // Only act on keys that toggle on to prevent cycles (if the dictionary has + // two keys mapped to each other). + if (!keyToggledOn(key_state)) return EventHandlerResult::OK; - // If Shift is not active, bail out early. - if (!mod_active_) + if (!dictionary) return EventHandlerResult::OK; Key orig, repl; @@ -52,6 +47,15 @@ EventHandlerResult ShapeShifter::onKeyswitchEvent(Key &mapped_key, KeyAddr key_a if (orig == Key_NoKey) return EventHandlerResult::OK; + bool shift_detected = false; + + for (KeyAddr k : KeyAddr::all()) { + if (Runtime.activeKey(k).isKeyboardShift()) + shift_detected = true; + } + if (! shift_detected) + return EventHandlerResult::OK; + repl = dictionary[i].replacement.readFromProgmem(); // If found, handle the alternate key instead diff --git a/src/kaleidoscope/plugin/ShapeShifter.h b/src/kaleidoscope/plugin/ShapeShifter.h index cdb2dc72..3b8ad7da 100644 --- a/src/kaleidoscope/plugin/ShapeShifter.h +++ b/src/kaleidoscope/plugin/ShapeShifter.h @@ -33,10 +33,6 @@ class ShapeShifter : public kaleidoscope::Plugin { static const dictionary_t *dictionary; EventHandlerResult onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t key_state); - EventHandlerResult beforeReportingState(); - - private: - static bool mod_active_; }; }