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 UpdateVKMenu(FcitxUIMenu *menu) { FcitxVKState* vkstate = (FcitxVKState*) menu->priv; FcitxMenuClear(menu); int i; for (i = 0; i < vkstate->iVKCount; i ++) FcitxMenuAddMenuItem(&vkstate->vkmenu, vkstate->vks[i].strName, MENUTYPE_SIMPLE, NULL); if (vkstate->bVK) { FcitxMenuAddMenuItem(&vkstate->vkmenu, _("Close virtual keyboard"), MENUTYPE_SIMPLE, NULL); } menu->mark = vkstate->iCurrentVK; }
void UpdateSkinMenu(FcitxUIMenu* menu) { FcitxClassicUI* classicui = (FcitxClassicUI*) menu->priv; LoadSkinDirectory(classicui); FcitxMenuClear(menu); char **s; int i = 0; for (s = (char**) utarray_front(&classicui->skinBuf); s != NULL; s = (char**) utarray_next(&classicui->skinBuf, s)) { if (strcmp(*s, classicui->skinType) == 0) { menu->mark = i; } FcitxMenuAddMenuItem(menu, *s, MENUTYPE_SIMPLE, NULL); i ++; } }
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 UpdateMainMenu(FcitxUIMenu* menu) { FcitxClassicUI* classicui = (FcitxClassicUI*) menu->priv; FcitxInstance* instance = classicui->owner; FcitxMenuClear(menu); FcitxMenuAddMenuItem(menu, _("Online Help"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(menu, NULL, MENUTYPE_DIVLINE, NULL); boolean flag = false; FcitxUIStatus* status; UT_array* uistats = FcitxInstanceGetUIStats(instance); for (status = (FcitxUIStatus*) utarray_front(uistats); status != NULL; status = (FcitxUIStatus*) utarray_next(uistats, status) ) { FcitxClassicUIStatus* privstat = GetPrivateStatus(status); if (privstat == NULL || !status->visible || privstat->avail ) continue; flag = true; FcitxMenuAddMenuItemWithData(menu, status->shortDescription, MENUTYPE_SIMPLE, NULL, strdup(status->name)); } FcitxUIComplexStatus* compstatus; UT_array* uicompstats = FcitxInstanceGetUIComplexStats(instance); for (compstatus = (FcitxUIComplexStatus*) utarray_front(uicompstats); compstatus != NULL; compstatus = (FcitxUIComplexStatus*) utarray_next(uicompstats, compstatus) ) { FcitxClassicUIStatus* privstat = GetPrivateStatus(compstatus); if (privstat == NULL || !compstatus->visible || privstat->avail) continue; if (FcitxUIGetMenuByStatusName(instance, compstatus->name)) continue; flag = true; FcitxMenuAddMenuItemWithData(menu, compstatus->shortDescription, MENUTYPE_SIMPLE, NULL, strdup(compstatus->name)); } if (flag) FcitxMenuAddMenuItem(menu, 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) continue; if (!menup->visible) continue; if (menup->candStatusBind) { FcitxUIComplexStatus* compStatus = FcitxUIGetComplexStatusByName(instance, menup->candStatusBind); if (compStatus) { if (!compStatus->visible) continue; if (GetPrivateStatus(compStatus)->avail) continue; } } FcitxMenuAddMenuItem(menu, menup->name, MENUTYPE_SUBMENU, menup); } FcitxMenuAddMenuItem(menu, NULL, MENUTYPE_DIVLINE, NULL); FcitxMenuAddMenuItem(menu, _("Configure Current Input Method"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(menu, _("Configure"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(menu, _("Restart"), MENUTYPE_SIMPLE, NULL); FcitxMenuAddMenuItem(menu, _("Exit"), MENUTYPE_SIMPLE, NULL); }