Пример #1
0
FCITX_EXPORT_API
void fcitx_description_free(FcitxDescription* desc)
{
    if (!desc) {
        return;
    }

    free(desc->errorMessage);
    fcitx_string_hashset_free(desc->structs);
    fcitx_string_hashset_free(desc->topLevelStructs);
    fcitx_configuration_unref(desc->rootConfig);
    free(desc);
}
Пример #2
0
bool _fcitx_addon_load_metadata(const char* key, size_t keyLen, void** data, void* userData)
{
    FCITX_UNUSED(key);
    FCITX_UNUSED(keyLen);
    FcitxStandardPathFile* files = *data;
    size_t i = 0;
    while (files[i].fp) {
        i++;
    }
    FcitxConfiguration* config = NULL;
    while (i != 0) {
        i --;
        config = fcitx_ini_parse(files[i].fp, config);
    }

    FcitxAddonConfig* addonConfig = fcitx_addon_config_new();
    fcitx_addon_config_load(addonConfig, config);
    fcitx_configuration_unref(config);

    do {
        if (addonConfig->addon.name[0] == 0 || addonConfig->addon.type[0] == 0 ||
            addonConfig->addon.category >= FAC_Last) {
            fcitx_addon_config_free(addonConfig);
            break;
        }

        FcitxAddonManager* manager = userData;
        FcitxAddon* addon = NULL;
        if (fcitx_dict_lookup_by_str(manager->addons, addonConfig->addon.name, &addon)) {
            // don't touch the running addon
            if (addon->loaded) {
                fcitx_addon_config_free(addonConfig);
                addon = NULL;
                break;
            } else {
                fcitx_addon_config_free(addon->config);
                addon->config = addonConfig;
            }
        } else {
            addon = fcitx_utils_new(FcitxAddon);
            addon->config = addonConfig;
            fcitx_dict_insert_by_str(manager->addons, addon->config->addon.name, addon, false);
        }

        if (addon) {
            addon->dependencies = fcitx_string_hashset_parse(addon->config->addon.dependency, ',');
        }

        if (addon &&
            (manager->disabledAllAddons ||
             (manager->disabledAllAddons && fcitx_string_hashset_contains(manager->disabledAddons, addon->config->addon.name)))) {
            addon->config->addon.enabled = false;
        }

        if (addon &&
            (manager->enabledAddons && fcitx_string_hashset_contains(manager->enabledAddons, addon->config->addon.name))) {
            addon->config->addon.enabled = true;
        }

    } while(0);

    return false;
}