void* UnicodeCreate(FcitxInstance* instance) { UnicodeModule* uni = fcitx_utils_new(UnicodeModule); uni->owner = instance; if (!UnicodeLoadConfig(uni)) { free(uni); return NULL; } FcitxIMEventHook imhk; imhk.arg = uni; imhk.func = UnicodeReset; FcitxInstanceRegisterResetInputHook(instance, imhk); FcitxKeyFilterHook kfhk; kfhk.arg = uni; kfhk.func = UnicodePreFilter; FcitxInstanceRegisterPreInputFilter(instance, kfhk); kfhk.arg = &uni->enable; kfhk.func = FcitxDummyReleaseInputHook; FcitxInstanceRegisterPreReleaseInputFilter(instance, kfhk); FcitxHotkeyHook hkhk; hkhk.arg = uni; hkhk.hotkey = uni->key; hkhk.hotkeyhandle = UnicodeHotkey; FcitxInstanceRegisterHotkeyFilter(instance, hkhk); return uni; }
void *AutoEngCreate(FcitxInstance *instance) { FcitxAutoEngState* autoEngState = fcitx_utils_new(FcitxAutoEngState); autoEngState->owner = instance; LoadAutoEng(autoEngState); FcitxKeyFilterHook khk; khk.arg = autoEngState; khk.func = PreInputProcessAutoEng; FcitxInstanceRegisterPreInputFilter(instance, khk); khk.func = PostInputProcessAutoEng; FcitxInstanceRegisterPostInputFilter(instance, khk); FcitxIMEventHook rhk; rhk.arg = autoEngState; rhk.func = ResetAutoEng; FcitxInstanceRegisterResetInputHook(instance, rhk); FcitxInstanceRegisterWatchableContext(instance, CONTEXT_DISABLE_AUTOENG, FCT_Boolean, FCF_ResetOnInputMethodChange); ResetAutoEng(autoEngState); return autoEngState; }
static void* ClipboardCreate(FcitxInstance *instance) { FcitxClipboard *clipboard = fcitx_utils_new(FcitxClipboard); clipboard->owner = instance; if (!FcitxClipboardLoadConfig(&clipboard->config)) { ClipboardDestroy(clipboard); return NULL; } ClipboardInitReadHistory(clipboard); /* #ifdef ENABLE_X11 */ ClipboardInitX11(clipboard); /* #endif */ ApplyClipboardConfig(clipboard); FcitxKeyFilterHook key_hook = { .arg = clipboard, .func = ClipboardPreHook }; FcitxInstanceRegisterPreInputFilter(instance, key_hook); key_hook.func = ClipboardPostHook; FcitxInstanceRegisterPostInputFilter(instance, key_hook); FcitxIMEventHook reset_hook = { .arg = clipboard, .func = ClipboardReset }; FcitxInstanceRegisterResetInputHook(instance, reset_hook); FcitxAddon *self = FcitxClipboardGetAddon(instance); FcitxModuleAddFunction(self, ClipboardGetPrimary); FcitxModuleAddFunction(self, ClipboardGetClipboard); return clipboard; }
void *QuickPhraseCreate(FcitxInstance *instance) { QuickPhraseState *qpstate = fcitx_utils_new(QuickPhraseState); qpstate->owner = instance; qpstate->enabled = false; if (!LoadQuickPhraseConfig(&qpstate->config)) { free(qpstate); return NULL; } LoadQuickPhrase(qpstate); FcitxKeyFilterHook hk; hk.arg = qpstate; hk.func = QuickPhrasePostFilter; FcitxInstanceRegisterPostInputFilter(instance, hk); hk.func = QuickPhrasePreFilter; FcitxInstanceRegisterPreInputFilter(instance, hk); FcitxIMEventHook resethk; resethk.arg = qpstate; resethk.func = QuickPhraseReset; FcitxInstanceRegisterResetInputHook(instance, resethk); FcitxInstanceRegisterWatchableContext(instance, CONTEXT_DISABLE_QUICKPHRASE, FCT_Boolean, FCF_ResetOnInputMethodChange); FcitxQuickPhraseAddFunctions(instance); return qpstate; }
static void* PinyinEnhanceCreate(FcitxInstance *instance) { PinyinEnhance *pyenhance = fcitx_utils_new(PinyinEnhance); pyenhance->owner = instance; if (!PinyinEnhanceLoadConfig(&pyenhance->config)) { free(pyenhance); return NULL; } PinyinEnhanceSymInit(pyenhance); FcitxIMEventHook event_hook = { .arg = pyenhance, .func = PinyinEnhanceAddCandidateWord, }; FcitxInstanceRegisterUpdateCandidateWordHook(instance, event_hook); event_hook.func = PinyinEnhanceResetHook; FcitxInstanceRegisterResetInputHook(instance, event_hook); FcitxKeyFilterHook key_hook = { .arg = pyenhance, .func = PinyinEnhancePostInput }; FcitxInstanceRegisterPostInputFilter(pyenhance->owner, key_hook); key_hook.func = PinyinEnhancePreInput; FcitxInstanceRegisterPreInputFilter(pyenhance->owner, key_hook); FcitxPinyinEnhanceAddFunctions(instance); return pyenhance; }
void * QuickPhraseCreate(FcitxInstance *instance) { QuickPhraseState *qpstate = fcitx_utils_malloc0(sizeof(QuickPhraseState)); qpstate->owner = instance; qpstate->enabled = false; if (!LoadQuickPhraseConfig(&qpstate->config)) { free(qpstate); return NULL; } LoadQuickPhrase(qpstate); FcitxKeyFilterHook hk; hk.arg = qpstate; hk.func = QuickPhrasePostFilter; FcitxInstanceRegisterPostInputFilter(instance, hk); hk.func = QuickPhrasePreFilter; FcitxInstanceRegisterPreInputFilter(instance, hk); FcitxIMEventHook resethk; resethk.arg = qpstate; resethk.func = QuickPhraseReset; FcitxInstanceRegisterResetInputHook(instance, resethk); FcitxInstanceRegisterWatchableContext(instance, CONTEXT_DISABLE_QUICKPHRASE, FCT_Boolean, FCF_ResetOnInputMethodChange); FcitxAddon* addon = FcitxAddonsGetAddonByName( FcitxInstanceGetAddons(instance), FCITX_QUICKPHRASE_NAME); FcitxModuleAddFunction(addon, QuickPhraseLaunch); return qpstate; }
void* IMSelectorCreate(FcitxInstance* instance) { IMSelector* imselector = fcitx_utils_malloc0(sizeof(IMSelector)); imselector->owner = instance; if (!LoadIMSelectorConfig(imselector)) { free(imselector); return NULL; } FcitxKeyFilterHook hk; hk.arg = imselector; hk.func = IMSelectorPreFilter; FcitxInstanceRegisterPreInputFilter(instance, hk); FcitxHotkeyHook hkhk; hkhk.arg = imselector; hkhk.hotkeyhandle = IMSelectorLocalTrigger; hkhk.hotkey = imselector->localKey; FcitxInstanceRegisterHotkeyFilter(instance, hkhk); hkhk.arg = imselector; hkhk.hotkeyhandle = IMSelectorGlobalTrigger; hkhk.hotkey = imselector->globalKey; FcitxInstanceRegisterHotkeyFilter(instance, hkhk); FcitxIMEventHook resethk; resethk.arg = imselector; resethk.func = IMSelectorReset; FcitxInstanceRegisterResetInputHook(instance, resethk); return imselector; }
void* PuncCreate(FcitxInstance* instance) { FcitxPuncState* puncState = fcitx_utils_malloc0(sizeof(FcitxPuncState)); FcitxAddon* puncaddon = FcitxAddonsGetAddonByName(FcitxInstanceGetAddons(instance), FCITX_PUNC_NAME); puncState->owner = instance; LoadPuncDict(puncState); FcitxKeyFilterHook hk; hk.arg = puncState; hk.func = ProcessPunc; FcitxInstanceRegisterPostInputFilter(instance, hk); hk.func = PuncPreFilter; FcitxInstanceRegisterPreInputFilter(instance, hk); puncState->cLastIsAutoConvert = '\0'; puncState->bLastIsNumber = false; FcitxHotkeyHook hotkey; hotkey.hotkey = FcitxInstanceGetGlobalConfig(instance)->hkPunc; hotkey.hotkeyhandle = TogglePuncStateWithHotkey; hotkey.arg = puncState; FcitxInstanceRegisterHotkeyFilter(instance, hotkey); FcitxIMEventHook hook; hook.arg = puncState; hook.func = ResetPunc; FcitxInstanceRegisterResetInputHook(instance, hook); hook.func = ResetPuncWhichStatus; FcitxInstanceRegisterInputUnFocusHook(instance, hook); FcitxInstanceWatchContext(instance, CONTEXT_IM_LANGUAGE, PuncLanguageChanged, puncState); FcitxProfile* profile = FcitxInstanceGetProfile(instance); FcitxUIRegisterStatus(instance, puncState, "punc", profile->bUseWidePunc ? _("Full width punct") : _("Latin punct"), _("Toggle Full Width Punctuation"), TogglePuncState, GetPuncState); puncState->slot = FcitxInstanceAllocDataForIC(instance, PuncWhichAlloc, PuncWhichCopy, PuncWhichFree, puncState); FcitxModuleAddFunction(puncaddon, PuncGetPunc); FcitxModuleAddFunction(puncaddon, PuncGetPunc2); return puncState; }
void *VKCreate(FcitxInstance* instance) { FcitxVKState *vkstate = fcitx_utils_malloc0(sizeof(FcitxVKState)); FcitxGlobalConfig* config = FcitxInstanceGetGlobalConfig(instance); vkstate->owner = instance; FcitxHotkeyHook hotkey; hotkey.hotkey = config->hkVK; hotkey.hotkeyhandle = ToggleVKStateWithHotkey; hotkey.arg = vkstate; FcitxInstanceRegisterHotkeyFilter(instance, hotkey); FcitxUIRegisterStatus(instance, vkstate, "vk", _("Toggle Virtual Keyboard"), _("Virtual Keyboard State"), ToggleVKState, GetVKState); LoadVKMapFile(vkstate); FcitxKeyFilterHook hk; hk.arg = vkstate ; hk.func = VKPreFilter; FcitxInstanceRegisterPreInputFilter(instance, hk); FcitxIMEventHook resethk; resethk.arg = vkstate; resethk.func = VKReset; FcitxInstanceRegisterTriggerOnHook(instance, resethk); FcitxInstanceRegisterTriggerOffHook(instance, resethk); resethk.func = VKUpdate; FcitxInstanceRegisterInputFocusHook(instance, resethk); FcitxInstanceRegisterInputUnFocusHook(instance, resethk); FcitxMenuInit(&vkstate->vkmenu); vkstate->vkmenu.candStatusBind = strdup("vk"); vkstate->vkmenu.name = strdup(_("Virtual Keyboard")); vkstate->vkmenu.UpdateMenu = UpdateVKMenu; vkstate->vkmenu.MenuAction = VKMenuAction; vkstate->vkmenu.priv = vkstate; vkstate->vkmenu.isSubMenu = false; FcitxUIRegisterMenu(instance, &vkstate->vkmenu); return vkstate; }
void* IMSelectorCreate(FcitxInstance* instance) { IMSelector* imselector = fcitx_utils_malloc0(sizeof(IMSelector)); imselector->owner = instance; if (!LoadIMSelectorConfig(imselector)) { free(imselector); return NULL; } FcitxKeyFilterHook hk; hk.arg = imselector; hk.func = IMSelectorPreFilter; FcitxInstanceRegisterPreInputFilter(instance, hk); hk.arg = &imselector->triggered; hk.func = FcitxDummyReleaseInputHook; FcitxInstanceRegisterPreReleaseInputFilter(instance, hk); FcitxHotkeyHook hkhk; hkhk.arg = imselector; hkhk.hotkeyhandle = IMSelectorLocalTrigger; hkhk.hotkey = imselector->localKey; FcitxInstanceRegisterHotkeyFilter(instance, hkhk); hkhk.arg = imselector; hkhk.hotkeyhandle = IMSelectorGlobalTrigger; hkhk.hotkey = imselector->globalKey; FcitxInstanceRegisterHotkeyFilter(instance, hkhk); hkhk.arg = imselector; hkhk.hotkeyhandle = IMSelectorClearLocal; hkhk.hotkey = imselector->clearLocalKey; FcitxInstanceRegisterHotkeyFilter(instance, hkhk); /* this key is ignore the very first input method which is for inactive */ #define _ADD_HANDLE(X, ISGLOBAL) \ do { \ SelectorHandle* handle = &imselector->handle[ISGLOBAL][X - 1]; \ handle->global = ISGLOBAL; \ handle->idx = X; \ handle->imselector = imselector; \ hkhk.arg = handle; \ hkhk.hotkeyhandle = IMSelectorSelect; \ hkhk.hotkey = imselector->selectorKey[ISGLOBAL][X - 1]; \ FcitxInstanceRegisterHotkeyFilter(instance, hkhk); \ } while(0); _ADD_HANDLE(1, false); _ADD_HANDLE(2, false); _ADD_HANDLE(3, false); _ADD_HANDLE(4, false); _ADD_HANDLE(5, false); _ADD_HANDLE(6, false); _ADD_HANDLE(7, false); _ADD_HANDLE(8, false); _ADD_HANDLE(9, false); _ADD_HANDLE(1, true); _ADD_HANDLE(2, true); _ADD_HANDLE(3, true); _ADD_HANDLE(4, true); _ADD_HANDLE(5, true); _ADD_HANDLE(6, true); _ADD_HANDLE(7, true); _ADD_HANDLE(8, true); _ADD_HANDLE(9, true); FcitxIMEventHook resethk; resethk.arg = imselector; resethk.func = IMSelectorReset; FcitxInstanceRegisterResetInputHook(instance, resethk); return imselector; }