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; }
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 *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; }
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; }
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* FullWidthCharCreate(FcitxInstance* instance) { FcitxFullWidthChar* fwchar = fcitx_utils_malloc0(sizeof(FcitxFullWidthChar)); FcitxGlobalConfig* config = FcitxInstanceGetGlobalConfig(instance); fwchar->owner = instance; FcitxStringFilterHook hk; hk.arg = fwchar; hk.func = ProcessFullWidthChar; FcitxInstanceRegisterCommitFilter(instance, hk); FcitxKeyFilterHook phk; phk.arg = fwchar; phk.func = FullWidthPostFilter; FcitxInstanceRegisterPostInputFilter(instance, phk); FcitxHotkeyHook hotkey; hotkey.hotkey = config->hkFullWidthChar; hotkey.hotkeyhandle = ToggleFullWidthStateWithHotkey; hotkey.arg = fwchar; FcitxInstanceRegisterHotkeyFilter(instance, hotkey); FcitxUIRegisterStatus(instance, fwchar, "fullwidth", _("Full Width Character"), _("Full Width Character"), ToggleFullWidthState, GetFullWidthState); return fwchar; }
void* FullWidthCharCreate(FcitxInstance* instance) { FcitxFullWidthChar* fwchar = fcitx_utils_malloc0(sizeof(FcitxFullWidthChar)); FcitxGlobalConfig* config = FcitxInstanceGetGlobalConfig(instance); fwchar->owner = instance; FcitxStringFilterHook hk; hk.arg = fwchar; hk.func = ProcessFullWidthChar; FcitxInstanceRegisterCommitFilter(instance, hk); FcitxKeyFilterHook phk; phk.arg = fwchar; phk.func = FullWidthPostFilter; FcitxInstanceRegisterPostInputFilter(instance, phk); FcitxHotkeyHook hotkey; hotkey.hotkey = config->hkFullWidthChar; hotkey.hotkeyhandle = ToggleFullWidthStateWithHotkey; hotkey.arg = fwchar; FcitxInstanceRegisterHotkeyFilter(instance, hotkey); FcitxProfile* profile = FcitxInstanceGetProfile(instance); FcitxUIRegisterStatus(instance, fwchar, "fullwidth", profile->bUseFullWidthChar ? _("Full width Character") : _("Half width Character"), _("Toggle Half/Full width Character"), ToggleFullWidthState, GetFullWidthState); FcitxInstanceRegisterWatchableContext(instance, CONTEXT_DISABLE_FULLWIDTH, FCT_Boolean, FCF_ResetOnInputMethodChange); FcitxInstanceWatchContext(instance, CONTEXT_DISABLE_FULLWIDTH, DisableFullWidthCharChanged, fwchar); return fwchar; }
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; }