Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet
Dir : e17/libs/efreet/src/lib Modified Files: efreet_utils.c efreet_utils.h Log Message: Events when .desktop files change. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- efreet_utils.c 5 Apr 2007 20:29:26 -0000 1.26 +++ efreet_utils.c 5 Apr 2007 20:53:43 -0000 1.27 @@ -79,8 +79,8 @@ static Ecore_List *monitors = NULL; -int EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE = 0; -int EFREET_EVENT_UTIL_DESKTOP_CHANGE = 0; +int EFREET_EVENT_DESKTOP_LIST_CHANGE = 0; +int EFREET_EVENT_DESKTOP_CHANGE = 0; int efreet_util_init(void) @@ -88,10 +88,10 @@ Efreet_Cache_Fill *fill; Ecore_List *dirs; - if (!EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE) - EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE = ecore_event_type_new(); - if (!EFREET_EVENT_UTIL_DESKTOP_CHANGE) - EFREET_EVENT_UTIL_DESKTOP_CHANGE = ecore_event_type_new(); + if (!EFREET_EVENT_DESKTOP_LIST_CHANGE) + EFREET_EVENT_DESKTOP_LIST_CHANGE = ecore_event_type_new(); + if (!EFREET_EVENT_DESKTOP_CHANGE) + EFREET_EVENT_DESKTOP_CHANGE = ecore_event_type_new(); desktop_by_file_id = ecore_hash_new(ecore_str_hash, ecore_str_compare); ecore_hash_set_free_key(desktop_by_file_id, ECORE_FREE_CB(ecore_string_release)); ecore_hash_set_free_value(desktop_by_file_id, free); @@ -285,13 +285,17 @@ ecore_list_destroy(dirs); if (desktop) { + Efreet_Event_Desktop_Change *ev; + ud = NEW(Efreet_Util_Desktop, 1); - if (ud) - { - ud->priority = priority; - ud->desktop = desktop; - ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), ud); - } + ud->priority = priority; + ud->desktop = desktop; + ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), ud); + + ev = NEW(Efreet_Event_Desktop_Change, 1); + ev->desktop = desktop; + ev->change = EFREET_DESKTOP_CHANGE_ADD; + ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL); } return desktop; } @@ -417,7 +421,7 @@ { free(fill); idler = NULL; - ecore_event_add(EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE, NULL, NULL, NULL); + ecore_event_add(EFREET_EVENT_DESKTOP_LIST_CHANGE, NULL, NULL, NULL); return 0; } @@ -434,7 +438,7 @@ ecore_hash_for_each_node(file_id_by_desktop_path, dump, NULL); printf("%d\n", ecore_hash_count(desktop_by_file_id)); #endif - ecore_event_add(EFREET_EVENT_UTIL_DESKTOP_LIST_CHANGE, NULL, NULL, NULL); + ecore_event_add(EFREET_EVENT_DESKTOP_LIST_CHANGE, NULL, NULL, NULL); return 0; } @@ -506,16 +510,27 @@ ud = ecore_hash_get(desktop_by_file_id, file_id); if (!ud) { + Efreet_Event_Desktop_Change *ev; + ud = NEW(Efreet_Util_Desktop, 1); - if (ud) - { - ud->priority = priority; - ud->desktop = desktop; - ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), ud); - } + ud->priority = priority; + ud->desktop = desktop; + ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), ud); + + ev = NEW(Efreet_Event_Desktop_Change, 1); + ev->desktop = desktop; + ev->change = EFREET_DESKTOP_CHANGE_ADD; + ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL); } else if (priority < ud->priority) { + Efreet_Event_Desktop_Change *ev; + + ev = NEW(Efreet_Event_Desktop_Change, 1); + ev->desktop = desktop; + ev->change = EFREET_DESKTOP_CHANGE_ADD; + ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL); + ud->desktop = desktop; } if (!ecore_hash_get(file_id_by_desktop_path, desktop->orig_path)) @@ -535,8 +550,17 @@ ud = ecore_hash_get(desktop_by_file_id, file_id); if (ud && (ud->priority >= priority)) { + Efreet_Event_Desktop_Change *ev; + ecore_hash_remove(desktop_by_file_id, file_id); + + ev = NEW(Efreet_Event_Desktop_Change, 1); + ev->desktop = ud->desktop; + ev->change = EFREET_DESKTOP_CHANGE_REMOVE; + ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL); + free(ud); + /* This call will search application dirs and add the file to cache if it * exists. */ efreet_util_desktop_file_id_find(file_id); @@ -559,16 +583,33 @@ ud = ecore_hash_get(desktop_by_file_id, file_id); if (ud) { + Efreet_Event_Desktop_Change *ev; + if (ud->priority < priority) return; + + ev = NEW(Efreet_Event_Desktop_Change, 1); + ev->desktop = desktop; + if (ud->desktop == desktop) + ev->change = EFREET_DESKTOP_CHANGE_UPDATE; + else + ev->change = EFREET_DESKTOP_CHANGE_ADD; + ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL); + ud->desktop = desktop; } else { + Efreet_Event_Desktop_Change *ev; + ud = NEW(Efreet_Util_Desktop, 1); - if (!ud) return; ud->priority = priority; ud->desktop = desktop; ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), ud); + + ev = NEW(Efreet_Event_Desktop_Change, 1); + ev->desktop = desktop; + ev->change = EFREET_DESKTOP_CHANGE_ADD; + ecore_event_add(EFREET_EVENT_DESKTOP_CHANGE, ev, NULL, NULL); } } @@ -768,7 +809,6 @@ Efreet_Monitor *em; em = NEW(Efreet_Monitor, 1); - if (!em) return; em->monitor = ecore_file_monitor_add(path, efreet_util_monitor_cb, em); if (file_id) em->file_id = strdup(file_id); em->priority = priority; =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- efreet_utils.h 5 Apr 2007 20:29:26 -0000 1.14 +++ efreet_utils.h 5 Apr 2007 20:53:43 -0000 1.15 @@ -2,6 +2,23 @@ #ifndef EFREET_UTILS_H #define EFREET_UTILS_H +typedef enum Efreet_Desktop_Change Efreet_Desktop_Change; + +enum Efreet_Desktop_Change +{ + EFREET_DESKTOP_CHANGE_ADD, + EFREET_DESKTOP_CHANGE_REMOVE, + EFREET_DESKTOP_CHANGE_UPDATE +}; + +typedef struct Efreet_Event_Desktop_Change Efreet_Event_Desktop_Change; + +struct Efreet_Event_Desktop_Change +{ + Efreet_Desktop *desktop; + Efreet_Desktop_Change change; +}; + char *efreet_util_path_in_default(const char *section, const char *path); const char *efreet_util_path_to_file_id(const char *path); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs