10 #include "fcitx-utils/handlertable.h" 11 #include "fcitx-utils/macros.h" 15 #include "tempmode_p.h" 22 postInputMethodHandler_ =
24 EventWatcherPhase::Default,
25 [
this](
KeyEvent &event) { checkModeTrigger(event); });
27 preInputMethodHandler_ =
29 EventWatcherPhase::PreInputMethod,
30 [
this](
KeyEvent &event) { keyEvent(event); });
32 invokeActionHandler_ =
34 EventWatcherPhase::PreInputMethod,
37 auto reset = [
this](
const auto &event) {
38 for (
auto *mode : modes_.view()) {
39 if (mode->isActive(event.inputContext())) {
40 mode->reset(event.inputContext());
46 EventWatcherPhase::Default, reset);
48 EventWatcherPhase::Default, reset);
49 switchInputMethodHandler_ =
51 EventWatcherPhase::Default, reset);
54 void checkModeTrigger(
KeyEvent &keyEvent)
const {
55 for (
auto *mode : modes_.view()) {
56 if (mode->triggerTempMode(keyEvent)) {
57 keyEvent.filterAndAccept();
63 void keyEvent(
KeyEvent &keyEvent)
const {
64 for (
auto *mode : modes_.view()) {
65 if (mode->isActive(keyEvent.inputContext())) {
67 if (mode->keyEvent(keyEvent)) {
76 for (
auto *mode : modes_.view()) {
77 if (mode->isActive(event.inputContext())) {
79 if (mode->invokeAction(event)) {
88 std::unique_ptr<HandlerTableEntry<EventHandler>> postInputMethodHandler_;
89 std::unique_ptr<HandlerTableEntry<EventHandler>> preInputMethodHandler_;
90 std::unique_ptr<HandlerTableEntry<EventHandler>> invokeActionHandler_;
91 std::unique_ptr<HandlerTableEntry<EventHandler>> focusOutHandler_;
92 std::unique_ptr<HandlerTableEntry<EventHandler>> resetHandler_;
93 std::unique_ptr<HandlerTableEntry<EventHandler>> switchInputMethodHandler_;
100 TempModeManager::~TempModeManager() {
102 for (
auto *mode : d->modes_.view()) {
112 tempMode.d_ptr->registerCallback(d->modes_.add(&tempMode), d->instance_);
bool isRegistered() const
Return whether this temp mode is registered with a manager.
Temporary input modes for Fcitx.
An instance represents a standalone Fcitx instance.
when user switch to a different input method by hand such as ctrl+shift by default, or by ui, default behavior is reset IM.
TempModeManager(Instance *instance)
Create a temp mode manager for an instance.
A temporary mode that can take over key handling for a short period.
FCITX_NODISCARD std::unique_ptr< HandlerTableEntry< EventHandler > > watchEvent(EventType type, EventWatcherPhase phase, EventHandler callback)
Add a callback to for certain event type.
InvokeAction event is generated when client click on the preedit.
void registerTempMode(TempMode &tempMode)
Register a temp mode with this manager.
Key event is generated when client press or release a key.
Registration and dispatch for temporary input modes.
when using lost focus this might be variance case to case.