void ShowAutoEngMessage(FcitxAutoEngState* autoEngState) { FcitxInputState* input = FcitxInstanceGetInputState(autoEngState->owner); FcitxInstanceCleanInputWindow(autoEngState->owner); if (autoEngState->buf[0] == '\0') return; FcitxMessagesAddMessageAtLast(FcitxInputStateGetPreedit(input), MSG_INPUT, "%s", autoEngState->buf); strcpy(FcitxInputStateGetRawInputBuffer(input), autoEngState->buf); FcitxInputStateSetRawInputBufferSize(input, strlen(autoEngState->buf)); FcitxInputStateSetCursorPos(input, FcitxInputStateGetRawInputBufferSize(input)); FcitxInputStateSetShowCursor(input, true); FcitxMessagesAddMessageAtLast(FcitxInputStateGetAuxDown(input), MSG_TIPS, _("Press Enter to input text")); }
void _QuickPhraseLaunch(QuickPhraseState* qpstate) { FcitxInputState *input = FcitxInstanceGetInputState(qpstate->owner); char c[2]; QuickPhraseFillKeyString(qpstate, c); FcitxInstanceCleanInputWindow(qpstate->owner); ShowQuickPhraseMessage(qpstate); if (c[0]) { int s = qpstate->curTriggerKey[0].sym; char *strTemp = FcitxPuncGetPunc(qpstate->owner, &s); const char* full = strTemp ? strTemp : c; FcitxMessagesAddMessageAtLast(FcitxInputStateGetAuxDown(input), MSG_TIPS, _("Space for %s Enter for %s") , full, c); } qpstate->enabled = true; }
static void ShowAutoEngMessage(FcitxAutoEngState *autoEngState, INPUT_RETURN_VALUE *retval) { FcitxInputState* input = FcitxInstanceGetInputState(autoEngState->owner); char *raw_buff; int buff_len; FcitxInstanceCleanInputWindow(autoEngState->owner); if (autoEngState->buf[0] == '\0') return; raw_buff = FcitxInputStateGetRawInputBuffer(input); buff_len = strlen(autoEngState->buf); strncpy(raw_buff, autoEngState->buf, MAX_USER_INPUT); if (buff_len > MAX_USER_INPUT) { raw_buff[MAX_USER_INPUT] = '\0'; FcitxInputStateSetRawInputBufferSize(input, MAX_USER_INPUT); } else { FcitxInputStateSetRawInputBufferSize(input, buff_len); } if (buff_len > AUTOENG_MAX_PREEDIT) { FcitxMessagesAddMessageStringsAtLast(FcitxInputStateGetPreedit(input), MSG_INPUT, autoEngState->buf + buff_len - AUTOENG_MAX_PREEDIT); FcitxInputStateSetCursorPos(input, AUTOENG_MAX_PREEDIT); } else { FcitxMessagesAddMessageStringsAtLast(FcitxInputStateGetPreedit(input), MSG_INPUT, autoEngState->buf); FcitxInputStateSetCursorPos(input, autoEngState->index); } FcitxMessagesAddMessageStringsAtLast(FcitxInputStateGetClientPreedit(input), MSG_INPUT, autoEngState->buf); FcitxInputStateSetClientCursorPos(input, autoEngState->index); FcitxInputStateSetShowCursor(input, true); // AutoEngGetSpellHint(autoEngState); FcitxMessagesAddMessageStringsAtLast(FcitxInputStateGetAuxDown(input), MSG_TIPS, //_("Press Enter to input text")); " "); *retval |= IRV_FLAG_UPDATE_INPUT_WINDOW; }
boolean QuickPhrasePostFilter(void* arg, FcitxKeySym sym, unsigned int state, INPUT_RETURN_VALUE *retval ) { QuickPhraseState *qpstate = (QuickPhraseState*) arg; FcitxInputState *input = FcitxInstanceGetInputState(qpstate->owner); boolean disableQuickPhrase = FcitxInstanceGetContextBoolean(qpstate->owner, CONTEXT_DISABLE_QUICKPHRASE); if (*retval != IRV_TO_PROCESS) return false; if (!disableQuickPhrase && !qpstate->enabled && FcitxInputStateGetRawInputBufferSize(input) == 0 && FcitxHotkeyIsHotKey(sym, state, QuickPhraseTriggerKeys[qpstate->triggerKey])) { FcitxInstanceCleanInputWindow(qpstate->owner); FcitxInputStateSetShowCursor(input, true); FcitxMessagesAddMessageAtLast(FcitxInputStateGetAuxUp(input), MSG_TIPS, "%s", _("Quick Phrase: ")); FcitxInputStateSetCursorPos(input, 0); char c[2] = { (char) (QuickPhraseTriggerKeys[qpstate->triggerKey][0].sym & 0xff), '\0'}; FcitxModuleFunctionArg farg; FcitxKeySym s = QuickPhraseTriggerKeys[qpstate->triggerKey][0].sym; farg.args[0] = &s; char* strTemp = InvokeFunction(qpstate->owner, FCITX_PUNC, GETPUNC, farg); const char* full = strTemp ? strTemp : c; FcitxMessagesAddMessageAtLast(FcitxInputStateGetAuxDown(input), MSG_TIPS, _("Space for %s Enter for %s") , full, c); qpstate->enabled = true; *retval = IRV_DISPLAY_MESSAGE; return true; } return false; }
boolean QuickPhrasePreFilter(void* arg, FcitxKeySym sym, unsigned int state, INPUT_RETURN_VALUE *retval ) { QuickPhraseState *qpstate = (QuickPhraseState*) arg; FcitxInputState *input = FcitxInstanceGetInputState(qpstate->owner); if (qpstate->enabled) { FcitxKeySym keymain = FcitxHotkeyPadToMain(sym); if (FcitxHotkeyIsHotKeySimple(keymain, state)) { *retval = QuickPhraseDoInput(qpstate, keymain, state); if (*retval == IRV_TO_PROCESS) { if (strlen(FcitxInputStateGetRawInputBuffer(input)) == 0 && (FcitxHotkeyIsHotKey(keymain, state, QuickPhraseTriggerKeys[qpstate->triggerKey]) || FcitxHotkeyIsHotKey(keymain, state, FCITX_SPACE))) { char c[2] = { (char) (QuickPhraseTriggerKeys[qpstate->triggerKey][0].sym & 0xff), '\0'}; FcitxModuleFunctionArg farg; FcitxKeySym s = QuickPhraseTriggerKeys[qpstate->triggerKey][0].sym; farg.args[0] = &s; char* strTemp = InvokeFunction(qpstate->owner, FCITX_PUNC, GETPUNC, farg); strcpy(FcitxInputStateGetOutputString(input), strTemp ? strTemp : c); *retval = IRV_COMMIT_STRING; } else { char buf[2]; buf[0] = keymain; buf[1] = '\0'; if (strlen(FcitxInputStateGetRawInputBuffer(input)) < MAX_USER_INPUT) strcat(FcitxInputStateGetRawInputBuffer(input), buf); ShowQuickPhraseMessage(qpstate); *retval = QuickPhraseGetCandWords(qpstate); } } else return true; } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_BACKSPACE)) { size_t len = strlen(FcitxInputStateGetRawInputBuffer(input)); if (len > 0) FcitxInputStateGetRawInputBuffer(input)[--len] = '\0'; if (len == 0) { *retval = IRV_CLEAN; } else { ShowQuickPhraseMessage(qpstate); *retval = QuickPhraseGetCandWords(qpstate); } } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_ENTER)) { if (strlen(FcitxInputStateGetRawInputBuffer(input)) > 0) { strcpy(FcitxInputStateGetOutputString(input), FcitxInputStateGetRawInputBuffer(input)); QuickPhraseReset(qpstate); *retval = IRV_COMMIT_STRING; } else { char c[2] = { (char) (QuickPhraseTriggerKeys[qpstate->triggerKey][0].sym & 0xff), '\0'}; strcpy(FcitxInputStateGetOutputString(input), c); *retval = IRV_COMMIT_STRING; } } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_ESCAPE)) { *retval = IRV_CLEAN; } else *retval = IRV_DO_NOTHING; if (*retval == IRV_DISPLAY_MESSAGE) { FcitxMessagesSetMessageCount(FcitxInputStateGetAuxDown(input), 0); if (FcitxCandidateWordPageCount(FcitxInputStateGetCandidateList(input)) == 0) FcitxMessagesAddMessageAtLast(FcitxInputStateGetAuxDown(input), MSG_TIPS, "%s", _("Press Enter to input text")); } return true; } return false; }