Exemple #1
0
FCITX_EXPORT_API
void FcitxUISwitchToFallback(struct _FcitxInstance* instance)
{
    if (!instance->fallbackuiName || instance->ui != instance->uinormal)
        return;

    if (!instance->uifallback) {
        // load fallback ui
        FcitxAddon* fallbackAddon = FcitxAddonsGetAddonByName(&instance->addons, instance->fallbackuiName);
        if (!fallbackAddon || !fallbackAddon->bEnabled || !FcitxUILoadInternal(instance, fallbackAddon)) {
            // reset fallbackuiName, never load it again and again
            free(instance->fallbackuiName);
            instance->fallbackuiName = NULL;
            return;
        }
        instance->uifallback = fallbackAddon;
        if (instance->uifallback->ui->Suspend)
            instance->uifallback->ui->Suspend(instance->uifallback->addonInstance);
    }

    if (instance->uinormal->ui->Suspend)
        instance->uinormal->ui->Suspend(instance->uinormal->addonInstance);

    if (instance->uifallback->ui->Resume)
        instance->uifallback->ui->Resume(instance->uifallback->addonInstance);

    instance->ui = instance->uifallback;
}
Exemple #2
0
FCITX_EXPORT_API
void FcitxUILoad(FcitxInstance* instance)
{
    UT_array* addons = &instance->addons;
    FcitxAddon *addon;

    for (addon = (FcitxAddon *) utarray_front(addons);
            addon != NULL;
            addon = (FcitxAddon *) utarray_next(addons, addon)) {
        if (addon->bEnabled && addon->category == AC_UI) {
            if (FcitxUILoadInternal(instance, addon))
                instance->uinormal = addon;

            if (instance->uinormal != NULL)
                break;
        }
    }

    instance->ui = instance->uinormal;

    if (instance->ui == NULL) {
        FcitxLog(ERROR, "no usable user interface.");
        return;
    }

    if (addon->uifallback)
        instance->fallbackuiName = strdup(addon->uifallback);
}
Exemple #3
0
FCITX_EXPORT_API
void FcitxUILoad(FcitxInstance* instance)
{
    UT_array* addons = &instance->addons;
    FcitxAddon *addon;

    for (addon = (FcitxAddon *) utarray_front(addons);
            addon != NULL;
            addon = (FcitxAddon *) utarray_next(addons, addon)) {
        if (addon->bEnabled && addon->category == AC_UI) {
            if (FcitxUILoadInternal(instance, addon))
                instance->uinormal = addon;

            if (instance->uinormal != NULL)
                break;
        }
    }

    instance->ui = instance->uinormal;

    if (instance->ui == NULL)
        FcitxLog(ERROR, "no usable user interface.");
    else {
        do {
            FcitxAddon* fallbackAddon = FcitxAddonsGetAddonByName(&instance->addons, addon->uifallback);
            if (fallbackAddon == NULL)
                break;

            if (!fallbackAddon->bEnabled)
                break;

            if (FcitxUILoadInternal(instance, fallbackAddon)) {
                instance->uifallback = fallbackAddon;
                if (instance->uifallback->ui->Suspend)
                    instance->uifallback->ui->Suspend(instance->uifallback->addonInstance);
            }
        } while (0);
    }
}