@@ -754,43 +754,7 @@ Instance::Instance(int argc, char **argv) {
754754 CheckInputMethodChanged imChangedRAII (ic, d);
755755 auto origKey = keyEvent.origKey ().normalize ();
756756
757- struct {
758- const KeyList &list;
759- std::function<bool ()> check;
760- std::function<void (bool )> trigger;
761- } keyHandlers[] = {
762- {.list = d->globalConfig_ .triggerKeys (),
763- .check = [this ]() { return canTrigger (); },
764- .trigger =
765- [this , ic](bool totallyReleased) {
766- return trigger (ic, totallyReleased);
767- }},
768- {.list = d->globalConfig_ .altTriggerKeys (),
769- .check = [this , ic]() { return canAltTrigger (ic); },
770- .trigger = [this , ic](bool ) { return altTrigger (ic); }},
771- {.list = d->globalConfig_ .activateKeys (),
772- .check = [ic, d]() { return d->canActivate (ic); },
773- .trigger = [this , ic](bool ) { return activate (ic); }},
774- {.list = d->globalConfig_ .deactivateKeys (),
775- .check = [ic, d]() { return d->canDeactivate (ic); },
776- .trigger = [this , ic](bool ) { return deactivate (ic); }},
777- {.list = d->globalConfig_ .enumerateForwardKeys (),
778- .check = [this , ic]() { return canEnumerate (ic); },
779- .trigger = [this , ic](bool ) { return enumerate(ic, true ); }},
780- {.list = d->globalConfig_ .enumerateBackwardKeys (),
781- .check = [this , ic]() { return canEnumerate (ic); },
782- .trigger = [this , ic](bool ) { return enumerate(ic, false ); }},
783- {.list = d->globalConfig_ .enumerateGroupForwardKeys (),
784- .check = [this ]() { return canChangeGroup (); },
785- .trigger = [ic, d, origKey](
786- bool ) { d->navigateGroup (ic, origKey, true ); }},
787- {.list = d->globalConfig_ .enumerateGroupBackwardKeys (),
788- .check = [this ]() { return canChangeGroup (); },
789- .trigger =
790- [ic, d, origKey](bool ) {
791- d->navigateGroup (ic, origKey, false );
792- }},
793- };
757+ auto keyHandlers = createKeyEventHandlers (keyEvent);
794758
795759 auto *inputState = ic->propertyFor (&d->inputStateFactory_ );
796760 int keyReleased = inputState->keyReleased_ ;
@@ -2148,6 +2112,49 @@ void Instance::toggle() {
21482112 }
21492113}
21502114
2115+ std::vector<Instance::KeyEventHandler>
2116+ Instance::createKeyEventHandlers (const KeyEvent &keyEvent) {
2117+ FCITX_D ();
2118+
2119+ auto *ic = keyEvent.inputContext ();
2120+ const auto origKey = keyEvent.origKey ().normalize ();
2121+
2122+ const KeyEventHandler keyEventHandlers[] = {
2123+ {.list = d->globalConfig_ .triggerKeys (),
2124+ .check = [this ]() { return canTrigger (); },
2125+ .trigger =
2126+ [this , ic](bool totallyReleased) {
2127+ return trigger (ic, totallyReleased);
2128+ }},
2129+ {.list = d->globalConfig_ .altTriggerKeys (),
2130+ .check = [this , ic]() { return canAltTrigger (ic); },
2131+ .trigger = [this , ic](bool ) { return altTrigger (ic); }},
2132+ {.list = d->globalConfig_ .activateKeys (),
2133+ .check = [ic, d]() { return d->canActivate (ic); },
2134+ .trigger = [this , ic](bool ) { return activate (ic); }},
2135+ {.list = d->globalConfig_ .deactivateKeys (),
2136+ .check = [ic, d]() { return d->canDeactivate (ic); },
2137+ .trigger = [this , ic](bool ) { return deactivate (ic); }},
2138+ {.list = d->globalConfig_ .enumerateForwardKeys (),
2139+ .check = [this , ic]() { return canEnumerate (ic); },
2140+ .trigger = [this , ic](bool ) { return enumerate(ic, true ); }},
2141+ {.list = d->globalConfig_ .enumerateBackwardKeys (),
2142+ .check = [this , ic]() { return canEnumerate (ic); },
2143+ .trigger = [this , ic](bool ) { return enumerate(ic, false ); }},
2144+ {.list = d->globalConfig_ .enumerateGroupForwardKeys (),
2145+ .check = [this ]() { return canChangeGroup (); },
2146+ .trigger = [ic, d,
2147+ origKey](bool ) { d->navigateGroup (ic, origKey, true ); }},
2148+ {.list = d->globalConfig_ .enumerateGroupBackwardKeys (),
2149+ .check = [this ]() { return canChangeGroup (); },
2150+ .trigger = [ic, d,
2151+ origKey](bool ) { d->navigateGroup (ic, origKey, false ); }},
2152+ };
2153+
2154+ return std::vector<KeyEventHandler>(std::cbegin (keyEventHandlers),
2155+ std::cend (keyEventHandlers));
2156+ }
2157+
21512158void Instance::enumerate (bool forward) {
21522159 FCITX_D ();
21532160 if (auto *ic = mostRecentInputContext ()) {
0 commit comments