Skip to content

Commit d782f56

Browse files
committed
Add a new function to create key event handlers.
1 parent 57dd480 commit d782f56

File tree

2 files changed

+51
-37
lines changed

2 files changed

+51
-37
lines changed

src/lib/fcitx/instance.cpp

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
21512158
void Instance::enumerate(bool forward) {
21522159
FCITX_D();
21532160
if (auto *ic = mostRecentInputContext()) {

src/lib/fcitx/instance.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,13 @@ class FCITXCORE_EXPORT Instance : public ConnectableObject {
589589
bool enumerate(InputContext *ic, bool forward);
590590
bool toggle(InputContext *ic, InputMethodSwitchedReason reason =
591591
InputMethodSwitchedReason::Trigger);
592+
struct KeyEventHandler {
593+
const KeyList &list;
594+
std::function<bool()> check;
595+
std::function<void(bool)> trigger;
596+
};
597+
std::vector<KeyEventHandler>
598+
createKeyEventHandlers(const KeyEvent &keyEvent);
592599

593600
void activateInputMethod(InputContextEvent &event);
594601
void deactivateInputMethod(InputContextEvent &event);

0 commit comments

Comments
 (0)