示例#1
0
文件: addon.c 项目: rwdxll/fcitx5
void fcitx_addon_manager_free(FcitxAddonManager* manager)
{
    if (manager->loaded) {
        fcitx_addon_manager_unload(manager);
    }
    fcitx_dict_free(manager->properties);
    fcitx_ptr_array_free(manager->loadedAddons);
    fcitx_standard_path_unref(manager->standardPath);
    fcitx_dict_free(manager->addons);
    fcitx_dict_free(manager->resolvers);
    fcitx_string_hashset_free(manager->enabledAddons);
    fcitx_string_hashset_free(manager->disabledAddons);
    free(manager);
}
示例#2
0
void fcitx_configuration_free(FcitxConfiguration* config)
{
    fcitx_dict_free(config->subitems);
    free(config->name);
    free(config->value);
    free(config->comment);
    free(config);
}
示例#3
0
void fcitx_compose_table_free(FcitxComposeTable* table)
{
    free(table->locale);
    free(table->systemComposeDir);
    utarray_free(table->composeTable);
    fcitx_dict_free(table->localeToTable);
    free(table);
}
示例#4
0
文件: ime.c 项目: fcitx/fcitx-ng
void fcitx_input_method_manager_free(FcitxInputMethodManager* self)
{
    fcitx_dict_free(self->ims);
    fcitx_ptr_array_free(self->groups);

    if (self->destroyNotify) {
        self->destroyNotify(self->userData);
    }
    free(self);
}
示例#5
0
文件: addon.c 项目: rwdxll/fcitx5
FCITX_EXPORT_API
void fcitx_addon_manager_load(FcitxAddonManager* manager)
{
    // list all metadata
    FcitxStandardPathFilter filter;
    filter.flag = FSPFT_Suffix | FSPFT_Sort;
    filter.suffix = ".conf";
    FcitxDict* fileDict = fcitx_standard_path_match(manager->standardPath, FSPT_Data, "fcitx/addon", &filter);
    fcitx_dict_foreach(fileDict, _fcitx_addon_load_metadata, manager);
    fcitx_dict_free(fileDict);

    // topo sort doesn't work here, since
    bool update;
    do {
        update = false;
        for (FcitxDictData* data = fcitx_dict_first(manager->addons);
            data != NULL;
            data = fcitx_dict_data_next(data)) {
            FcitxAddon* addon = data->data;
            if (!addon->config->addon.enabled) {
                continue;
            }
            FcitxDictData* dependency = NULL;
            bool allDependenciesLoaded = true;
            for (dependency = fcitx_dict_first(addon->dependencies);
                dependency != NULL;
                dependency = fcitx_dict_data_next(dependency)) {
                FcitxAddon* dependAddon;
                if (!fcitx_dict_lookup_by_str(manager->addons, dependency->key, &dependAddon)) {
                    break;
                }
                if (!dependAddon->loaded) {
                    allDependenciesLoaded = false;
                }
            }

            if (dependency) {
                addon->config->addon.enabled = false;
                update = true;
            } else if (allDependenciesLoaded) {
                _fcitx_addon_manager_load_addon(manager, addon);
            }
        }
    } while(update);

    manager->loaded = true;
}
示例#6
0
文件: addon.c 项目: rwdxll/fcitx5
void fcitx_static_library_resolver_free(void* data)
{
    FcitxDict* staticAddonDict = data;
    fcitx_dict_free(staticAddonDict);
}