void* LightUICreate(FcitxInstance* instance) { FcitxModuleFunctionArg arg; FcitxLightUI* lightui = fcitx_utils_malloc0(sizeof(FcitxLightUI)); FcitxAddon* lightuiaddon = FcitxAddonsGetAddonByName(FcitxInstanceGetAddons(instance), FCITX_LIGHT_UI_NAME); lightui->owner = instance; if (!LoadLightUIConfig(lightui)) { free(lightui); return NULL; } lightui->dpy = InvokeFunction(instance, FCITX_X11, GETDISPLAY, arg); if (lightui->dpy == NULL) { free(lightui); return NULL; } lightui->isfallback = FcitxUIIsFallback(instance, lightuiaddon); lightui->iScreen = DefaultScreen(lightui->dpy); CreateFont(lightui); lightui->protocolAtom = XInternAtom (lightui->dpy, "WM_PROTOCOLS", False); lightui->killAtom = XInternAtom (lightui->dpy, "WM_DELETE_WINDOW", False); /* Main Menu Initial */ FcitxMenuInit(&lightui->mainMenu); FcitxUIMenu **menupp; UT_array* uimenus = FcitxInstanceGetUIMenus(instance); for (menupp = (FcitxUIMenu **) utarray_front(uimenus); menupp != NULL; menupp = (FcitxUIMenu **) utarray_next(uimenus, menupp) ) { FcitxUIMenu * menup = *menupp; if (!menup->isSubMenu) FcitxMenuAddMenuItem(&lightui->mainMenu, menup->name, MENUTYPE_SUBMENU, menup); } FcitxMenuAddMenuItem(&lightui->mainMenu, NULL, MENUTYPE_DIVLINE, NULL); FcitxMenuAddMenuItem(&lightui->mainMenu, _("Configure"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(&lightui->mainMenu, _("Exit"), MENUTYPE_SIMPLE, NULL); lightui->mainMenu.MenuAction = MainMenuAction; lightui->mainMenu.priv = lightui; lightui->mainMenu.mark = -1; lightui->inputWindow = CreateInputWindow(lightui); lightui->mainWindow = CreateMainWindow(lightui); lightui->trayWindow = CreateTrayWindow(lightui); lightui->mainMenuWindow = CreateMainMenuWindow(lightui); FcitxIMEventHook resethk; resethk.arg = lightui; resethk.func = LightUIInputReset; FcitxInstanceRegisterResetInputHook(instance, resethk); return lightui; }
void InitSkinMenu(FcitxClassicUI* classicui) { utarray_init(&classicui->skinBuf, &ut_str_icd); FcitxMenuInit(&classicui->skinMenu); classicui->skinMenu.candStatusBind = NULL; classicui->skinMenu.name = strdup(_("Skin")); classicui->skinMenu.UpdateMenu = UpdateSkinMenu; classicui->skinMenu.MenuAction = SkinMenuAction; classicui->skinMenu.priv = classicui; classicui->skinMenu.isSubMenu = false; }
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* ClassicUICreate(FcitxInstance* instance) { FcitxAddon* classicuiaddon = FcitxAddonsGetAddonByName(FcitxInstanceGetAddons(instance), FCITX_CLASSIC_UI_NAME); FcitxModuleFunctionArg arg; FcitxClassicUI* classicui = fcitx_utils_malloc0(sizeof(FcitxClassicUI)); classicui->owner = instance; if (!LoadClassicUIConfig(classicui)) { free(classicui); return NULL; } if (GetSkinDesc() == NULL) { free(classicui); return NULL; } classicui->dpy = InvokeFunction(instance, FCITX_X11, GETDISPLAY, arg); if (classicui->dpy == NULL) { free(classicui); return NULL; } if (LoadSkinConfig(&classicui->skin, &classicui->skinType)) { free(classicui); return NULL; } classicui->isfallback = FcitxUIIsFallback(instance, classicuiaddon); classicui->iScreen = DefaultScreen(classicui->dpy); classicui->protocolAtom = XInternAtom(classicui->dpy, "WM_PROTOCOLS", False); classicui->killAtom = XInternAtom(classicui->dpy, "WM_DELETE_WINDOW", False); InitSkinMenu(classicui); FcitxUIRegisterMenu(instance, &classicui->skinMenu); /* Main Menu Initial */ FcitxMenuInit(&classicui->mainMenu); FcitxMenuAddMenuItem(&classicui->mainMenu, _("About Fcitx"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(&classicui->mainMenu, _("Online Help"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(&classicui->mainMenu, NULL, MENUTYPE_DIVLINE, NULL); FcitxUIMenu **menupp; UT_array* uimenus = FcitxInstanceGetUIMenus(instance); for (menupp = (FcitxUIMenu **) utarray_front(uimenus); menupp != NULL; menupp = (FcitxUIMenu **) utarray_next(uimenus, menupp) ) { FcitxUIMenu * menup = *menupp; if (!menup->isSubMenu) FcitxMenuAddMenuItem(&classicui->mainMenu, menup->name, MENUTYPE_SUBMENU, menup); } FcitxMenuAddMenuItem(&classicui->mainMenu, NULL, MENUTYPE_DIVLINE, NULL); FcitxMenuAddMenuItem(&classicui->mainMenu, _("Configure"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(&classicui->mainMenu, _("Exit"), MENUTYPE_SIMPLE, NULL); classicui->mainMenu.MenuAction = MainMenuAction; classicui->mainMenu.priv = classicui; classicui->mainMenu.mark = -1; classicui->inputWindow = CreateInputWindow(classicui); classicui->mainWindow = CreateMainWindow(classicui); classicui->trayWindow = CreateTrayWindow(classicui); classicui->aboutWindow = CreateAboutWindow(classicui); classicui->messageWindow = CreateMessageWindow(classicui); classicui->mainMenuWindow = CreateMainMenuWindow(classicui); FcitxIMEventHook resethk; resethk.arg = classicui; resethk.func = ClassicUIInputReset; FcitxInstanceRegisterResetInputHook(instance, resethk); DisplaySkin(classicui, classicui->skinType); /* ensure order ! */ AddFunction(classicuiaddon, ClassicUILoadImage); AddFunction(classicuiaddon, ClassicUIGetKeyBoardFontColor); AddFunction(classicuiaddon, ClassicUIGetFont); return classicui; }
static void* FcitxRimeCreate(FcitxInstance* instance) { FcitxRime* rime = (FcitxRime*) fcitx_utils_malloc0(sizeof(FcitxRime)); rime->owner = instance; rime->api = rime_get_api(); rime->firstRun = true; if (!rime->api) { free(rime); return NULL; } FcitxRimeStart(rime, false); FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.Init = FcitxRimeInit; iface.ResetIM = FcitxRimeReset; iface.DoInput = FcitxRimeDoInput; iface.DoReleaseInput = FcitxRimeDoReleaseInput; iface.GetCandWords = FcitxRimeGetCandWords; iface.ReloadConfig = FcitxRimeReloadConfig; FcitxInstanceRegisterIMv2( instance, rime, "rime", _("Rime"), "rime", iface, 10, "zh" ); FcitxUIRegisterComplexStatus( instance, rime, "rime-enzh", "", "", FcitxRimeToggleEnZh, FcitxRimeGetIMIcon); FcitxUIRegisterComplexStatus( instance, rime, "rime-deploy", _("Deploy"), _("Deploy"), FcitxRimeToggleDeploy, FcitxRimeGetDeployIcon); FcitxUIRegisterComplexStatus( instance, rime, "rime-sync", _("Synchronize"), _("Synchronize"), FcitxRimeToggleSync, FcitxRimeGetSyncIcon); FcitxUISetStatusVisable(instance, "rime-enzh", false); FcitxUISetStatusVisable(instance, "rime-sync", false); FcitxUISetStatusVisable(instance, "rime-deploy", false); FcitxIMEventHook hk; hk.arg = rime; hk.func = FcitxRimeResetUI; FcitxInstanceRegisterResetInputHook(instance, hk); FcitxMenuInit(&rime->schemamenu); rime->schemamenu.name = strdup(_("Schema List")); rime->schemamenu.candStatusBind = strdup("rime-enzh"); rime->schemamenu.MenuAction = FcitxRimeSchemaMenuAction; rime->schemamenu.UpdateMenu = FcitxRimeSchemaMenuUpdate; rime->schemamenu.priv = rime; rime->schemamenu.isSubMenu = false; FcitxUIRegisterMenu(rime->owner, &rime->schemamenu); return rime; }
void* ClassicUICreate(FcitxInstance* instance) { FcitxAddon* classicuiaddon = FcitxAddonsGetAddonByName(FcitxInstanceGetAddons(instance), FCITX_CLASSIC_UI_NAME); FcitxClassicUI* classicui = fcitx_utils_malloc0(sizeof(FcitxClassicUI)); classicui->owner = instance; if (!LoadClassicUIConfig(classicui)) { free(classicui); return NULL; } if (GetSkinDesc() == NULL) { free(classicui); return NULL; } classicui->dpy = FcitxX11GetDisplay(instance); if (classicui->dpy == NULL) { free(classicui); return NULL; } FcitxX11GetDPI(instance, &classicui->dpi, NULL); if (classicui->dpi <= 0) classicui->dpi = 96; if (LoadSkinConfig(&classicui->skin, &classicui->skinType)) { free(classicui); return NULL; } classicui->isfallback = FcitxUIIsFallback(instance, classicuiaddon); classicui->iScreen = DefaultScreen(classicui->dpy); classicui->protocolAtom = XInternAtom(classicui->dpy, "WM_PROTOCOLS", False); classicui->killAtom = XInternAtom(classicui->dpy, "WM_DELETE_WINDOW", False); InitSkinMenu(classicui); FcitxUIRegisterMenu(instance, &classicui->skinMenu); /* Main Menu Initial */ FcitxMenuInit(&classicui->mainMenu); classicui->mainMenu.UpdateMenu = UpdateMainMenu; classicui->mainMenu.MenuAction = MainMenuAction; classicui->mainMenu.priv = classicui; classicui->mainMenu.mark = -1; classicui->inputWindow = CreateInputWindow(classicui); classicui->mainWindow = CreateMainWindow(classicui); classicui->trayWindow = CreateTrayWindow(classicui); classicui->messageWindow = CreateMessageWindow(classicui); classicui->mainMenuWindow = CreateMainMenuWindow(classicui); FcitxIMEventHook resethk; resethk.arg = classicui; resethk.func = ClassicUIInputReset; FcitxInstanceRegisterResetInputHook(instance, resethk); DisplaySkin(classicui, classicui->skinType); /* ensure order ! */ FcitxModuleAddFunction(classicuiaddon, ClassicUILoadImage); FcitxModuleAddFunction(classicuiaddon, ClassicUIGetKeyBoardFontColor); FcitxModuleAddFunction(classicuiaddon, ClassicUIGetFont); return classicui; }