On Mon, Feb 29, 2016 at 12:52 PM, Stephen Houston <[email protected]> wrote: > According to the docs, Ecore_File_Monitors do work on Windows.
Docs is wrong :-) > As for the question of why I switched from Eio, I already answered it. Yes, but your bug report doesn't really help. You don't describe how to see the issue even if it is irregularly. I have not even the beginning of an idea of what you are complaining about. If I said to you ephoto is not working, I am switching back to Eye of Gnome because of it. How would you be able to address the problem ? Cedric > On Mon, Feb 29, 2016 at 2:40 PM, Cedric BAIL <[email protected]> wrote: > >> On Feb 29, 2016 11:30, "Davide Andreoli" <[email protected]> wrote: >> > >> > 2016-02-29 18:16 GMT+01:00 Stephen okra Houston <[email protected]>: >> > >> > > okra pushed a commit to branch master. >> > > >> > > >> > > >> >> http://git.enlightenment.org/apps/ephoto.git/commit/?id=97e82b216f0191697691d768451cca6824d447e6 >> > > >> > > commit 97e82b216f0191697691d768451cca6824d447e6 >> > > Author: Stephen okra Houston <[email protected]> >> > > Date: Mon Feb 29 11:15:52 2016 -0600 >> > > >> > > Ephoto: Move to Ecore_File_Monitor: It behaves better than Eio at >> this >> > > point. >> > > >> > >> > oh, really? I have plans to port my usage of Ecore_File_Monitor to Eio in >> > the near future, because >> > the ecore one is not able to manage 2 monitors on the same folder at the >> > same time. >> >> It also doesn't work on Windows as far as I know and is pretty much lacking >> behind. >> >> > What problems are you getting using Eio? >> >> Would be interested to know too. >> >> > > --- >> > > src/bin/ephoto.h | 6 +- >> > > src/bin/ephoto_main.c | 234 ++++++++++------------ >> > > src/bin/ephoto_single_browser.c | 55 +++-- >> > > src/bin/ephoto_thumb_browser.c | 431 >> > > ++++++++++++++-------------------------- >> > > 4 files changed, 280 insertions(+), 446 deletions(-) >> > > >> > > diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h >> > > index c828b60..adc1d61 100644 >> > > --- a/src/bin/ephoto.h >> > > +++ b/src/bin/ephoto.h >> > > @@ -171,8 +171,7 @@ struct _Ephoto >> > > Eina_List *searchentries; >> > > Eina_List *thumbs; >> > > >> > > - Eio_Monitor *monitor; >> > > - Eina_List *monitor_handlers; >> > > + Ecore_File_Monitor *monitor; >> > > >> > > const char *top_directory; >> > > >> > > @@ -203,8 +202,7 @@ struct _Ephoto_Entry >> > > const char *label; >> > > double size; >> > > Ephoto *ephoto; >> > > - Eio_Monitor *monitor; >> > > - Eina_List *monitor_handlers; >> > > + Ecore_File_Monitor *monitor; >> > > Elm_Object_Item *item; >> > > Elm_Object_Item *parent; >> > > Eina_List *free_listeners; >> > > diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c >> > > index 9b35096..62c3c83 100644 >> > > --- a/src/bin/ephoto_main.c >> > > +++ b/src/bin/ephoto_main.c >> > > @@ -166,13 +166,7 @@ _win_free(void *data, Evas *e EINA_UNUSED, >> > > Evas_Object *obj EINA_UNUSED, >> > > if (ephoto->timer.thumb_regen) >> > > ecore_timer_del(ephoto->timer.thumb_regen); >> > > if (ephoto->monitor) >> > > - { >> > > - Ecore_Event_Handler *handler; >> > > - >> > > - EINA_LIST_FREE(ephoto->monitor_handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > - eio_monitor_del(ephoto->monitor); >> > > - } >> > > + ecore_file_monitor_del(ephoto->monitor); >> > > ephoto_config_save(ephoto); >> > > free(ephoto); >> > > } >> > > @@ -461,133 +455,133 @@ _ephoto_change_dir(void *data) >> > > _ephoto_populate_entries(ed); >> > > } >> > > >> > > -static Eina_Bool >> > > -_monitor_created(void *data, int type EINA_UNUSED, void *event) >> > > +static void >> > > +_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, >> > > + Ecore_File_Event event, const char *path) >> > > { >> > > Ephoto *ephoto = data; >> > > - Eio_Monitor_Event *ev = event; >> > > char file[PATH_MAX], dir[PATH_MAX]; >> > > >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > + snprintf(file, PATH_MAX, "%s", path); >> > > snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > >> > > if (strcmp(ephoto->config->directory, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > + return; >> > > >> > > - if (evas_object_image_extension_can_load_get(ev->filename)) >> > > + if (evas_object_image_extension_can_load_get(path)) >> > > { >> > > - Eina_List *l; >> > > - Ephoto_Entry *entry; >> > > - char buf[PATH_MAX]; >> > > + if (event == ECORE_FILE_EVENT_CREATED_FILE) >> > > + { >> > > + Eina_List *l; >> > > + Ephoto_Entry *entry; >> > > + char buf[PATH_MAX]; >> > > >> > > - EINA_LIST_FOREACH(ephoto->entries, l, entry) >> > > - { >> > > - if (!strcmp(entry->path, ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - } >> > > - snprintf(buf, PATH_MAX, "%s", ev->filename); >> > > - entry = ephoto_entry_new(ephoto, ev->filename, basename(buf), >> > > - EINA_FILE_REG); >> > > - ephoto_single_browser_path_created(ephoto->single_browser, >> entry); >> > > - if (!ephoto->entries) >> > > - { >> > > - ephoto->entries = eina_list_append(ephoto->entries, >> entry); >> > > - } >> > > - else >> > > - { >> > > - int near_cmp; >> > > - Eina_List *near_node = >> > > - eina_list_search_sorted_near_list(ephoto->entries, >> > > - ephoto_entries_cmp, entry, &near_cmp); >> > > - >> > > - if (near_cmp < 0) >> > > - ephoto->entries = >> > > - eina_list_append_relative_list(ephoto->entries, >> entry, >> > > - near_node); >> > > + EINA_LIST_FOREACH(ephoto->entries, l, entry) >> > > + { >> > > + if (!strcmp(entry->path, path)) >> > > + return; >> > > + } >> > > + snprintf(buf, PATH_MAX, "%s", path); >> > > + entry = ephoto_entry_new(ephoto, path, basename(buf), >> > > + EINA_FILE_REG); >> > > + >> ephoto_single_browser_path_created(ephoto->single_browser, >> > > entry); >> > > + if (!ephoto->entries) >> > > + { >> > > + ephoto->entries = eina_list_append(ephoto->entries, >> > > entry); >> > > + } >> > > else >> > > - ephoto->entries = >> > > - eina_list_prepend_relative_list(ephoto->entries, >> > > entry, >> > > - near_node); >> > > + { >> > > + int near_cmp; >> > > + Eina_List *near_node = >> > > + >> eina_list_search_sorted_near_list(ephoto->entries, >> > > + ephoto_entries_cmp, entry, &near_cmp); >> > > + >> > > + if (near_cmp < 0) >> > > + ephoto->entries = >> > > + >> eina_list_append_relative_list(ephoto->entries, >> > > entry, >> > > + near_node); >> > > + else >> > > + ephoto->entries = >> > > + >> eina_list_prepend_relative_list(ephoto->entries, >> > > entry, >> > > + near_node); >> > > + } >> > > + ephoto_thumb_browser_insert(ephoto, entry); >> > > + return; >> > > } >> > > - ephoto_thumb_browser_insert(ephoto, entry); >> > > - } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > -} >> > > - >> > > -static Eina_Bool >> > > -_monitor_deleted(void *data, int type EINA_UNUSED, void *event) >> > > -{ >> > > - Ephoto *ephoto = data; >> > > - Eio_Monitor_Event *ev = event; >> > > - char file[PATH_MAX], dir[PATH_MAX]; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > - >> > > - if (strcmp(ephoto->config->directory, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - if (evas_object_image_extension_can_load_get(ev->filename)) >> > > - { >> > > - Eina_List *l; >> > > - Ephoto_Entry *entry; >> > > - >> > > - EINA_LIST_FOREACH(ephoto->entries, l, entry) >> > > + else if (event == ECORE_FILE_EVENT_DELETED_FILE) >> > > { >> > > - if (!strcmp(entry->path, ev->filename)) >> > > + Eina_List *l; >> > > + Ephoto_Entry *entry; >> > > + >> > > + EINA_LIST_FOREACH(ephoto->entries, l, entry) >> > > { >> > > - ephoto_thumb_browser_remove(ephoto, entry); >> > > - ephoto_entry_free(ephoto, entry); >> > > - break; >> > > + if (!strcmp(entry->path, path)) >> > > + { >> > > + ephoto_thumb_browser_remove(ephoto, entry); >> > > + ephoto_entry_free(ephoto, entry); >> > > + break; >> > > + } >> > > } >> > > + return; >> > > } >> > > - } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > -} >> > > - >> > > -static Eina_Bool >> > > -_monitor_modified(void *data, int type EINA_UNUSED, void *event) >> > > -{ >> > > - Ephoto *ephoto = data; >> > > - Eio_Monitor_Event *ev = event; >> > > - char file[PATH_MAX], dir[PATH_MAX]; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > - >> > > - if (strcmp(ephoto->config->directory, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - if (evas_object_image_extension_can_load_get(ev->filename)) >> > > - { >> > > - Eina_List *l; >> > > - Ephoto_Entry *entry; >> > > - int found = 0; >> > > - >> > > - EINA_LIST_FOREACH(ephoto->entries, l, entry) >> > > + else if (event == ECORE_FILE_EVENT_MODIFIED) >> > > { >> > > - if (!strcmp(entry->path, ev->filename)) >> > > + Eina_List *l; >> > > + Ephoto_Entry *entry; >> > > + int found = 0; >> > > + >> > > + EINA_LIST_FOREACH(ephoto->entries, l, entry) >> > > { >> > > - if (!ecore_file_exists(entry->path)) >> > > + if (!strcmp(entry->path, path)) >> > > { >> > > - elm_object_item_del(entry->item); >> > > - ephoto_entry_free(ephoto, entry); >> > > + if (!ecore_file_exists(entry->path)) >> > > + { >> > > + elm_object_item_del(entry->item); >> > > + ephoto_entry_free(ephoto, entry); >> > > + } >> > > + else >> > > + { >> > > + if (!entry->item) >> > > + ephoto_thumb_browser_insert(ephoto, >> entry); >> > > + else >> > > + ephoto_thumb_browser_update(ephoto, >> entry); >> > > + } >> > > + found = 1; >> > > + break; >> > > + } >> > > + } >> > > + if (!found) >> > > + { >> > > + char buf[PATH_MAX]; >> > > + snprintf(buf, PATH_MAX, "%s", path); >> > > + entry = ephoto_entry_new(ephoto, path, >> basename(buf), >> > > + EINA_FILE_REG); >> > > + >> > > ephoto_single_browser_path_created(ephoto->single_browser, entry); >> > > + if (!ephoto->entries) >> > > + { >> > > + ephoto->entries = >> > > eina_list_append(ephoto->entries, entry); >> > > } >> > > else >> > > { >> > > - if (!entry->item) >> > > - ephoto_thumb_browser_insert(ephoto, entry); >> > > + int near_cmp; >> > > + Eina_List *near_node = >> > > + >> > > eina_list_search_sorted_near_list(ephoto->entries, >> > > + ephoto_entries_cmp, entry, &near_cmp); >> > > + >> > > + if (near_cmp < 0) >> > > + ephoto->entries = >> > > + >> > > eina_list_append_relative_list(ephoto->entries, entry, >> > > + near_node); >> > > else >> > > - ephoto_thumb_browser_update(ephoto, entry); >> > > + ephoto->entries = >> > > + >> > > eina_list_prepend_relative_list(ephoto->entries, entry, >> > > + near_node); >> > > } >> > > - found = 1; >> > > - break; >> > > + ephoto_thumb_browser_insert(ephoto, entry); >> > > + return; >> > > } >> > > } >> > > - if (!found) >> > > - _monitor_created(ephoto, 0, ev); >> > > } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > } >> > > >> > > void >> > > @@ -610,23 +604,8 @@ ephoto_directory_set(Ephoto *ephoto, const char >> > > *path, Evas_Object *expanded, >> > > ecore_job_del(ed->ephoto->job.change_dir); >> > > ed->ephoto->job.change_dir = ecore_job_add(_ephoto_change_dir, ed); >> > > if (ephoto->monitor) >> > > - { >> > > - Ecore_Event_Handler *handler; >> > > - >> > > - EINA_LIST_FREE(ephoto->monitor_handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > - eio_monitor_del(ephoto->monitor); >> > > - } >> > > - ephoto->monitor = eio_monitor_add(path); >> > > - ephoto->monitor_handlers = >> eina_list_append(ephoto->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_FILE_CREATED, >> _monitor_created, >> > > - ephoto)); >> > > - ephoto->monitor_handlers = >> eina_list_append(ephoto->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_FILE_DELETED, >> _monitor_deleted, >> > > - ephoto)); >> > > - ephoto->monitor_handlers = >> eina_list_append(ephoto->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, >> > > _monitor_modified, >> > > - ephoto)); >> > > + ecore_file_monitor_del(ephoto->monitor); >> > > + ephoto->monitor = ecore_file_monitor_add(path, _monitor_cb, >> ephoto); >> > > } >> > > >> > > static Eina_Bool >> > > @@ -789,8 +768,7 @@ ephoto_entry_free(Ephoto *ephoto, Ephoto_Entry >> *entry) >> > > { >> > > Ephoto_Entry_Free_Listener *fl; >> > > Eina_List *node; >> > > - Ecore_Event_Handler *handler; >> > > - >> > > + >> > > EINA_LIST_FREE(entry->free_listeners, fl) >> > > { >> > > fl->cb((void *) fl->data, entry); >> > > @@ -810,9 +788,7 @@ ephoto_entry_free(Ephoto *ephoto, Ephoto_Entry >> *entry) >> > > eina_stringshare_del(entry->path); >> > > eina_stringshare_del(entry->label); >> > > if (entry->monitor) >> > > - eio_monitor_del(entry->monitor); >> > > - EINA_LIST_FREE(entry->monitor_handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > + ecore_file_monitor_del(entry->monitor); >> > > free(entry); >> > > } >> > > >> > > diff --git a/src/bin/ephoto_single_browser.c >> > > b/src/bin/ephoto_single_browser.c >> > > index f99e518..9dd7044 100644 >> > > --- a/src/bin/ephoto_single_browser.c >> > > +++ b/src/bin/ephoto_single_browser.c >> > > @@ -40,7 +40,7 @@ struct _Ephoto_Single_Browser >> > > struct _Ephoto_Viewer >> > > { >> > > Eina_List *handlers; >> > > - Eio_Monitor *monitor; >> > > + Ecore_File_Monitor *monitor; >> > > Evas_Object *scroller; >> > > Evas_Object *table; >> > > Evas_Object *image; >> > > @@ -61,12 +61,8 @@ _viewer_del(void *data, Evas *e EINA_UNUSED, >> > > Evas_Object *obj EINA_UNUSED, >> > > void *event_info EINA_UNUSED) >> > > { >> > > Ephoto_Viewer *v = data; >> > > - Ecore_Event_Handler *handler; >> > > - >> > > - EINA_LIST_FREE(v->handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > if (v->monitor) >> > > - eio_monitor_del(v->monitor); >> > > + ecore_file_monitor_del(v->monitor); >> > > free(v); >> > > } >> > > >> > > @@ -176,34 +172,37 @@ _get_edje_group(const char *path) >> > > return group; >> > > } >> > > >> > > -static Eina_Bool >> > > -_monitor_modified(void *data, int type EINA_UNUSED, void *event >> > > EINA_UNUSED) >> > > +static void >> > > +_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, >> > > + Ecore_File_Event event, const char *path EINA_UNUSED) >> > > { >> > > Ephoto_Single_Browser *sb = data; >> > > Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); >> > > >> > > - if (!ecore_file_exists(sb->entry->path)) >> > > - ephoto_entry_free(sb->ephoto, sb->entry); >> > > - else >> > > + if (event == ECORE_FILE_EVENT_MODIFIED) >> > > { >> > > - Evas_Object *tmp; >> > > - Evas_Coord w, h; >> > > - const char *group = _get_edje_group(sb->entry->path); >> > > + if (!ecore_file_exists(sb->entry->path)) >> > > + ephoto_entry_free(sb->ephoto, sb->entry); >> > > + else >> > > + { >> > > + Evas_Object *tmp; >> > > + Evas_Coord w, h; >> > > + const char *group = _get_edje_group(sb->entry->path); >> > > >> > > - tmp = evas_object_image_add(evas_object_evas_get(v->table)); >> > > - evas_object_image_file_set(tmp, sb->entry->path, group); >> > > - evas_object_image_size_get(tmp, &w, &h); >> > > - evas_object_del(tmp); >> > > + tmp = >> evas_object_image_add(evas_object_evas_get(v->table)); >> > > + evas_object_image_file_set(tmp, sb->entry->path, group); >> > > + evas_object_image_size_get(tmp, &w, &h); >> > > + evas_object_del(tmp); >> > > >> > > - if (w > 0 && h > 0) >> > > - { >> > > - evas_object_hide(v->image); >> > > - elm_image_file_set(v->image, sb->entry->path, group); >> > > - evas_object_show(v->image); >> > > + if (w > 0 && h > 0) >> > > + { >> > > + evas_object_hide(v->image); >> > > + elm_image_file_set(v->image, sb->entry->path, >> group); >> > > + evas_object_show(v->image); >> > > + } >> > > } >> > > } >> > > - >> > > - return ECORE_CALLBACK_PASS_ON; >> > > + return; >> > > } >> > > >> > > static Evas_Object * >> > > @@ -258,10 +257,7 @@ _viewer_add(Evas_Object *parent, const char *path, >> > > Ephoto_Single_Browser *sb) >> > > } >> > > >> > > >> > > - v->monitor = eio_monitor_add(path); >> > > - v->handlers = eina_list_append(v->handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, >> > > - _monitor_modified, sb)); >> > > + v->monitor = ecore_file_monitor_add(path, _monitor_cb, sb); >> > > return v->scroller; >> > > >> > > error: >> > > @@ -1353,6 +1349,7 @@ _save_image_as_done(void *data, Evas_Object *obj >> > > EINA_UNUSED, void *event_info) >> > > } >> > > else >> > > { >> > > + evas_object_del(opopup); >> > > char *dir = ecore_file_dir_get(buf); >> > > >> > > if (strcmp(dir, sb->ephoto->config->directory)) >> > > diff --git a/src/bin/ephoto_thumb_browser.c >> > > b/src/bin/ephoto_thumb_browser.c >> > > index f3e221b..97ee42c 100644 >> > > --- a/src/bin/ephoto_thumb_browser.c >> > > +++ b/src/bin/ephoto_thumb_browser.c >> > > @@ -39,8 +39,7 @@ struct _Ephoto_Thumb_Browser >> > > Elm_Object_Item *last_sel; >> > > Ephoto_Sort sort; >> > > Eio_File *ls; >> > > - Eio_Monitor *monitor; >> > > - Eina_List *monitor_handlers; >> > > + Ecore_File_Monitor *monitor; >> > > Eina_List *cut_items; >> > > Eina_List *copy_items; >> > > Eina_List *handlers; >> > > @@ -86,12 +85,8 @@ static void _grid_mouse_up_cb(void *data, Evas *e >> > > EINA_UNUSED, >> > > static void _ephoto_thumb_activated(void *data, Evas_Object *obj >> > > EINA_UNUSED, >> > > void *event_info); >> > > static void _zoom_set(Ephoto_Thumb_Browser *tb, int zoom); >> > > -static Eina_Bool _monitor_created(void *data, int type EINA_UNUSED, >> > > - void *event); >> > > -static Eina_Bool _monitor_deleted(void *data, int type EINA_UNUSED, >> > > - void *event); >> > > -static Eina_Bool _monitor_modified(void *data, int type EINA_UNUSED, >> > > - void *event); >> > > +static void _monitor_cb(void *data, Ecore_File_Monitor *em >> EINA_UNUSED, >> > > + Ecore_File_Event event, const char *path); >> > > >> > > static void >> > > _update_info_label(Ephoto_Thumb_Browser *tb) >> > > @@ -494,181 +489,124 @@ _check_for_subdirs(Ephoto_Entry *entry) >> > > return EINA_FALSE; >> > > } >> > > >> > > -static Eina_Bool >> > > -_monitor_created(void *data, int type EINA_UNUSED, void *event) >> > > +static void >> > > +_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, >> > > + Ecore_File_Event event, const char *path) >> > > { >> > > Elm_Object_Item *item; >> > > Ephoto_Entry *entry = data; >> > > Ephoto_Entry *e; >> > > - Eio_Monitor_Event *ev = event; >> > > char file[PATH_MAX], dir[PATH_MAX]; >> > > const Elm_Genlist_Item_Class *ic; >> > > char buf[PATH_MAX]; >> > > >> > > if (!entry) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - if (!ecore_file_is_dir(ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > + return; >> > > >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > + snprintf(file, PATH_MAX, "%s", path); >> > > snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > >> > > if (strcmp(entry->path, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - item = elm_genlist_first_item_get(entry->genlist); >> > > - while (item) >> > > - { >> > > - e = elm_object_item_data_get(item); >> > > - if (!strcmp(e->path, ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - item = elm_genlist_item_next_get(item); >> > > - } >> > > - if (elm_genlist_item_type_get(entry->item) == ELM_GENLIST_ITEM_TREE >> && >> > > - elm_genlist_item_expanded_get(entry->item) == EINA_TRUE) >> > > + return; >> > > + if (event == ECORE_FILE_EVENT_CREATED_DIRECTORY) >> > > { >> > > - ic = &_ephoto_dir_class; >> > > - snprintf(buf, PATH_MAX, "%s", ev->filename); >> > > - e = ephoto_entry_new(entry->ephoto, ev->filename, >> basename(buf), >> > > - EINA_FILE_DIR); >> > > - e->genlist = entry->genlist; >> > > - e->parent = entry->item; >> > > - e->item = >> > > - elm_genlist_item_sorted_insert(entry->genlist, ic, e, >> > > - e->parent, ELM_GENLIST_ITEM_NONE, _entry_cmp, NULL, NULL); >> > > - if (e->item) >> > > + if (!ecore_file_is_dir(path)) >> > > + return; >> > > + item = elm_genlist_first_item_get(entry->genlist); >> > > + while (item) >> > > { >> > > - e->monitor = eio_monitor_add(e->path); >> > > - e->monitor_handlers = >> eina_list_append(e->monitor_handlers, >> > > - >> ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, >> > > - _monitor_created, e)); >> > > - e->monitor_handlers = >> eina_list_append(e->monitor_handlers, >> > > - >> ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, >> > > - _monitor_deleted, e)); >> > > - e->monitor_handlers = >> eina_list_append(e->monitor_handlers, >> > > - >> ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, >> > > - _monitor_modified, e)); >> > > + e = elm_object_item_data_get(item); >> > > + if (!strcmp(e->path, path)) >> > > + return; >> > > + item = elm_genlist_item_next_get(item); >> > > } >> > > - } >> > > - if (elm_genlist_item_type_get(entry->item) == >> ELM_GENLIST_ITEM_NONE) >> > > - { >> > > - Elm_Object_Item *parent; >> > > - Ecore_Event_Handler *handler; >> > > - >> > > - ic = &_ephoto_dir_class; >> > > - parent = >> > > - elm_genlist_item_insert_before(entry->genlist, ic, entry, >> > > - entry->parent, entry->item, ELM_GENLIST_ITEM_TREE, >> NULL, >> > > NULL); >> > > - entry->no_delete = EINA_TRUE; >> > > - if (entry->monitor) >> > > + if (elm_genlist_item_type_get(entry->item) == >> > > ELM_GENLIST_ITEM_TREE && >> > > + elm_genlist_item_expanded_get(entry->item) == EINA_TRUE) >> > > { >> > > - eio_monitor_del(entry->monitor); >> > > - EINA_LIST_FREE(entry->monitor_handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > + ic = &_ephoto_dir_class; >> > > + snprintf(buf, PATH_MAX, "%s", path); >> > > + e = ephoto_entry_new(entry->ephoto, path, basename(buf), >> > > + EINA_FILE_DIR); >> > > + e->genlist = entry->genlist; >> > > + e->parent = entry->item; >> > > + e->item = >> > > + elm_genlist_item_sorted_insert(entry->genlist, ic, e, >> > > + e->parent, ELM_GENLIST_ITEM_NONE, _entry_cmp, NULL, >> > > NULL); >> > > + if (e->item) >> > > + e->monitor = ecore_file_monitor_add(e->path, >> _monitor_cb, >> > > e); >> > > } >> > > - elm_object_item_del(entry->item); >> > > - entry->item = parent; >> > > - entry->no_delete = EINA_FALSE; >> > > - entry->monitor = eio_monitor_add(entry->path); >> > > - entry->monitor_handlers = >> > > eina_list_append(entry->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, >> > > - _monitor_created, entry)); >> > > - entry->monitor_handlers = >> > > eina_list_append(entry->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, >> > > - _monitor_deleted, entry)); >> > > - entry->monitor_handlers = >> > > eina_list_append(entry->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, >> > > - _monitor_modified, entry)); >> > > - } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > -} >> > > - >> > > -static Eina_Bool >> > > -_monitor_deleted(void *data, int type EINA_UNUSED, void *event) >> > > -{ >> > > - Elm_Object_Item *item; >> > > - Ephoto_Entry *entry = data; >> > > - Eio_Monitor_Event *ev = event; >> > > - char file[PATH_MAX], dir[PATH_MAX]; >> > > - const Elm_Genlist_Item_Class *ic; >> > > - >> > > - if (!entry) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > - >> > > - if (strcmp(entry->path, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - item = elm_genlist_first_item_get(entry->genlist); >> > > - while (item) >> > > - { >> > > - Ephoto_Entry *e = elm_object_item_data_get(item); >> > > - if (!strcmp(e->path, ev->filename)) >> > > + if (elm_genlist_item_type_get(entry->item) == >> > > ELM_GENLIST_ITEM_NONE) >> > > { >> > > - elm_object_item_del(e->item); >> > > - break; >> > > + Elm_Object_Item *parent; >> > > + >> > > + ic = &_ephoto_dir_class; >> > > + parent = >> > > + elm_genlist_item_insert_before(entry->genlist, ic, >> entry, >> > > + entry->parent, entry->item, >> ELM_GENLIST_ITEM_TREE, >> > > NULL, NULL); >> > > + entry->no_delete = EINA_TRUE; >> > > + if (entry->monitor) >> > > + ecore_file_monitor_del(entry->monitor); >> > > + elm_object_item_del(entry->item); >> > > + entry->item = parent; >> > > + entry->no_delete = EINA_FALSE; >> > > + entry->monitor = ecore_file_monitor_add(entry->path, >> > > _monitor_cb, entry); >> > > } >> > > - item = elm_genlist_item_next_get(item); >> > > - } >> > > - if (elm_genlist_item_type_get(entry->item) == ELM_GENLIST_ITEM_TREE >> && >> > > - _check_for_subdirs(entry) == EINA_FALSE) >> > > - { >> > > - Elm_Object_Item *parent; >> > > - >> > > - ic = &_ephoto_dir_class; >> > > - parent = >> > > - elm_genlist_item_insert_before(entry->genlist, ic, entry, >> > > - entry->parent, entry->item, ELM_GENLIST_ITEM_NONE, NULL, >> > > NULL); >> > > - entry->no_delete = EINA_TRUE; >> > > - elm_object_item_del(entry->item); >> > > - entry->item = parent; >> > > - entry->no_delete = EINA_FALSE; >> > > - } >> > > - if (!ecore_file_exists(entry->ephoto->config->directory)) >> > > - { >> > > - ephoto_directory_set(entry->ephoto, entry->path, >> entry->parent, >> > > 0, 1); >> > > - ephoto_title_set(entry->ephoto, entry->path); >> > > + return; >> > > } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > -} >> > > - >> > > -static Eina_Bool >> > > -_monitor_modified(void *data, int type EINA_UNUSED, void *event) >> > > -{ >> > > - Ephoto_Entry *entry = data; >> > > - Eio_Monitor_Event *ev = event; >> > > - char file[PATH_MAX], dir[PATH_MAX]; >> > > - >> > > - if (!entry) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - if (!ecore_file_is_dir(ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > - >> > > - if (strcmp(entry->path, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - if ((elm_genlist_item_expanded_get(entry->item) == EINA_TRUE)) >> > > + else if (event == ECORE_FILE_EVENT_DELETED_DIRECTORY) >> > > { >> > > - Elm_Object_Item *item; >> > > - >> > > item = elm_genlist_first_item_get(entry->genlist); >> > > while (item) >> > > { >> > > - Ephoto_Entry *e = elm_object_item_data_get(item); >> > > - if (!strcmp(e->path, ev->filename)) >> > > + e = elm_object_item_data_get(item); >> > > + if (!strcmp(e->path, path)) >> > > { >> > > - elm_genlist_item_update(e->item); >> > > + elm_object_item_del(e->item); >> > > break; >> > > } >> > > item = elm_genlist_item_next_get(item); >> > > } >> > > + if (elm_genlist_item_type_get(entry->item) == >> > > ELM_GENLIST_ITEM_TREE && >> > > + _check_for_subdirs(entry) == EINA_FALSE) >> > > + { >> > > + Elm_Object_Item *parent; >> > > + >> > > + ic = &_ephoto_dir_class; >> > > + parent = >> > > + elm_genlist_item_insert_before(entry->genlist, ic, >> entry, >> > > + entry->parent, entry->item, ELM_GENLIST_ITEM_NONE, >> NULL, >> > > NULL); >> > > + entry->no_delete = EINA_TRUE; >> > > + elm_object_item_del(entry->item); >> > > + entry->item = parent; >> > > + entry->no_delete = EINA_FALSE; >> > > + } >> > > + if (!ecore_file_exists(entry->ephoto->config->directory)) >> > > + { >> > > + ephoto_directory_set(entry->ephoto, entry->path, >> > > entry->parent, 0, 1); >> > > + ephoto_title_set(entry->ephoto, entry->path); >> > > + } >> > > + return; >> > > + } >> > > + else if (event == ECORE_FILE_EVENT_MODIFIED) >> > > + { >> > > + if (!ecore_file_is_dir(path)) >> > > + return; >> > > + if ((elm_genlist_item_expanded_get(entry->item) == EINA_TRUE)) >> > > + { >> > > + item = elm_genlist_first_item_get(entry->genlist); >> > > + while (item) >> > > + { >> > > + e = elm_object_item_data_get(item); >> > > + if (!strcmp(e->path, path)) >> > > + { >> > > + elm_genlist_item_update(e->item); >> > > + break; >> > > + } >> > > + item = elm_genlist_item_next_get(item); >> > > + } >> > > + } >> > > + return; >> > > } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > } >> > > >> > > static Eina_Bool >> > > @@ -715,20 +653,8 @@ _todo_items_process(void *data) >> > > } >> > > else >> > > { >> > > - entry->monitor = eio_monitor_add(entry->path); >> > > - entry->monitor_handlers = eina_list_append( >> > > - entry->monitor_handlers, >> > > - >> ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, >> > > - _monitor_created, entry)); >> > > - entry->monitor_handlers = eina_list_append( >> > > - entry->monitor_handlers, >> > > - >> ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, >> > > - _monitor_deleted, entry)); >> > > - entry->monitor_handlers = eina_list_append( >> > > - entry->monitor_handlers, >> > > - >> > > ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, >> > > - _monitor_modified, entry)); >> > > - entry->genlist = tb->fsel; >> > > + entry->monitor = ecore_file_monitor_add(entry->path, >> > > _monitor_cb, entry); >> > > + entry->genlist = tb->fsel; >> > > } >> > > } >> > > else >> > > @@ -3566,12 +3492,7 @@ _main_del(void *data, Evas *e EINA_UNUSED, >> > > Evas_Object *obj EINA_UNUSED, >> > > if (tb->searchentries) >> > > eina_list_free(tb->searchentries); >> > > if (tb->monitor) >> > > - { >> > > - eio_monitor_del(tb->monitor); >> > > - EINA_LIST_FREE(tb->monitor_handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > - } >> > > - >> > > + ecore_file_monitor_del(tb->monitor); >> > > free(tb); >> > > } >> > > >> > > @@ -3638,123 +3559,79 @@ _ephoto_thumb_populate_error(void *data, int >> type >> > > EINA_UNUSED, >> > > return ECORE_CALLBACK_PASS_ON; >> > > } >> > > >> > > -static Eina_Bool >> > > -_top_monitor_created(void *data, int type EINA_UNUSED, void *event) >> > > +static void >> > > +_top_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, >> > > + Ecore_File_Event event, const char *path) >> > > { >> > > Elm_Object_Item *item; >> > > Ephoto_Thumb_Browser *tb = data; >> > > - Eio_Monitor_Event *ev = event; >> > > Ephoto_Entry *e; >> > > const Elm_Genlist_Item_Class *ic; >> > > char buf[PATH_MAX], file[PATH_MAX], dir[PATH_MAX]; >> > > >> > > if (!tb) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - if (!ecore_file_is_dir(ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > + return; >> > > + snprintf(file, PATH_MAX, "%s", path); >> > > snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > >> > > if (strcmp(tb->ephoto->top_directory, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - item = elm_genlist_first_item_get(tb->fsel); >> > > - while (item) >> > > + return; >> > > + if (event == ECORE_FILE_EVENT_CREATED_DIRECTORY) >> > > { >> > > - e = elm_object_item_data_get(item); >> > > - if (!strcmp(e->path, ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - item = elm_genlist_item_next_get(item); >> > > + if (!ecore_file_is_dir(path)) >> > > + return; >> > > + item = elm_genlist_first_item_get(tb->fsel); >> > > + while (item) >> > > + { >> > > + e = elm_object_item_data_get(item); >> > > + if (!strcmp(e->path, path)) >> > > + return; >> > > + item = elm_genlist_item_next_get(item); >> > > + } >> > > + snprintf(buf, PATH_MAX, "%s", path); >> > > + e = ephoto_entry_new(tb->ephoto, path, basename(buf), >> > > + EINA_FILE_DIR); >> > > + e->genlist = tb->fsel; >> > > + ic = &_ephoto_dir_class; >> > > + e->item = >> > > + elm_genlist_item_append(tb->fsel, ic, e, >> > > + NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); >> > > + if (e->item) >> > > + e->monitor = ecore_file_monitor_add(e->path, _monitor_cb, >> e); >> > > + return; >> > > } >> > > - snprintf(buf, PATH_MAX, "%s", ev->filename); >> > > - e = ephoto_entry_new(tb->ephoto, ev->filename, basename(buf), >> > > - EINA_FILE_DIR); >> > > - e->genlist = tb->fsel; >> > > - ic = &_ephoto_dir_class; >> > > - e->item = >> > > - elm_genlist_item_append(tb->fsel, ic, e, >> > > - NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); >> > > - if (e->item) >> > > + else if (event == ECORE_FILE_EVENT_DELETED_DIRECTORY) >> > > { >> > > - e->monitor = eio_monitor_add(e->path); >> > > - e->monitor_handlers = eina_list_append(e->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, >> > > - _monitor_created, e)); >> > > - e->monitor_handlers = eina_list_append(e->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, >> > > - _monitor_deleted, e)); >> > > - e->monitor_handlers = eina_list_append(e->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, >> > > - _monitor_modified, e)); >> > > - } >> > > - >> > > - return ECORE_CALLBACK_PASS_ON; >> > > -} >> > > - >> > > -static Eina_Bool >> > > -_top_monitor_deleted(void *data, int type EINA_UNUSED, void *event) >> > > -{ >> > > - Elm_Object_Item *item; >> > > - Ephoto_Thumb_Browser *tb = data; >> > > - Eio_Monitor_Event *ev = event; >> > > - char file[PATH_MAX], dir[PATH_MAX]; >> > > - >> > > - if (!tb) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > - >> > > - if (strcmp(tb->ephoto->top_directory, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - item = elm_genlist_first_item_get(tb->fsel); >> > > - while (item) >> > > - { >> > > - Ephoto_Entry *e = elm_object_item_data_get(item); >> > > - if (!strcmp(e->path, ev->filename)) >> > > + item = elm_genlist_first_item_get(tb->fsel); >> > > + while (item) >> > > { >> > > - elm_object_item_del(e->item); >> > > - break; >> > > + e = elm_object_item_data_get(item); >> > > + if (!strcmp(e->path, path)) >> > > + { >> > > + elm_object_item_del(e->item); >> > > + break; >> > > + } >> > > + item = elm_genlist_item_next_get(item); >> > > } >> > > - item = elm_genlist_item_next_get(item); >> > > + return; >> > > } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > -} >> > > - >> > > - >> > > -static Eina_Bool >> > > -_top_monitor_modified(void *data, int type EINA_UNUSED, void *event) >> > > -{ >> > > - Elm_Object_Item *item; >> > > - Ephoto_Thumb_Browser *tb = data; >> > > - Eio_Monitor_Event *ev = event; >> > > - char file[PATH_MAX], dir[PATH_MAX]; >> > > - >> > > - if (!tb) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - if (!ecore_file_is_dir(ev->filename)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - snprintf(file, PATH_MAX, "%s", ev->filename); >> > > - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); >> > > - >> > > - if (strcmp(tb->ephoto->top_directory, dir)) >> > > - return ECORE_CALLBACK_PASS_ON; >> > > - >> > > - item = elm_genlist_first_item_get(tb->fsel); >> > > - while (item) >> > > + else if (event == ECORE_FILE_EVENT_MODIFIED) >> > > { >> > > - Ephoto_Entry *e = elm_object_item_data_get(item); >> > > - if (!strcmp(e->path, ev->filename)) >> > > + if (!ecore_file_is_dir(path)) >> > > + return; >> > > + item = elm_genlist_first_item_get(tb->fsel); >> > > + while (item) >> > > { >> > > - elm_genlist_item_update(e->item); >> > > - break; >> > > + e = elm_object_item_data_get(item); >> > > + if (!strcmp(e->path, path)) >> > > + { >> > > + elm_genlist_item_update(e->item); >> > > + break; >> > > + } >> > > + item = elm_genlist_item_next_get(item); >> > > } >> > > - item = elm_genlist_item_next_get(item); >> > > + return; >> > > } >> > > - return ECORE_CALLBACK_PASS_ON; >> > > } >> > > >> > > static Eina_Bool >> > > @@ -3885,26 +3762,12 @@ ephoto_thumb_browser_top_dir_set(Ephoto >> *ephoto, >> > > const char *dir) >> > > evas_object_data_get(ephoto->thumb_browser, "thumb_browser"); >> > > >> > > if (tb->monitor) >> > > - { >> > > - Ecore_Event_Handler *handler; >> > > - eio_monitor_del(tb->monitor); >> > > - EINA_LIST_FREE(tb->monitor_handlers, handler) >> > > - ecore_event_handler_del(handler); >> > > - } >> > > + ecore_file_monitor_del(tb->monitor); >> > > if (ephoto->top_directory) >> > > eina_stringshare_replace(&ephoto->top_directory, dir); >> > > else >> > > ephoto->top_directory = eina_stringshare_add(dir); >> > > - tb->monitor = eio_monitor_add(dir); >> > > - tb->monitor_handlers = eina_list_append(tb->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_CREATED, >> > > - _top_monitor_created, tb)); >> > > - tb->monitor_handlers = eina_list_append(tb->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_DELETED, >> > > - _top_monitor_deleted, tb)); >> > > - tb->monitor_handlers = eina_list_append(tb->monitor_handlers, >> > > - ecore_event_handler_add(EIO_MONITOR_DIRECTORY_MODIFIED, >> > > - _top_monitor_modified, tb)); >> > > + tb->monitor = ecore_file_monitor_add(dir, _top_monitor_cb, tb); >> > > } >> > > >> > > void >> > > >> > > -- >> > > >> > > >> > > >> > >> >> ------------------------------------------------------------------------------ >> > Site24x7 APM Insight: Get Deep Visibility into Application Performance >> > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month >> > Monitor end-to-end web transactions and take corrective actions now >> > Troubleshoot faster and improve end-user experience. Signup Now! >> > http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 >> > _______________________________________________ >> > enlightenment-devel mailing list >> > [email protected] >> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >> > >> >> ------------------------------------------------------------------------------ >> Site24x7 APM Insight: Get Deep Visibility into Application Performance >> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month >> Monitor end-to-end web transactions and take corrective actions now >> Troubleshoot faster and improve end-user experience. Signup Now! >> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 >> _______________________________________________ >> enlightenment-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >> > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 > _______________________________________________ > enlightenment-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- Cedric BAIL ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
