static boolean PreInputProcessAutoEng(void* arg, FcitxKeySym sym, unsigned int state, INPUT_RETURN_VALUE *retval) { FcitxAutoEngState *autoEngState = (FcitxAutoEngState*)arg; FcitxInputState *input = FcitxInstanceGetInputState(autoEngState->owner); //boolean disableCheckUAZ = FcitxInstanceGetContextBoolean( // autoEngState->owner, CONTEXT_DISABLE_AUTOENG); //if (disableCheckUAZ) // return false; if (autoEngState->enable == false) return false; FcitxIM *im = FcitxInstanceGetCurrentIM(autoEngState->owner); if (im == NULL || strcmp("sogoupinyin", im->uniqueName) != 0) return false; FcitxKeySym keymain = FcitxHotkeyPadToMain(sym); if (!autoEngState->active) { if (FcitxHotkeyIsHotKeySimple(sym, state)) { AutoEngSetBuff(autoEngState, FcitxInputStateGetRawInputBuffer(input), keymain); if (SwitchToEng(autoEngState, autoEngState->buf)) { AutoEngActivate(autoEngState, input, retval); return true; } } return false; } if ((*retval = AutoEngCheckSelect(autoEngState, sym, state))) { return true; } else if (FcitxHotkeyIsHotKeySimple(keymain, state)) { *retval = AutoEngPushKey(autoEngState, keymain); } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_BACKSPACE)) { AutoEngSetBuffLen(autoEngState, --autoEngState->index); if (autoEngState->index == 0) { ResetAutoEng(autoEngState); *retval = IRV_CLEAN; } else { *retval = IRV_DISPLAY_MESSAGE; } } else if (FcitxHotkeyIsHotkeyCursorMove(sym, state)) { *retval = IRV_DO_NOTHING; return true; } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_ENTER)) { AutoEngCommit(autoEngState); ResetAutoEng(autoEngState); *retval = IRV_FLAG_UPDATE_INPUT_WINDOW | IRV_FLAG_RESET_INPUT; } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_ESCAPE)) { *retval = IRV_CLEAN; return true; } ShowAutoEngMessage(autoEngState, retval); return true; }
static boolean ProcessAutoEng(void* arg, FcitxKeySym sym, unsigned int state, INPUT_RETURN_VALUE *retval ) { FcitxAutoEngState* autoEngState = (FcitxAutoEngState*) arg; FcitxInputState* input = FcitxInstanceGetInputState(autoEngState->owner); boolean disableCheckUAZ = FcitxInstanceGetContextBoolean(autoEngState->owner, CONTEXT_DISABLE_AUTOENG); if (disableCheckUAZ) return false; if (autoEngState->active) { FcitxKeySym keymain = FcitxHotkeyPadToMain(sym); if (FcitxHotkeyIsHotKeySimple(keymain, state)) { if (autoEngState->index < MAX_USER_INPUT) { autoEngState->buf[autoEngState->index] = keymain; autoEngState->index++; autoEngState->buf[autoEngState->index] = '\0'; *retval = IRV_DISPLAY_MESSAGE; } else *retval = IRV_DO_NOTHING; } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_BACKSPACE)) { autoEngState->index -- ; autoEngState->buf[autoEngState->index] = '\0'; if (autoEngState->index == 0) { ResetAutoEng(autoEngState); *retval = IRV_CLEAN; } else *retval = IRV_DISPLAY_MESSAGE; } else if (FcitxHotkeyIsHotKey(sym, state, FCITX_ENTER)) { strcpy(FcitxInputStateGetOutputString(input), autoEngState->buf); ResetAutoEng(autoEngState); *retval = IRV_COMMIT_STRING; } ShowAutoEngMessage(autoEngState); return true; } if (FcitxHotkeyIsHotKeySimple(sym, state)) { if (FcitxInputStateGetRawInputBufferSize(input) == 0 && FcitxHotkeyIsHotKeyUAZ(sym, state)) { autoEngState->index = 1; autoEngState->buf[0] = sym; autoEngState->buf[1] = '\0'; *retval = IRV_DISPLAY_MESSAGE; FcitxInputStateSetShowCursor(input, false); autoEngState->index = strlen(autoEngState->buf); autoEngState->active = true; ShowAutoEngMessage(autoEngState); return true; } strncpy(autoEngState->buf, FcitxInputStateGetRawInputBuffer(input), MAX_USER_INPUT); if (strlen(autoEngState->buf) >= MAX_USER_INPUT - 1) return false; autoEngState->index = strlen(autoEngState->buf); autoEngState->buf[autoEngState->index ++ ] = sym; autoEngState->buf[autoEngState->index] = '\0'; if (SwitchToEng(autoEngState, autoEngState->buf)) { *retval = IRV_DISPLAY_MESSAGE; FcitxInputStateSetShowCursor(input, false); autoEngState->index = strlen(autoEngState->buf); autoEngState->active = true; ShowAutoEngMessage(autoEngState); return true; } } return false; }