diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c index 1907e74..8cb4be5 100644 --- a/src/bin/ephoto_single_browser.c +++ b/src/bin/ephoto_single_browser.c @@ -38,7 +38,8 @@ struct _Ephoto_Single_Browser struct _Ephoto_Viewer { - Ecore_File_Monitor *monitor; + Eina_List *handlers; + Eio_Monitor *monitor; Evas_Object *scroller; Evas_Object *table; Evas_Object *image; @@ -60,28 +61,41 @@ _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) - ecore_file_monitor_del(v->monitor); + eio_monitor_del(v->monitor); free(v); } -static void -_viewer_monitor(void *data, Ecore_File_Monitor *em EINA_UNUSED, - Ecore_File_Event event, const char *path) +static Eina_Bool +_monitor_modified(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) { Ephoto_Single_Browser *sb = data; Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - if (!ecore_file_exists(path)) + if (!ecore_file_exists(sb->entry->path)) ephoto_entry_free(sb->ephoto, sb->entry); - else if (event == ECORE_FILE_EVENT_MODIFIED) + else v->modified = EINA_TRUE; - else if (event == ECORE_FILE_EVENT_CLOSED && v->modified == EINA_TRUE) + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_monitor_closed(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + Ephoto_Single_Browser *sb = data; + Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); + + if (v->modified == EINA_TRUE) { ephoto_single_browser_entry_set(sb->main, sb->entry); v->modified = EINA_FALSE; } -} + return ECORE_CALLBACK_PASS_ON; +} static Evas_Object * _image_create_icon(void *data, Evas_Object *parent, Evas_Coord *xoff, @@ -232,7 +246,11 @@ _viewer_add(Evas_Object *parent, const char *path, Ephoto_Single_Browser *sb) } - v->monitor = ecore_file_monitor_add(path, _viewer_monitor, 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->handlers = eina_list_append(v->handlers, + ecore_event_handler_add(EIO_MONITOR_FILE_CLOSED, _monitor_closed, sb)); return v->scroller;