#include "e.h"
+static void _e_configure_menu_module_item_cb(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_configure_menu_add(void *data, E_Menu *m);
static void _e_configure_efreet_desktop_cleanup(void);
static void _e_configure_efreet_desktop_update(void);
static Eina_Bool _e_configure_cb_efreet_desktop_cache_update(void *data, int type, void *event);
static void _e_configure_registry_item_full_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params), void (*generic_func) (E_Container *con, const char *params), Efreet_Desktop *desktop);
+static void _configure_job(void *data);
+static Eina_Bool _configure_init_timer(void *data);
+
EAPI Eina_List *e_configure_registry = NULL;
static Eina_List *handlers = NULL;
static E_Int_Menu_Augmentation *maug = NULL;
static Ecore_Job *update_job = NULL;
+static struct {
+ void (*func) (const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop);
+ const char *data;
+} custom_desktop_exec = { NULL, NULL };
+
+EAPI void
+e_configure_init(void)
+{
+ e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, "preferences-extensions");
+ e_configure_registry_item_add("extensions/modules", 10, _("Modules"), NULL, "preferences-plugin", e_int_config_modules);
+
+ maug = e_int_menus_menu_augmentation_add_sorted
+ ("config/1", _("Modules"), _e_configure_menu_add, NULL, NULL, NULL);
+
+ handlers = eina_list_append
+ (handlers, ecore_event_handler_add
+ (EFREET_EVENT_DESKTOP_CACHE_UPDATE, _e_configure_cb_efreet_desktop_cache_update, NULL));
+ if (update_job)
+ {
+ ecore_job_del(update_job);
+ update_job = NULL;
+ }
+ ecore_timer_add(0.0, _configure_init_timer, NULL);
+}
+
+EAPI void
+e_configure_registry_call(const char *path, E_Container *con, const char *params)
+{
+ E_Configure_Cat *ecat;
+ Eina_List *l;
+ char *cat;
+ const char *item;
+
+ /* path is "category/item" */
+ cat = ecore_file_dir_get(path);
+ if (!cat) return;
+ item = ecore_file_file_get(path);
+ EINA_LIST_FOREACH(e_configure_registry, l, ecat)
+ if (!strcmp(cat, ecat->cat))
+ {
+ E_Configure_It *eci;
+ Eina_List *ll;
+
+ EINA_LIST_FOREACH(ecat->items, ll, eci)
+ if (!strcmp(item, eci->item))
+ {
+ if (eci->func) eci->func(con, params);
+ else if (eci->generic_func) eci->generic_func(con, params);
+ else if (eci->desktop)
+ {
+ if (custom_desktop_exec.func)
+ custom_desktop_exec.func(custom_desktop_exec.data,
+ con, params, eci->desktop);
+ else
+ e_exec(e_util_zone_current_get(con->manager),
+ eci->desktop, NULL, NULL, "config");
+ }
+ break;
+ }
+ break;
+ }
+ free(cat);
+}
+
+EAPI void
+e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params))
+{
+ _e_configure_registry_item_full_add(path, pri, label, icon_file, icon, func, NULL, NULL);
+}
+
+EAPI void
+e_configure_registry_generic_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, void (*generic_func) (E_Container *con, const char *params))
+{
+ _e_configure_registry_item_full_add(path, pri, label, icon_file, icon, NULL, generic_func, NULL);
+}
+
+EAPI void
+e_configure_registry_item_del(const char *path)
+{
+ E_Configure_Cat *ecat;
+ Eina_List *l;
+ const char *item;
+ char *cat;
+
+ /* path is "category/item" */
+ cat = ecore_file_dir_get(path);
+ if (!cat) return;
+ item = ecore_file_file_get(path);
+
+ EINA_LIST_FOREACH(e_configure_registry, l, ecat)
+ if (!strcmp(cat, ecat->cat))
+ {
+ E_Configure_It *eci;
+ Eina_List *ll;
+
+ EINA_LIST_FOREACH(ecat->items, ll, eci)
+ if (!strcmp(item, eci->item))
+ {
+ ecat->items = eina_list_remove_list(ecat->items, ll);
+
+ eina_stringshare_del(eci->item);
+ eina_stringshare_del(eci->label);
+ eina_stringshare_del(eci->icon);
+ if (eci->icon_file) eina_stringshare_del(eci->icon_file);
+ if (eci->desktop) efreet_desktop_free(eci->desktop);
+ free(eci);
+ break;
+ }
+ break;
+ }
+ free(cat);
+}
+
+EAPI void
+e_configure_registry_category_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon)
+{
+ E_Configure_Cat *ecat2;
+ E_Configure_Cat *ecat;
+ Eina_List *l;
+
+ /* if it exists - ignore this */
+ EINA_LIST_FOREACH(e_configure_registry, l, ecat2)
+ if (!strcmp(ecat2->cat, path)) return;
+
+ ecat = E_NEW(E_Configure_Cat, 1);
+ if (!ecat) return;
+
+ ecat->cat = eina_stringshare_add(path);
+ ecat->pri = pri;
+ ecat->label = eina_stringshare_add(label);
+ if (icon_file) ecat->icon_file = eina_stringshare_add(icon_file);
+ if (icon) ecat->icon = eina_stringshare_add(icon);
+ EINA_LIST_FOREACH(e_configure_registry, l, ecat2)
+ if (ecat2->pri > ecat->pri)
+ {
+ e_configure_registry =
+ eina_list_prepend_relative_list(e_configure_registry, ecat, l);
+ return;
+ }
+ e_configure_registry = eina_list_append(e_configure_registry, ecat);
+}
+
+EAPI void
+e_configure_registry_category_del(const char *path)
+{
+ E_Configure_Cat *ecat;
+ Eina_List *l;
+ char *cat;
+
+ cat = ecore_file_dir_get(path);
+ if (!cat) return;
+ EINA_LIST_FOREACH(e_configure_registry, l, ecat)
+ if (!strcmp(cat, ecat->cat))
+ {
+ if (ecat->items) break;
+ e_configure_registry = eina_list_remove_list(e_configure_registry, l);
+ eina_stringshare_del(ecat->cat);
+ eina_stringshare_del(ecat->label);
+ if (ecat->icon) eina_stringshare_del(ecat->icon);
+ if (ecat->icon_file) eina_stringshare_del(ecat->icon_file);
+ free(ecat);
+ break;
+ }
+ free(cat);
+}
+
+EAPI void
+e_configure_registry_custom_desktop_exec_callback_set(void (*func) (const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop), const void *data)
+{
+ custom_desktop_exec.func = func;
+ custom_desktop_exec.data = data;
+}
+
+EAPI int
+e_configure_registry_exists(const char *path)
+{
+ E_Configure_Cat *ecat;
+ Eina_List *l;
+ char *cat;
+ const char *item;
+ int ret = 0;
+
+ /* path is "category/item" */
+ cat = ecore_file_dir_get(path);
+ if (!cat) return 0;
+ item = ecore_file_file_get(path);
+ EINA_LIST_FOREACH(e_configure_registry, l, ecat)
+ if (!strcmp(cat, ecat->cat))
+ {
+ E_Configure_It *eci;
+ Eina_List *ll;
+
+ if (!item)
+ {
+ ret = 1;
+ break;
+ }
+ EINA_LIST_FOREACH(ecat->items, ll, eci)
+ if (!strcmp(item, eci->item))
+ {
+ ret = 1;
+ break;
+ }
+ break;
+ }
+
+ free(cat);
+ return ret;
+}
+
static void
_e_configure_menu_module_item_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
{
return EINA_FALSE;
}
-EAPI void
-e_configure_init(void)
-{
- e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, "preferences-extensions");
- e_configure_registry_item_add("extensions/modules", 10, _("Modules"), NULL, "preferences-plugin", e_int_config_modules);
-
- maug = e_int_menus_menu_augmentation_add_sorted
- ("config/1", _("Modules"), _e_configure_menu_add, NULL, NULL, NULL);
-
- handlers = eina_list_append
- (handlers, ecore_event_handler_add
- (EFREET_EVENT_DESKTOP_CACHE_UPDATE, _e_configure_cb_efreet_desktop_cache_update, NULL));
- if (update_job)
- {
- ecore_job_del(update_job);
- update_job = NULL;
- }
- ecore_timer_add(0.0, _configure_init_timer, NULL);
-}
-
static void
_e_configure_efreet_desktop_cleanup(void)
{
free(cat);
}
-EAPI void
-e_configure_registry_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container *con, const char *params))
-{
- _e_configure_registry_item_full_add(path, pri, label, icon_file, icon, func, NULL, NULL);
-}
-
-EAPI void
-e_configure_registry_generic_item_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon, void (*generic_func) (E_Container *con, const char *params))
-{
- _e_configure_registry_item_full_add(path, pri, label, icon_file, icon, NULL, generic_func, NULL);
-}
-
-EAPI void
-e_configure_registry_item_del(const char *path)
-{
- E_Configure_Cat *ecat;
- Eina_List *l;
- const char *item;
- char *cat;
-
- /* path is "category/item" */
- cat = ecore_file_dir_get(path);
- if (!cat) return;
- item = ecore_file_file_get(path);
-
- EINA_LIST_FOREACH(e_configure_registry, l, ecat)
- if (!strcmp(cat, ecat->cat))
- {
- E_Configure_It *eci;
- Eina_List *ll;
-
- EINA_LIST_FOREACH(ecat->items, ll, eci)
- if (!strcmp(item, eci->item))
- {
- ecat->items = eina_list_remove_list(ecat->items, ll);
-
- eina_stringshare_del(eci->item);
- eina_stringshare_del(eci->label);
- eina_stringshare_del(eci->icon);
- if (eci->icon_file) eina_stringshare_del(eci->icon_file);
- if (eci->desktop) efreet_desktop_free(eci->desktop);
- free(eci);
- break;
- }
- break;
- }
- free(cat);
-}
-
-EAPI void
-e_configure_registry_category_add(const char *path, int pri, const char *label, const char *icon_file, const char *icon)
-{
- E_Configure_Cat *ecat2;
- E_Configure_Cat *ecat;
- Eina_List *l;
-
- /* if it exists - ignore this */
- EINA_LIST_FOREACH(e_configure_registry, l, ecat2)
- if (!strcmp(ecat2->cat, path)) return;
-
- ecat = E_NEW(E_Configure_Cat, 1);
- if (!ecat) return;
-
- ecat->cat = eina_stringshare_add(path);
- ecat->pri = pri;
- ecat->label = eina_stringshare_add(label);
- if (icon_file) ecat->icon_file = eina_stringshare_add(icon_file);
- if (icon) ecat->icon = eina_stringshare_add(icon);
- EINA_LIST_FOREACH(e_configure_registry, l, ecat2)
- if (ecat2->pri > ecat->pri)
- {
- e_configure_registry =
- eina_list_prepend_relative_list(e_configure_registry, ecat, l);
- return;
- }
- e_configure_registry = eina_list_append(e_configure_registry, ecat);
-}
-
-EAPI void
-e_configure_registry_category_del(const char *path)
-{
- E_Configure_Cat *ecat;
- Eina_List *l;
- char *cat;
-
- cat = ecore_file_dir_get(path);
- if (!cat) return;
- EINA_LIST_FOREACH(e_configure_registry, l, ecat)
- if (!strcmp(cat, ecat->cat))
- {
- if (ecat->items) break;
- e_configure_registry = eina_list_remove_list(e_configure_registry, l);
- eina_stringshare_del(ecat->cat);
- eina_stringshare_del(ecat->label);
- if (ecat->icon) eina_stringshare_del(ecat->icon);
- if (ecat->icon_file) eina_stringshare_del(ecat->icon_file);
- free(ecat);
- break;
- }
- free(cat);
-}
-
-static struct {
- void (*func) (const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop);
- const char *data;
-} custom_desktop_exec = { NULL, NULL };
-
-EAPI void
-e_configure_registry_call(const char *path, E_Container *con, const char *params)
-{
- E_Configure_Cat *ecat;
- Eina_List *l;
- char *cat;
- const char *item;
-
- /* path is "category/item" */
- cat = ecore_file_dir_get(path);
- if (!cat) return;
- item = ecore_file_file_get(path);
- EINA_LIST_FOREACH(e_configure_registry, l, ecat)
- if (!strcmp(cat, ecat->cat))
- {
- E_Configure_It *eci;
- Eina_List *ll;
-
- EINA_LIST_FOREACH(ecat->items, ll, eci)
- if (!strcmp(item, eci->item))
- {
- if (eci->func) eci->func(con, params);
- else if (eci->generic_func) eci->generic_func(con, params);
- else if (eci->desktop)
- {
- if (custom_desktop_exec.func)
- custom_desktop_exec.func(custom_desktop_exec.data,
- con, params, eci->desktop);
- else
- e_exec(e_util_zone_current_get(con->manager),
- eci->desktop, NULL, NULL, "config");
- }
- break;
- }
- break;
- }
- free(cat);
-}
-
-
-EAPI void
-e_configure_registry_custom_desktop_exec_callback_set(void (*func) (const void *data, E_Container *con, const char *params, Efreet_Desktop *desktop), const void *data)
-{
- custom_desktop_exec.func = func;
- custom_desktop_exec.data = data;
-}
-
-EAPI int
-e_configure_registry_exists(const char *path)
-{
- E_Configure_Cat *ecat;
- Eina_List *l;
- char *cat;
- const char *item;
- int ret = 0;
-
- /* path is "category/item" */
- cat = ecore_file_dir_get(path);
- if (!cat) return 0;
- item = ecore_file_file_get(path);
- EINA_LIST_FOREACH(e_configure_registry, l, ecat)
- if (!strcmp(cat, ecat->cat))
- {
- E_Configure_It *eci;
- Eina_List *ll;
-
- if (!item)
- {
- ret = 1;
- break;
- }
- EINA_LIST_FOREACH(ecat->items, ll, eci)
- if (!strcmp(item, eci->item))
- {
- ret = 1;
- break;
- }
- break;
- }
-
- free(cat);
- return ret;
-}