FCITX_EXPORT_API void FcitxUISetStatusVisable(FcitxInstance* instance, const char* name, boolean visible) { FcitxUIStatus *status = FcitxUIGetStatusByName(instance, name); if (!status) { FcitxUIComplexStatus *compstatus = FcitxUIGetComplexStatusByName(instance, name); if (!compstatus) return; if (compstatus->visible != visible) { compstatus->visible = visible; if (UI_FUNC_IS_VALID(UpdateComplexStatus)) instance->ui->ui->UpdateComplexStatus(instance->ui->addonInstance, compstatus); } return; } if (status->visible != visible) { status->visible = visible; if (UI_FUNC_IS_VALID(UpdateStatus)) instance->ui->ui->UpdateStatus(instance->ui->addonInstance, status); } }
FCITX_EXPORT_API void FcitxUIUpdateStatus(FcitxInstance* instance, const char* name) { FcitxLog(DEBUG, "Update Status for %s", name); FcitxUIStatus *status = FcitxUIGetStatusByName(instance, name); if (status != NULL) { if (status->toggleStatus) status->toggleStatus(status->arg); if (UI_FUNC_IS_VALID(UpdateStatus)) instance->ui->ui->UpdateStatus(instance->ui->addonInstance , status); } else { FcitxUIComplexStatus *compstatus = FcitxUIGetComplexStatusByName(instance, name); if (!compstatus) return; if (compstatus->toggleStatus) compstatus->toggleStatus(compstatus->arg); if (UI_FUNC_IS_VALID(UpdateComplexStatus)) instance->ui->ui->UpdateComplexStatus(instance->ui->addonInstance , compstatus); } }
char* ProcessFullWidthChar(void* arg, const char* str) { FcitxFullWidthChar* fwchar = (FcitxFullWidthChar*)arg; FcitxProfile* profile = FcitxInstanceGetProfile(fwchar->owner); FcitxUIStatus *status = FcitxUIGetStatusByName(fwchar->owner, "fullwidth"); if (profile->bUseFullWidthChar && status->visible) { size_t i = 0, ret_len = 0, len = fcitx_utf8_strlen(str); char* ret = (char *) fcitx_utils_malloc0(sizeof(char) * (UTF8_MAX_LENGTH * len + 1)); const char* ps = str; ret[0] = '\0'; for (; i < len; ++i) { unsigned int wc; int chr_len = fcitx_utf8_char_len(ps); char *nps; nps = fcitx_utf8_get_char(ps , &wc); if (chr_len == 1 && ps[0] >= '\x20' && ps[0] <= '\x7e') { strcat(ret, sCornerTrans[ps[0] - 32]); ret_len += strlen(sCornerTrans[ps[0] - 32]); } else { strncat(ret, ps, chr_len); ret_len += chr_len; } ps = nps; } ret[ret_len] = '\0'; return ret; } else return NULL; }
INPUT_RETURN_VALUE ToggleFullWidthStateWithHotkey(void* arg) { FcitxFullWidthChar* fwchar = (FcitxFullWidthChar*)arg; FcitxUIStatus *status = FcitxUIGetStatusByName(fwchar->owner, "fullwidth"); if (status->visible) { FcitxUIUpdateStatus(fwchar->owner, "fullwidth"); return IRV_DO_NOTHING; } else return IRV_TO_PROCESS; }
INPUT_RETURN_VALUE HotkeyToggleChttransState(void* arg) { FcitxChttrans* transState = (FcitxChttrans*) arg; FcitxUIStatus *status = FcitxUIGetStatusByName(transState->owner, "chttrans"); if (status->visible){ FcitxUIUpdateStatus(transState->owner, "chttrans"); return IRV_DO_NOTHING; } else return IRV_TO_PROCESS; }
INPUT_RETURN_VALUE TogglePuncStateWithHotkey(void* arg) { FcitxPuncState* puncState = (FcitxPuncState*)arg; FcitxUIStatus *status = FcitxUIGetStatusByName(puncState->owner, "punc"); if (status->visible){ FcitxUIUpdateStatus(puncState->owner, "punc"); return IRV_DO_NOTHING; } else return IRV_TO_PROCESS; }
__EXPORT_API void FcitxChewingReset(void* arg) { FcitxChewing* chewing = (FcitxChewing*) arg; chewing_Reset(chewing->context); #if 0 FcitxUIStatus* puncStatus = FcitxUIGetStatusByName(chewing->owner, "punc"); if (puncStatus) { if (puncStatus->getCurrentStatus(puncStatus->arg)) chewing_set_ShapeMode(chewing->context, FULLSHAPE_MODE); else chewing_set_ShapeMode(chewing->context, HALFSHAPE_MODE); } #endif }
FCITX_EXPORT_API void FcitxUIRefreshStatus(FcitxInstance* instance, const char* name) { FcitxUIStatus *status = FcitxUIGetStatusByName(instance, name); if (status != NULL) { if (UI_FUNC_IS_VALID(UpdateStatus)) instance->ui->ui->UpdateStatus(instance->ui->addonInstance , status); } else { FcitxUIComplexStatus *compstatus = FcitxUIGetComplexStatusByName(instance, name); if (!compstatus) return; if (UI_FUNC_IS_VALID(UpdateComplexStatus)) instance->ui->ui->UpdateComplexStatus(instance->ui->addonInstance , compstatus); } }
boolean FullWidthPostFilter(void* arg, FcitxKeySym sym, unsigned int state, INPUT_RETURN_VALUE *retval ) { FcitxFullWidthChar* fwchar = (FcitxFullWidthChar*)arg; FcitxProfile* profile = FcitxInstanceGetProfile(fwchar->owner); if (*retval != IRV_TO_PROCESS) return false; FcitxUIStatus *status = FcitxUIGetStatusByName(fwchar->owner, "fullwidth"); if (profile->bUseFullWidthChar && status->visible && FcitxHotkeyIsHotKeySimple(sym, state)) { sprintf(FcitxInputStateGetOutputString(FcitxInstanceGetInputState(fwchar->owner)), "%s", sCornerTrans[sym - 32]); *retval = IRV_COMMIT_STRING; return true; } return false; }
FCITX_EXPORT_API void FcitxUISetStatusString(FcitxInstance* instance, const char* name, const char* shortDesc, const char* longDesc) { char** pShort = NULL, **pLong = NULL; FcitxUIStatus *status = FcitxUIGetStatusByName(instance, name); FcitxUIComplexStatus *compstatus = NULL; if (!status) { compstatus = FcitxUIGetComplexStatusByName(instance, name); if (!compstatus) return; pShort = &compstatus->shortDescription; pLong = &compstatus->longDescription; } else { pShort = &status->shortDescription; pLong = &status->longDescription; } if (*pShort) free(*pShort); if (*pLong) free(*pLong); *pShort = strdup(shortDesc); *pLong = strdup(longDesc); if (status){ if (UI_FUNC_IS_VALID(UpdateStatus)) instance->ui->ui->UpdateStatus(instance->ui->addonInstance, status); } else if (compstatus) { if (UI_FUNC_IS_VALID(UpdateComplexStatus)) instance->ui->ui->UpdateComplexStatus(instance->ui->addonInstance, compstatus); } }
FCITX_EXPORT_API FcitxUIMenu* FcitxUIGetMenuByStatusName(FcitxInstance* instance, const char* name) { FcitxUIStatus* status = FcitxUIGetStatusByName(instance, name); if (!status) { FcitxUIComplexStatus* compstatus = FcitxUIGetComplexStatusByName(instance, name); if (!compstatus) return NULL; } UT_array* uimenus = &instance->uimenus; FcitxUIMenu** menupp, *menup = NULL; for (menupp = (FcitxUIMenu **) utarray_front(uimenus); menupp != NULL; menupp = (FcitxUIMenu **) utarray_next(uimenus, menupp) ) { if ((*menupp)->candStatusBind && strcmp((*menupp)->candStatusBind, name) == 0) { menup = *menupp; break; } } return menup; }