Hi,I think we should update file monitoring events to match inotify. Inotify is probably the one most use, and the API hasn't changed for a while.
Is this patch ok? S.
>From 36f0f4124c522abd0837f5816ddf1fb79ffefb88 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld <sebastian.dransf...@sintef.no> Date: Wed, 9 Feb 2011 15:22:02 +0100 Subject: [PATCH] Update file monitoring events to match inotify --- .../drawer/src/plugins/sources/directory_watcher.c | 4 +- E-MODULES-EXTRA/mail/src/mbox.c | 6 +- E-MODULES-EXTRA/mail/src/mdir.c | 6 +- e/src/bin/e_fm/e_fm_ipc.c | 21 +++-- e/src/bin/e_order.c | 4 +- e/src/modules/everything-files/e_mod_main.c | 16 ++-- e/src/modules/illume-keyboard/e_kbd_buf.c | 2 +- e/src/modules/illume/e_kbd_buf.c | 2 +- ecore/src/lib/ecore_file/Ecore_File.h | 26 ++++-- .../lib/ecore_file/ecore_file_monitor_inotify.c | 70 +++---------- ecore/src/lib/ecore_file/ecore_file_monitor_poll.c | 111 +++++++------------ ecore/src/lib/ecore_file/ecore_file_private.h | 24 +--- eeze/src/lib/eeze_disk_libmount.c | 4 +- efreet/src/lib/efreet_cache.c | 10 +- efreet/src/lib/efreet_desktop.c | 41 +++++-- efreet/src/lib/efreet_icon.c | 22 +++-- efreet/src/lib/efreet_mime.c | 7 +- enlil/src/enlil/album.c | 23 +++-- enlil/src/enlil/library.c | 16 ++- rage/src/bin/volume.c | 4 +- 20 files changed, 201 insertions(+), 218 deletions(-) diff --git a/E-MODULES-EXTRA/drawer/src/plugins/sources/directory_watcher.c b/E-MODULES-EXTRA/drawer/src/plugins/sources/directory_watcher.c index 42cf2c2..44cde45 100644 --- a/E-MODULES-EXTRA/drawer/src/plugins/sources/directory_watcher.c +++ b/E-MODULES-EXTRA/drawer/src/plugins/sources/directory_watcher.c @@ -77,7 +77,7 @@ static Drawer_Source_Item * _dirwatcher_source_item_fill(Instance *inst, const c static void _dirwatcher_event_update_free(void *data __UNUSED__, void *event); static void _dirwatcher_event_update_icon_free(void *data __UNUSED__, void *event); -static void _dirwatcher_monitor_cb(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path); +static void _dirwatcher_monitor_cb(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path, Eina_Bool isdir __UNUSED__); static void _dirwatcher_cb_menu_post(void *data, E_Menu *menu); static void _dirwatcher_cb_menu_open_dir(void *data, E_Menu *m, E_Menu_Item *mi); static void _dirwatcher_conf_activation_cb(void *data1, void *data2 __UNUSED__); @@ -457,7 +457,7 @@ _dirwatcher_event_update_icon_free(void *data __UNUSED__, void *event) } static void -_dirwatcher_monitor_cb(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path) +_dirwatcher_monitor_cb(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path, Eina_Bool isdir __UNUSED__) { Instance *inst = NULL; Drawer_Event_Source_Update *ev; diff --git a/E-MODULES-EXTRA/mail/src/mbox.c b/E-MODULES-EXTRA/mail/src/mbox.c index 2e7902a..c1a1090 100644 --- a/E-MODULES-EXTRA/mail/src/mbox.c +++ b/E-MODULES-EXTRA/mail/src/mbox.c @@ -6,7 +6,8 @@ static Eina_List *mboxes; static void _mail_mbox_check_mail_parser (Config_Box *cb); static void _mail_mbox_check_mail_monitor (void *data, Ecore_File_Monitor * monitor, - Ecore_File_Event event, const char *path); + Ecore_File_Event event, const char *path, + Eina_Bool isdir); void _mail_mbox_add_mailbox (void *data, void *data2) @@ -148,7 +149,8 @@ void _mail_mbox_check_mail (void *data) /* PRIVATES */ static void _mail_mbox_check_mail_monitor (void *data, Ecore_File_Monitor * monitor, - Ecore_File_Event event, const char *path) + Ecore_File_Event event, const char *path, + Eina_Bool isdir) { MboxClient *mb; Config_Box *cb; diff --git a/E-MODULES-EXTRA/mail/src/mdir.c b/E-MODULES-EXTRA/mail/src/mdir.c index d750ec1..e1639dd 100644 --- a/E-MODULES-EXTRA/mail/src/mdir.c +++ b/E-MODULES-EXTRA/mail/src/mdir.c @@ -5,7 +5,8 @@ static Eina_List *mdirs; static void _mail_mdir_check_mail (void *data, Ecore_File_Monitor * monitor, - Ecore_File_Event event, const char *path); + Ecore_File_Event event, const char *path, + Eina_Bool isdir); static int _mail_mdir_get_files (const char *path); void @@ -75,7 +76,8 @@ _mail_mdir_shutdown () /* PRIVATES */ static void _mail_mdir_check_mail (void *data, Ecore_File_Monitor * monitor, - Ecore_File_Event event, const char *path) + Ecore_File_Event event, const char *path, + Eina_Bool isdir) { MdirClient *mc; diff --git a/e/src/bin/e_fm/e_fm_ipc.c b/e/src/bin/e_fm/e_fm_ipc.c index a8ad68a..e2c6d57 100644 --- a/e/src/bin/e_fm/e_fm_ipc.c +++ b/e/src/bin/e_fm/e_fm_ipc.c @@ -146,7 +146,7 @@ static int _e_fm_ipc_slave_run(E_Fm_Op_Type type, const char *args, int id); static E_Fm_Slave *_e_fm_ipc_slave_get(int id); static int _e_fm_ipc_slave_send(E_Fm_Slave *slave, E_Fm_Op_Type type, void *data, int size); -static void _e_fm_ipc_cb_file_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path); +static void _e_fm_ipc_cb_file_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir); static Eina_Bool _e_fm_ipc_cb_recent_clean(void *data); static void _e_fm_ipc_file_add_mod(E_Dir *ed, const char *path, E_Fm_Op_Type op, int listing); @@ -885,7 +885,7 @@ _e_fm_ipc_slave_del_cb(void *data __UNUSED__, int type __UNUSED__, void *event) } static void -_e_fm_ipc_cb_file_monitor(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event, const char *path) +_e_fm_ipc_cb_file_monitor(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event, const char *path, Eina_Bool isdir __UNUSED__) { E_Dir *ed; char *dir, *rp, *drp; @@ -893,8 +893,8 @@ _e_fm_ipc_cb_file_monitor(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED dir = ecore_file_dir_get(path); /* FIXME: get no create events if dir is empty */ - if ((event == ECORE_FILE_EVENT_CREATED_FILE) || - (event == ECORE_FILE_EVENT_CREATED_DIRECTORY)) + if ((event == ECORE_FILE_EVENT_CREATE) || + (event == ECORE_FILE_EVENT_MOVED_TO)) { rp = ecore_file_realpath(dir); EINA_LIST_FOREACH(_e_dirs, l, ed) @@ -909,8 +909,8 @@ _e_fm_ipc_cb_file_monitor(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED } free(rp); } - else if ((event == ECORE_FILE_EVENT_DELETED_FILE) || - (event == ECORE_FILE_EVENT_DELETED_DIRECTORY)) + else if ((event == ECORE_FILE_EVENT_DELETE) || + (event == ECORE_FILE_EVENT_MOVED_FROM)) { rp = ecore_file_realpath(dir); EINA_LIST_FOREACH(_e_dirs, l, ed) @@ -925,7 +925,9 @@ _e_fm_ipc_cb_file_monitor(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED } free(rp); } - else if (event == ECORE_FILE_EVENT_MODIFIED) + else if ((event == ECORE_FILE_EVENT_MODIFY) || + (event == ECORE_FILE_EVENT_ATTRIB) || + (event == ECORE_FILE_EVENT_CLOSE_WRITE)) { rp = ecore_file_realpath(dir); EINA_LIST_FOREACH(_e_dirs, l, ed) @@ -940,7 +942,10 @@ _e_fm_ipc_cb_file_monitor(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED } free(rp); } - else if (event == ECORE_FILE_EVENT_DELETED_SELF) + else if ((event == ECORE_FILE_EVENT_DELETE_SELF) || + (event == ECORE_FILE_EVENT_MOVE_SELF) || + (event == ECORE_FILE_EVENT_UNMOUNT)) + { rp = ecore_file_realpath(path); EINA_LIST_FOREACH(_e_dirs, l, ed) diff --git a/e/src/bin/e_order.c b/e/src/bin/e_order.c index c95aab0..768a278 100644 --- a/e/src/bin/e_order.c +++ b/e/src/bin/e_order.c @@ -2,7 +2,7 @@ /* local subsystem functions */ 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_cb_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir); static void _e_order_read(E_Order *eo); static void _e_order_save(E_Order *eo); static Eina_Bool _e_order_cb_efreet_cache_update(void *data, int ev_type, void *ev); @@ -171,7 +171,7 @@ _e_order_cb_monitor_delay(void *data) } static void -_e_order_cb_monitor(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path __UNUSED__) +_e_order_cb_monitor(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path __UNUSED__, Eina_Bool isdir __UNUSED__) { E_Order *eo = data; diff --git a/e/src/modules/everything-files/e_mod_main.c b/e/src/modules/everything-files/e_mod_main.c index 033cd98..27053b2 100644 --- a/e/src/modules/everything-files/e_mod_main.c +++ b/e/src/modules/everything-files/e_mod_main.c @@ -443,7 +443,7 @@ _scan_end_func(void *data, Ecore_Thread *thread __UNUSED__) } static void -_dir_watcher(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event, const char *path) +_dir_watcher(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event, const char *path, Eina_Bool isdir) { Plugin *p = data; Evry_Item_File *file; @@ -452,19 +452,21 @@ _dir_watcher(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event eve switch (event) { - case ECORE_FILE_EVENT_DELETED_SELF: + case ECORE_FILE_EVENT_DELETE_SELF: + case ECORE_FILE_EVENT_MOVE_SELF: + case ECORE_FILE_EVENT_UNMOUNT: EINA_LIST_FREE(p->files, file) evry->item_free(EVRY_ITEM(file)); break; - case ECORE_FILE_EVENT_CREATED_DIRECTORY: - case ECORE_FILE_EVENT_CREATED_FILE: + case ECORE_FILE_EVENT_CREATE: + case ECORE_FILE_EVENT_MOVED_TO: label = ecore_file_file_get(path); file = EVRY_ITEM_NEW(Evry_Item_File, p, label, NULL, _item_free); file->path = eina_stringshare_add(path); - if (event == ECORE_FILE_EVENT_CREATED_DIRECTORY) + if (isdir) file->mime = eina_stringshare_ref(_mime_dir); _item_fill(file); @@ -472,8 +474,8 @@ _dir_watcher(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event eve break; - case ECORE_FILE_EVENT_DELETED_FILE: - case ECORE_FILE_EVENT_DELETED_DIRECTORY: + case ECORE_FILE_EVENT_DELETE: + case ECORE_FILE_EVENT_MOVED_FROM: label = eina_stringshare_add(path); EINA_LIST_FOREACH_SAFE(p->files, l, ll, file) diff --git a/e/src/modules/illume-keyboard/e_kbd_buf.c b/e/src/modules/illume-keyboard/e_kbd_buf.c index b297ec9..4520d4e 100644 --- a/e/src/modules/illume-keyboard/e_kbd_buf.c +++ b/e/src/modules/illume-keyboard/e_kbd_buf.c @@ -232,7 +232,7 @@ _e_kbd_buf_cb_data_dict_reload(void *data) } static void -_e_kbd_buf_cb_data_dict_change(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path __UNUSED__) +_e_kbd_buf_cb_data_dict_change(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path __UNUSED__, Eina_Bool isdir __UNUSED__) { E_Kbd_Buf *kb; diff --git a/e/src/modules/illume/e_kbd_buf.c b/e/src/modules/illume/e_kbd_buf.c index 0061d56..b78335c 100644 --- a/e/src/modules/illume/e_kbd_buf.c +++ b/e/src/modules/illume/e_kbd_buf.c @@ -234,7 +234,7 @@ _e_kbd_buf_cb_data_dict_reload(void *data) } static void -_e_kbd_buf_cb_data_dict_change(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path __UNUSED__) +_e_kbd_buf_cb_data_dict_change(void *data, Ecore_File_Monitor *em __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path __UNUSED__, Eina_Bool isdir __UNUSED__) { E_Kbd_Buf *kb; diff --git a/ecore/src/lib/ecore_file/Ecore_File.h b/ecore/src/lib/ecore_file/Ecore_File.h index ac4270c..fa61071 100644 --- a/ecore/src/lib/ecore_file/Ecore_File.h +++ b/ecore/src/lib/ecore_file/Ecore_File.h @@ -68,19 +68,31 @@ typedef struct _Ecore_File_Download_Job Ecore_File_Download_Job; typedef enum _Ecore_File_Event { ECORE_FILE_EVENT_NONE, /**< No event. */ - ECORE_FILE_EVENT_CREATED_FILE, /**< Created file event. */ - ECORE_FILE_EVENT_CREATED_DIRECTORY, /**< Created directory event. */ - ECORE_FILE_EVENT_DELETED_FILE, /**< Deleted file event. */ - ECORE_FILE_EVENT_DELETED_DIRECTORY, /**< Deleted directory event. */ - ECORE_FILE_EVENT_DELETED_SELF, /**< Deleted monitored directory event. */ - ECORE_FILE_EVENT_MODIFIED /**< Modified file or directory event. */ + ECORE_FILE_EVENT_ATTRIB, /**< Files attributes changed. */ + ECORE_FILE_EVENT_CLOSE_WRITE, /**< File closed after writing. */ + ECORE_FILE_EVENT_MOVED_FROM, /**< Path is moved from a monitored location. */ + ECORE_FILE_EVENT_MOVED_TO, /**< Path is moved to a monitored location. */ + ECORE_FILE_EVENT_DELETE, /**< Path is deleted. */ + ECORE_FILE_EVENT_CREATE, /**< Path is created. */ + ECORE_FILE_EVENT_MODIFY, /**< Path is modified. */ + ECORE_FILE_EVENT_DELETE_SELF, /**< Monitored path is deleted. */ + ECORE_FILE_EVENT_MOVE_SELF, /**< Monitored path is moved. */ + ECORE_FILE_EVENT_UNMOUNT /**< Path is unmounted. */ } Ecore_File_Event; +/* + * Mapping between old and new events +ECORE_FILE_EVENT_MODIFIED == ECORE_FILE_EVENT_ATTRIB|ECORE_FILE_EVENT_CLOSE_WRITE|ECORE_FILE_EVENT_MODIFY +ECORE_FILE_EVENT_CREATED_{F,D}* == ECORE_FILE_EVENT_CREATE|ECORE_FILE_EVENT_MOVED_TO +ECORE_FILE_EVENT_DELETED_{F,D}* == ECORE_FILE_EVENT_DELETE|ECORE_FILE_EVENT_MOVED_FROM +ECORE_FILE_EVENT_DELETED_SELF == ECORE_FILE_EVENT_DELETE_SELF|ECORE_FILE_EVENT_MOVE_SELF|ECORE_FILE_EVENT_UNMOUNT +*/ + /** * @typedef Ecore_File_Monitor_Cb * Callback type used when a monitored directory has changes. */ -typedef void (*Ecore_File_Monitor_Cb)(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path); +typedef void (*Ecore_File_Monitor_Cb)(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir); /** * @typedef Ecore_File_Download_Completion_Cb diff --git a/ecore/src/lib/ecore_file/ecore_file_monitor_inotify.c b/ecore/src/lib/ecore_file/ecore_file_monitor_inotify.c index e9bb595..28849ea 100644 --- a/ecore/src/lib/ecore_file/ecore_file_monitor_inotify.c +++ b/ecore/src/lib/ecore_file/ecore_file_monitor_inotify.c @@ -13,7 +13,7 @@ * TODO: * * - Listen to these events: - * IN_ACCESS, IN_ATTRIB, IN_CLOSE_WRITE, IN_CLOSE_NOWRITE, IN_OPEN + * IN_ACCESS, IN_CLOSE_NOWRITE, IN_OPEN * - Read all events first, then call the callbacks. This will prevent several * callbacks with the typic save cycle (delete file, new file) * - Listen to IN_IGNORED, emitted when the watch is removed @@ -82,7 +82,7 @@ ecore_file_monitor_inotify_shutdown(void) int fd; while(_monitors) - ecore_file_monitor_inotify_del(_monitors); + ecore_file_monitor_inotify_del(_monitors); if (_fdh) { @@ -95,9 +95,7 @@ ecore_file_monitor_inotify_shutdown(void) Ecore_File_Monitor * ecore_file_monitor_inotify_add(const char *path, - void (*func) (void *data, Ecore_File_Monitor *em, - Ecore_File_Event event, - const char *path), + Ecore_File_Monitor_Cb func, void *data) { Ecore_File_Monitor *em; @@ -201,61 +199,25 @@ _ecore_file_monitor_inotify_events(Ecore_File_Monitor *em, char *file, int mask) #endif if (mask & IN_ATTRIB) - { - em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_ATTRIB, buf, isdir); if (mask & IN_CLOSE_WRITE) - { - if (!isdir) - em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_CLOSE_WRITE, buf, isdir); if (mask & IN_MODIFY) - { - if (!isdir) - em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_MODIFY, buf, isdir); if (mask & IN_MOVED_FROM) - { - if (isdir) - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_DIRECTORY, buf); - else - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_FILE, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_MOVED_FROM, buf, isdir); if (mask & IN_MOVED_TO) - { - if (isdir) - em->func(em->data, em, ECORE_FILE_EVENT_CREATED_DIRECTORY, buf); - else - em->func(em->data, em, ECORE_FILE_EVENT_CREATED_FILE, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_MOVED_TO, buf, isdir); if (mask & IN_DELETE) - { - if (isdir) - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_DIRECTORY, buf); - else - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_FILE, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_DELETE, buf, isdir); if (mask & IN_CREATE) - { - if (isdir) - em->func(em->data, em, ECORE_FILE_EVENT_CREATED_DIRECTORY, buf); - else - em->func(em->data, em, ECORE_FILE_EVENT_CREATED_FILE, buf); - } + em->func(em->data, em, ECORE_FILE_EVENT_CREATE, buf, isdir); if (mask & IN_DELETE_SELF) - { - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path); - } + em->func(em->data, em, ECORE_FILE_EVENT_DELETE_SELF, em->path, isdir); if (mask & IN_MOVE_SELF) - { - /* We just call delete. The dir is gone... */ - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path); - } + em->func(em->data, em, ECORE_FILE_EVENT_MOVE_SELF, em->path, isdir); if (mask & IN_UNMOUNT) - { - /* We just call delete. The dir is gone... */ - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path); - } + em->func(em->data, em, ECORE_FILE_EVENT_UNMOUNT, em->path, isdir); if (mask & IN_IGNORED) { /* The watch is removed. If the file name still exists monitor the new one, @@ -263,10 +225,10 @@ _ecore_file_monitor_inotify_events(Ecore_File_Monitor *em, char *file, int mask) if (ecore_file_exists(em->path)) { if (!_ecore_file_monitor_inotify_monitor(em, em->path)) - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path); + em->func(em->data, em, ECORE_FILE_EVENT_DELETE_SELF, em->path, isdir); } else - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path); + em->func(em->data, em, ECORE_FILE_EVENT_DELETE_SELF, em->path, isdir); } } @@ -284,7 +246,7 @@ _ecore_file_monitor_inotify_monitor(Ecore_File_Monitor *em, const char *path) IN_DELETE_SELF | IN_MOVE_SELF | IN_UNMOUNT; - + ECORE_FILE_MONITOR_INOTIFY(em)->wd = inotify_add_watch(ecore_main_fd_handler_fd_get(_fdh), path, mask); if (ECORE_FILE_MONITOR_INOTIFY(em)->wd < 0) diff --git a/ecore/src/lib/ecore_file/ecore_file_monitor_poll.c b/ecore/src/lib/ecore_file/ecore_file_monitor_poll.c index 9cab3c7..fc45c1c 100644 --- a/ecore/src/lib/ecore_file/ecore_file_monitor_poll.c +++ b/ecore/src/lib/ecore_file/ecore_file_monitor_poll.c @@ -25,7 +25,8 @@ struct _Ecore_File_Monitor_Poll { Ecore_File_Monitor monitor; int mtime; - unsigned char deleted; + Eina_Bool deleted:1; + Eina_Bool is_dir:1; }; #define ECORE_FILE_INTERVAL_MIN 1.0 @@ -51,7 +52,7 @@ int ecore_file_monitor_poll_shutdown(void) { while(_monitors) - ecore_file_monitor_poll_del(_monitors); + ecore_file_monitor_poll_del(_monitors); if (_timer) { @@ -63,9 +64,7 @@ ecore_file_monitor_poll_shutdown(void) Ecore_File_Monitor * ecore_file_monitor_poll_add(const char *path, - void (*func) (void *data, Ecore_File_Monitor *em, - Ecore_File_Event event, - const char *path), + Ecore_File_Monitor_Cb func, void *data) { Ecore_File_Monitor *em; @@ -101,25 +100,26 @@ ecore_file_monitor_poll_add(const char *path, Eina_List *files; char *file; + ECORE_FILE_MONITOR_POLL(em)->is_dir = 1; files = ecore_file_ls(em->path); EINA_LIST_FREE(files, file) - { - Ecore_File *f; - char buf[PATH_MAX]; + { + Ecore_File *f; + char buf[PATH_MAX]; - f = calloc(1, sizeof(Ecore_File)); - if (!f) + f = calloc(1, sizeof(Ecore_File)); + if (!f) { free(file); - continue; + continue; } - snprintf(buf, sizeof(buf), "%s/%s", em->path, file); - f->name = file; - f->mtime = ecore_file_mod_time(buf); - f->is_dir = ecore_file_is_dir(buf); - em->files = (Ecore_File *) eina_inlist_append(EINA_INLIST_GET(em->files), EINA_INLIST_GET(f)); - } + snprintf(buf, sizeof(buf), "%s/%s", em->path, file); + f->name = file; + f->mtime = ecore_file_mod_time(buf); + f->is_dir = ecore_file_is_dir(buf); + em->files = (Ecore_File *) eina_inlist_append(EINA_INLIST_GET(em->files), EINA_INLIST_GET(f)); + } } } else @@ -183,7 +183,7 @@ _ecore_file_monitor_poll_handler(void *data __UNUSED__) _lock = 1; EINA_INLIST_FOREACH(_monitors, l) - _ecore_file_monitor_poll_check(l); + _ecore_file_monitor_poll_check(l); _lock = 0; if (_interval > ECORE_FILE_INTERVAL_MAX) @@ -210,7 +210,6 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em) if (mtime < ECORE_FILE_MONITOR_POLL(em)->mtime) { Ecore_File *l; - Ecore_File_Event event; /* Notify all files deleted */ for (l = em->files; l;) @@ -221,16 +220,12 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em) l = (Ecore_File *) EINA_INLIST_GET(l)->next; snprintf(buf, sizeof(buf), "%s/%s", em->path, f->name); - if (f->is_dir) - event = ECORE_FILE_EVENT_DELETED_DIRECTORY; - else - event = ECORE_FILE_EVENT_DELETED_FILE; - em->func(em->data, em, event, buf); + em->func(em->data, em, ECORE_FILE_EVENT_DELETE, buf, f->is_dir); free(f->name); free(f); } em->files = NULL; - em->func(em->data, em, ECORE_FILE_EVENT_DELETED_SELF, em->path); + em->func(em->data, em, ECORE_FILE_EVENT_DELETE_SELF, em->path, ECORE_FILE_MONITOR_POLL(em)->is_dir); _interval = ECORE_FILE_INTERVAL_MIN; } else @@ -242,8 +237,6 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em) { Ecore_File *f = l; char buf[PATH_MAX]; - int mtime; - Ecore_File_Event event; l = (Ecore_File *) EINA_INLIST_GET(l)->next; @@ -251,20 +244,15 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em) mtime = ecore_file_mod_time(buf); if (mtime < f->mtime) { - if (f->is_dir) - event = ECORE_FILE_EVENT_DELETED_DIRECTORY; - else - event = ECORE_FILE_EVENT_DELETED_FILE; - - em->func(em->data, em, event, buf); + em->func(em->data, em, ECORE_FILE_EVENT_DELETE, buf, f->is_dir); em->files = (Ecore_File *) eina_inlist_remove(EINA_INLIST_GET(em->files), EINA_INLIST_GET(f)); free(f->name); free(f); _interval = ECORE_FILE_INTERVAL_MIN; } - else if ((mtime > f->mtime) && !(f->is_dir)) + else if (mtime > f->mtime) { - em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, buf); + em->func(em->data, em, ECORE_FILE_EVENT_MODIFY, buf, f->is_dir); _interval = ECORE_FILE_INTERVAL_MIN; f->mtime = mtime; } @@ -276,48 +264,31 @@ _ecore_file_monitor_poll_check(Ecore_File_Monitor *em) if (ECORE_FILE_MONITOR_POLL(em)->mtime < mtime) { Eina_List *files; - Eina_List *l; char *file; /* Files have been added or removed */ files = ecore_file_ls(em->path); - if (files) + EINA_LIST_FREE(files, file) { - /* Are we a directory? We should check first, rather than rely on null here*/ - EINA_LIST_FOREACH(files, l, file) - { - Ecore_File *f; - char buf[PATH_MAX]; - Ecore_File_Event event; - - if (_ecore_file_monitor_poll_checking(em, file)) - continue; - - snprintf(buf, sizeof(buf), "%s/%s", em->path, file); - f = calloc(1, sizeof(Ecore_File)); - if (!f) - continue; - - f->name = strdup(file); - f->mtime = ecore_file_mod_time(buf); - f->is_dir = ecore_file_is_dir(buf); - if (f->is_dir) - event = ECORE_FILE_EVENT_CREATED_DIRECTORY; - else - event = ECORE_FILE_EVENT_CREATED_FILE; - em->func(em->data, em, event, buf); - em->files = (Ecore_File *) eina_inlist_append(EINA_INLIST_GET(em->files), EINA_INLIST_GET(f)); - } - while (files) - { - file = eina_list_data_get(files); - free(file); - files = eina_list_remove_list(files, files); - } + Ecore_File *f; + char buf[PATH_MAX]; + + if (_ecore_file_monitor_poll_checking(em, file)) + continue; + + snprintf(buf, sizeof(buf), "%s/%s", em->path, file); + f = calloc(1, sizeof(Ecore_File)); + if (!f) + continue; + + f->name = strdup(file); + f->mtime = ecore_file_mod_time(buf); + f->is_dir = ecore_file_is_dir(buf); + em->func(em->data, em, ECORE_FILE_EVENT_CREATE, buf, f->is_dir); + em->files = (Ecore_File *) eina_inlist_append(EINA_INLIST_GET(em->files), EINA_INLIST_GET(f)); } - if (!ecore_file_is_dir(em->path)) - em->func(em->data, em, ECORE_FILE_EVENT_MODIFIED, em->path); + em->func(em->data, em, ECORE_FILE_EVENT_MODIFY, em->path, ECORE_FILE_MONITOR_POLL(em)->is_dir); _interval = ECORE_FILE_INTERVAL_MIN; } } diff --git a/ecore/src/lib/ecore_file/ecore_file_private.h b/ecore/src/lib/ecore_file/ecore_file_private.h index 9d798e4..3c318a0 100644 --- a/ecore/src/lib/ecore_file/ecore_file_private.h +++ b/ecore/src/lib/ecore_file/ecore_file_private.h @@ -72,10 +72,7 @@ struct _Ecore_File struct _Ecore_File_Monitor { EINA_INLIST; - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path); + Ecore_File_Monitor_Cb func; char *path; void *data; @@ -85,12 +82,9 @@ struct _Ecore_File_Monitor #ifdef HAVE_INOTIFY int ecore_file_monitor_inotify_init(void); int ecore_file_monitor_inotify_shutdown(void); -Ecore_File_Monitor *ecore_file_monitor_inotify_add(const char *path, - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path), - void *data); +Ecore_File_Monitor *ecore_file_monitor_inotify_add(const char *path, + Ecore_File_Monitor_Cb func, + void *data); void ecore_file_monitor_inotify_del(Ecore_File_Monitor *ecore_file_monitor); #endif @@ -98,10 +92,7 @@ void ecore_file_monitor_inotify_del(Ecore_File_Monitor *ecore_fil int ecore_file_monitor_win32_init(void); int ecore_file_monitor_win32_shutdown(void); Ecore_File_Monitor *ecore_file_monitor_win32_add(const char *path, - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path), + Ecore_File_Monitor_Cb func, void *data); void ecore_file_monitor_win32_del(Ecore_File_Monitor *ecore_file_monitor); #endif @@ -110,10 +101,7 @@ void ecore_file_monitor_win32_del(Ecore_File_Monitor *ecore_file_ int ecore_file_monitor_poll_init(void); int ecore_file_monitor_poll_shutdown(void); Ecore_File_Monitor *ecore_file_monitor_poll_add(const char *path, - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path), + Ecore_File_Monitor_Cb func, void *data); void ecore_file_monitor_poll_del(Ecore_File_Monitor *ecore_file_monitor); diff --git a/eeze/src/lib/eeze_disk_libmount.c b/eeze/src/lib/eeze_disk_libmount.c index 36fd9ae..48b4eec 100644 --- a/eeze/src/lib/eeze_disk_libmount.c +++ b/eeze/src/lib/eeze_disk_libmount.c @@ -34,7 +34,7 @@ static mnt_tab *_eeze_mount_fstab = NULL; static mnt_lock *_eeze_mtab_lock = NULL; static mnt_tab *_eeze_mount_tab_parse(const char *filename); -static void _eeze_mount_tab_watcher(void *data, Ecore_File_Monitor *mon __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path); +static void _eeze_mount_tab_watcher(void *data, Ecore_File_Monitor *mon __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path, Eina_Bool isdir __UNUSED__); static Eina_Bool _eeze_mount_lock_mtab(void) @@ -87,7 +87,7 @@ _eeze_mount_tab_parse(const char *filename) } static void -_eeze_mount_tab_watcher(void *data, Ecore_File_Monitor *mon __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path) +_eeze_mount_tab_watcher(void *data, Ecore_File_Monitor *mon __UNUSED__, Ecore_File_Event event __UNUSED__, const char *path, Eina_Bool isdir __UNUSED__) { mnt_tab *bak; diff --git a/efreet/src/lib/efreet_cache.c b/efreet/src/lib/efreet_cache.c index 1a9d9c1..a91a044 100644 --- a/efreet/src/lib/efreet_cache.c +++ b/efreet/src/lib/efreet_cache.c @@ -83,7 +83,8 @@ static void efreet_cache_icon_fallback_free(Efreet_Cache_Fallback_Icon *icon); static Eina_Bool cache_exe_cb(void *data, int type, void *event); static void cache_update_cb(void *data, Ecore_File_Monitor *em, - Ecore_File_Event event, const char *path); + Ecore_File_Event event, const char *path, + Eina_Bool isdir); static void desktop_cache_update_cache_job(void *data); static void icon_cache_update_cache_job(void *data); @@ -846,15 +847,16 @@ cache_exe_cb(void *data __UNUSED__, int type __UNUSED__, void *event) static void cache_update_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, - Ecore_File_Event event, const char *path) + Ecore_File_Event event, const char *path, Eina_Bool isdir) { const char *file; Efreet_Event_Cache_Update *ev = NULL; Efreet_Old_Cache *d = NULL; Eina_List *l = NULL; - if (event != ECORE_FILE_EVENT_CREATED_FILE && - event != ECORE_FILE_EVENT_MODIFIED) return; + if (isdir) return; + if (event != ECORE_FILE_EVENT_CREATE && + event != ECORE_FILE_EVENT_CLOSE_WRITE) return; file = ecore_file_file_get(path); if (!file) return; diff --git a/efreet/src/lib/efreet_desktop.c b/efreet/src/lib/efreet_desktop.c index a0ae66d..7309c5b 100644 --- a/efreet/src/lib/efreet_desktop.c +++ b/efreet/src/lib/efreet_desktop.c @@ -112,7 +112,8 @@ static void efreet_desktop_changes_listen(void); static void efreet_desktop_changes_listen_recursive(const char *path); static void efreet_desktop_changes_monitor_add(const char *path); static void efreet_desktop_changes_cb(void *data, Ecore_File_Monitor *em, - Ecore_File_Event event, const char *path); + Ecore_File_Event event, const char *path, + Eina_Bool isdir); /** * @internal @@ -1353,7 +1354,8 @@ efreet_desktop_changes_monitor_add(const char *path) static void efreet_desktop_changes_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, - Ecore_File_Event event, const char *path) + Ecore_File_Event event, const char *path, + Eina_Bool isdir) { const char *ext; @@ -1363,23 +1365,38 @@ efreet_desktop_changes_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED /* noop */ break; - case ECORE_FILE_EVENT_CREATED_FILE: - case ECORE_FILE_EVENT_DELETED_FILE: - case ECORE_FILE_EVENT_MODIFIED: + case ECORE_FILE_EVENT_MOVED_TO: + case ECORE_FILE_EVENT_MOVED_FROM: + case ECORE_FILE_EVENT_CREATE: + case ECORE_FILE_EVENT_DELETE: + case ECORE_FILE_EVENT_MODIFY: + case ECORE_FILE_EVENT_ATTRIB: + case ECORE_FILE_EVENT_CLOSE_WRITE: ext = strrchr(path, '.'); if (!strcmp(ext, ".desktop") || !strcmp(ext, ".directory")) efreet_cache_desktop_update(); + if (isdir) + { + if ((event == ECORE_FILE_EVENT_MOVED_FROM) || + (event == ECORE_FILE_EVENT_DELETE)) + { + eina_hash_del_by_key(change_monitors, path); + } + else if ((event == ECORE_FILE_EVENT_MOVED_TO) || + (event == ECORE_FILE_EVENT_CREATE)) + { + efreet_desktop_changes_monitor_add(path); + } + efreet_cache_desktop_update(); + } + /* fallthrough */ break; - case ECORE_FILE_EVENT_DELETED_SELF: - case ECORE_FILE_EVENT_DELETED_DIRECTORY: + case ECORE_FILE_EVENT_MOVE_SELF: + case ECORE_FILE_EVENT_DELETE_SELF: + case ECORE_FILE_EVENT_UNMOUNT: eina_hash_del_by_key(change_monitors, path); efreet_cache_desktop_update(); break; - - case ECORE_FILE_EVENT_CREATED_DIRECTORY: - efreet_desktop_changes_monitor_add(path); - efreet_cache_desktop_update(); - break; } } diff --git a/efreet/src/lib/efreet_icon.c b/efreet/src/lib/efreet_icon.c index 52bf364..009cf0b 100644 --- a/efreet/src/lib/efreet_icon.c +++ b/efreet/src/lib/efreet_icon.c @@ -72,7 +72,8 @@ static const char *efreet_cache_icon_fallback_lookup_path_path(Efreet_Cache_Fall static void efreet_icon_changes_listen(void); static void efreet_icon_changes_monitor_add(const char *path); static void efreet_icon_changes_cb(void *data, Ecore_File_Monitor *em, - Ecore_File_Event event, const char *path); + Ecore_File_Event event, const char *path, + Eina_Bool isdir); /** @@ -955,7 +956,8 @@ efreet_icon_changes_monitor_add(const char *path) static void efreet_icon_changes_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, - Ecore_File_Event event, const char *path) + Ecore_File_Event event, const char *path, + Eina_Bool isdir __UNUSED__) { switch (event) { @@ -963,15 +965,19 @@ efreet_icon_changes_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__, /* noop */ break; - case ECORE_FILE_EVENT_CREATED_FILE: - case ECORE_FILE_EVENT_DELETED_FILE: - case ECORE_FILE_EVENT_MODIFIED: - case ECORE_FILE_EVENT_DELETED_DIRECTORY: - case ECORE_FILE_EVENT_CREATED_DIRECTORY: + case ECORE_FILE_EVENT_ATTRIB: + case ECORE_FILE_EVENT_CREATE: + case ECORE_FILE_EVENT_DELETE: + case ECORE_FILE_EVENT_MODIFY: + case ECORE_FILE_EVENT_CLOSE_WRITE: + case ECORE_FILE_EVENT_MOVED_TO: + case ECORE_FILE_EVENT_MOVED_FROM: efreet_cache_icon_update(); break; - case ECORE_FILE_EVENT_DELETED_SELF: + case ECORE_FILE_EVENT_DELETE_SELF: + case ECORE_FILE_EVENT_MOVE_SELF: + case ECORE_FILE_EVENT_UNMOUNT: eina_hash_del_by_key(change_monitors, path); efreet_cache_icon_update(); break; diff --git a/efreet/src/lib/efreet_mime.c b/efreet/src/lib/efreet_mime.c index 2f326bb..a97303d 100644 --- a/efreet/src/lib/efreet_mime.c +++ b/efreet/src/lib/efreet_mime.c @@ -187,7 +187,8 @@ static void efreet_mime_monitor_add(const char *file); static void efreet_mime_cb_update_file(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, - const char *path); + const char *path, + Eina_Bool isdir); static void efreet_mime_icons_flush(double now); static void efreet_mime_icon_entry_head_free(Efreet_Mime_Icon_Entry_Head *entry); @@ -631,6 +632,7 @@ efreet_mime_load_magics(Eina_List *datadirs, const char *datahome) * @param monitor Ecore_File_Monitor associated with this event * @param event The type of event * @param path Path to the file that was updated + * @param isdir If the path is a directory * @return Returns no value * @brief Callback for all file monitors. Just reloads the appropriate * list depending on which file changed. If it was a magic file @@ -641,7 +643,8 @@ static void efreet_mime_cb_update_file(void *data __UNUSED__, Ecore_File_Monitor *monitor __UNUSED__, Ecore_File_Event event __UNUSED__, - const char *path) + const char *path, + Eina_Bool isdir __UNUSED__) { Eina_List *datadirs = NULL; const char *datahome = NULL; diff --git a/enlil/src/enlil/album.c b/enlil/src/enlil/album.c index 272fc8d..449e3f2 100644 --- a/enlil/src/enlil/album.c +++ b/enlil/src/enlil/album.c @@ -38,7 +38,7 @@ static int _sort_photos_date_cb(const void *d1, const void *d2); static void _album_eet_photos_load(Enlil_Album *album); static int _album_eet_photos_save(Enlil_Album *album); -static void _album_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path); +static void _album_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir); static Eet_Data_Descriptor * _enlil_album_photos_file_name_edd_new(Eet_Data_Descriptor *edd_file_name); static Enlil_Album *_enlil_album_eet_photos_list_load(Enlil_Album *album); static Eet_Data_Descriptor * _enlil_album_photos_file_name_edd_new(Eet_Data_Descriptor *edd_file_name); @@ -553,7 +553,7 @@ static int _sort_photos_date_cb(const void *d1, const void *d2) return strcmp(date1, date2); } -static void _album_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path) +static void _album_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir) { Enlil_Album *album = (Enlil_Album*)data; Enlil_Library *enlil = album->library; @@ -568,17 +568,24 @@ static void _album_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Eve switch(event) { - case ECORE_FILE_EVENT_CREATED_FILE: + case ECORE_FILE_EVENT_CREATE: + case ECORE_FILE_EVENT_MOVED_TO: LOG_INFO("New photo: %s", path); - conf.monitor.photo_new_cb(conf.data, enlil, album, path); + if (!isdir) + conf.monitor.photo_new_cb(conf.data, enlil, album, path); break; - case ECORE_FILE_EVENT_DELETED_FILE: + case ECORE_FILE_EVENT_DELETE: + case ECORE_FILE_EVENT_MOVED_FROM: LOG_INFO("Deleted photo: %s", path); - conf.monitor.photo_delete_cb(conf.data, enlil, album, path); + if (!isdir) + conf.monitor.photo_delete_cb(conf.data, enlil, album, path); break; - case ECORE_FILE_EVENT_MODIFIED: + case ECORE_FILE_EVENT_MODIFY: + case ECORE_FILE_EVENT_CLOSE_WRITE: + case ECORE_FILE_EVENT_ATTRIB: LOG_INFO("Updated photo: %s", path); - conf.monitor.photo_update_cb(conf.data, enlil, album, path); + if (!isdir) + conf.monitor.photo_update_cb(conf.data, enlil, album, path); break; default: ; } diff --git a/enlil/src/enlil/library.c b/enlil/src/enlil/library.c index 3fa17b9..2df5609 100644 --- a/enlil/src/enlil/library.c +++ b/enlil/src/enlil/library.c @@ -4,7 +4,7 @@ * The file name, the path and the name are saved into library/data.eet. Consequently if the name of the album changed do not forget to update the list of album (enlil_library_eet_albums_save()). */ -static void _enlil_library_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path); +static void _enlil_library_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir); static Eet_Data_Descriptor *_enlil_library_albums_file_name_edd_new(Eet_Data_Descriptor *edd_file_name); static Eet_Data_Descriptor * _enlil_library_collections_edd_new(Eet_Data_Descriptor *collection_edd); static Eet_Data_Descriptor * _enlil_library_tags_edd_new(Eet_Data_Descriptor *tag_edd); @@ -1191,20 +1191,24 @@ int enlil_library_eet_album_remove(Enlil_Library *library, const char* key) return 1; } -static void _enlil_library_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path) +static void _enlil_library_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path, Eina_Bool isdir) { Enlil_Library *library = (Enlil_Library *)data; switch(event) { - case ECORE_FILE_EVENT_CREATED_DIRECTORY: + case ECORE_FILE_EVENT_CREATE: + case ECORE_FILE_EVENT_MOVED_TO: LOG_INFO("New album: %s", path); - library->conf.monitor.album_new_cb(library->conf.data, library, path); + if (isdir) + library->conf.monitor.album_new_cb(library->conf.data, library, path); break; - case ECORE_FILE_EVENT_DELETED_DIRECTORY: + case ECORE_FILE_EVENT_DELETE: + case ECORE_FILE_EVENT_MOVED_FROM: LOG_INFO("Deleted album; %s", path); library->conf.monitor.album_delete_cb(library->conf.data, library, path); break; - case ECORE_FILE_EVENT_DELETED_SELF: + case ECORE_FILE_EVENT_DELETE_SELF: + case ECORE_FILE_EVENT_MOVE_SELF: LOG_INFO("Deleted enlil library: %s", path); library->conf.monitor.enlil_delete_cb(library->conf.data, library); break; diff --git a/rage/src/bin/volume.c b/rage/src/bin/volume.c index 3070f01..0f3c01e 100644 --- a/rage/src/bin/volume.c +++ b/rage/src/bin/volume.c @@ -19,7 +19,7 @@ struct _Scan }; static char *volume_list_exists(Eina_List *list, char *vol); -static void volume_file_change(void *data, Ecore_File_Monitor *fmon, Ecore_File_Event ev, const char *path); +static void volume_file_change(void *data, Ecore_File_Monitor *fmon, Ecore_File_Event ev, const char *path, Eina_Bool isdir); static Eina_Bool volume_timer(void *data); static Eina_Bool volume_idler(void *data); static Volume_Item *volume_file_scan(char *file); @@ -231,7 +231,7 @@ volume_list_exists(Eina_List *list, char *vol) } static void -volume_file_change(void *data, Ecore_File_Monitor *fmon, Ecore_File_Event ev, const char *path) +volume_file_change(void *data, Ecore_File_Monitor *fmon, Ecore_File_Event ev, const char *path, Eina_Bool isdir) { if (volumes_load_timer) ecore_timer_del(volumes_load_timer); volumes_load_timer = ecore_timer_add(SCANDELAY, volume_timer, NULL); -- 1.7.1
------------------------------------------------------------------------------ The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: Pinpoint memory and threading errors before they happen. Find and fix more than 250 security defects in the development cycle. Locate bottlenecks in serial and parallel code that limit performance. http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel