From c76328248e7ee78ca5933a76ef026c4d2a21eb1f Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Fri, 5 Nov 2010 15:36:41 +0000 Subject: [PATCH] Reorder SVN revision: 54183 --- src/bin/e_configure.c | 425 +++++++++++++++++++++--------------------- 1 file changed, 215 insertions(+), 210 deletions(-) diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c index 45a6f50fc..b47398f9a 100644 --- a/src/bin/e_configure.c +++ b/src/bin/e_configure.c @@ -1,16 +1,231 @@ #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__) { @@ -43,26 +258,6 @@ _configure_init_timer(void *data __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) { @@ -258,193 +453,3 @@ _e_configure_registry_item_full_add(const char *path, int pri, const char *label 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; -}