From d0d05541703e835ebcac2835f26cc80de5f04ad3 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Fri, 21 Nov 2014 20:10:56 +0100 Subject: [PATCH] e_order: Added a function to check if this Efreet entry allready exists Checks if this Efreet_Desktop entry allready exists in the given E_Order. --- src/bin/e_order.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/bin/e_order.c b/src/bin/e_order.c index d13b8e131..72c6f26f9 100644 --- a/src/bin/e_order.c +++ b/src/bin/e_order.c @@ -5,6 +5,7 @@ static void _e_order_free(E_Order *eo); static void _e_order_cb_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path); static void _e_order_read(E_Order *eo); static void _e_order_save(E_Order *eo); +static void _e_order_remove_if_exists(E_Order *eo, Efreet_Desktop *desktop); static Eina_Bool _e_order_cb_efreet_cache_update(void *data, int ev_type, void *ev); static Eina_List *orders = NULL; @@ -130,6 +131,7 @@ e_order_append(E_Order *eo, Efreet_Desktop *desktop) E_OBJECT_CHECK(eo); E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + _e_order_remove_if_exists(eo, desktop); efreet_desktop_ref(desktop); eo->desktops = eina_list_append(eo->desktops, desktop); _e_order_save(eo); @@ -141,6 +143,7 @@ e_order_prepend_relative(E_Order *eo, Efreet_Desktop *desktop, Efreet_Desktop *b E_OBJECT_CHECK(eo); E_OBJECT_TYPE_CHECK(eo, E_ORDER_TYPE); + _e_order_remove_if_exists(eo, desktop); efreet_desktop_ref(desktop); eo->desktops = eina_list_prepend_relative(eo->desktops, desktop, before); _e_order_save(eo); @@ -163,6 +166,7 @@ e_order_files_append(E_Order *eo, Eina_List *files) file += 7; desktop = efreet_desktop_get(file); if (!desktop) continue; + _e_order_remove_if_exists(eo, desktop); eo->desktops = eina_list_append(eo->desktops, desktop); } _e_order_save(eo); @@ -185,6 +189,7 @@ e_order_files_prepend_relative(E_Order *eo, Eina_List *files, Efreet_Desktop *be file += 7; desktop = efreet_desktop_get(file); if (!desktop) continue; + _e_order_remove_if_exists(eo, desktop); eo->desktops = eina_list_prepend_relative(eo->desktops, desktop, before); } _e_order_save(eo); @@ -212,6 +217,23 @@ _e_order_free(E_Order *eo) free(eo); } +static void +_e_order_remove_if_exists(E_Order *eo, Efreet_Desktop *desktop) +{ + Efreet_Desktop *desk; + Eina_List *node, *nnode; + + EINA_LIST_FOREACH_SAFE(eo->desktops, node, nnode, desk) + { + if (!strcmp(desk->orig_path, desktop->orig_path)) + { + efreet_desktop_free(desktop); + eo->desktops = eina_list_remove(eo->desktops, desktop); + return; + } + } +} + static Eina_Bool _e_order_cb_monitor_delay(void *data) {