예제 #1
0
파일: ui.c 프로젝트: hiroshiyui/fcitx
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);
    }
}
예제 #2
0
파일: ui.c 프로젝트: hiroshiyui/fcitx
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);
    }
}
예제 #3
0
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;
}
예제 #4
0
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;
}
예제 #5
0
파일: chttrans.c 프로젝트: haobug/fcitx
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;
}
예제 #6
0
파일: punc.c 프로젝트: adaptee/fcitx
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;
}
예제 #7
0
파일: eim.c 프로젝트: pkg-ime/fcitx-chewing
__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
}
예제 #8
0
파일: ui.c 프로젝트: hiroshiyui/fcitx
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);
    }
}
예제 #9
0
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;
}
예제 #10
0
파일: ui.c 프로젝트: hiroshiyui/fcitx
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);
    }
}
예제 #11
0
파일: ui.c 프로젝트: hiroshiyui/fcitx
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;
}