diff --git a/src/bin/ephoto_directory_browser.c b/src/bin/ephoto_directory_browser.c index a67d71e..634d25a 100644 --- a/src/bin/ephoto_directory_browser.c +++ b/src/bin/ephoto_directory_browser.c @@ -740,12 +740,16 @@ _monitor_cb(void *data, int type, char file[PATH_MAX], dir[PATH_MAX]; const Elm_Genlist_Item_Class *ic; char buf[PATH_MAX]; + char *freedir; if (!entry) return ECORE_CALLBACK_PASS_ON; snprintf(file, PATH_MAX, "%s", ev->filename); - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); + freedir = ecore_file_dir_get(file); + snprintf(dir, PATH_MAX, "%s", freedir); + if (freedir) free(freedir); + if (strcmp(entry->path, dir)) return ECORE_CALLBACK_PASS_ON; if (type == EIO_MONITOR_DIRECTORY_CREATED || type == EIO_MONITOR_FILE_CREATED) @@ -879,11 +883,14 @@ _top_monitor_cb(void *data, int type, Eio_Monitor_Event *ev = event; const Elm_Genlist_Item_Class *ic; char buf[PATH_MAX], file[PATH_MAX], dir[PATH_MAX]; + char *freedir; if (!db) return ECORE_CALLBACK_PASS_ON; snprintf(file, PATH_MAX, "%s", ev->filename); - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); + freedir = ecore_file_dir_get(file); + snprintf(dir, PATH_MAX, "%s", freedir); + if (freedir) free(freedir); if (strcmp(db->ephoto->top_directory, dir)) return ECORE_CALLBACK_PASS_ON; @@ -1095,6 +1102,7 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Ecore_Event_Handler *handler; _todo_items_free(db); + elm_drop_item_container_del(db->fsel); EINA_LIST_FREE(db->handlers, handler) ecore_event_handler_del(handler); if (db->animator.todo_items) { diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index ff29d98..add3ebb 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -237,7 +237,9 @@ _win_free(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, EINA_LIST_FREE(ephoto->monitor_handlers, handler) ecore_event_handler_del(handler); } + ephoto_entries_free(ephoto); ephoto_config_save(ephoto); + free(ephoto->config); free(ephoto); } @@ -744,13 +746,14 @@ _ephoto_populate_filter(void *data, Eio_File *handler EINA_UNUSED, } else if (info->type == EINA_FILE_LNK && ecore_file_is_dir((const char *)realpath)) { + Eina_Bool _is_dir = ecore_file_is_dir(realpath); if (ed->thumbs_only) { free(realpath); return EINA_FALSE; } free(realpath); - return ecore_file_is_dir(ecore_file_realpath(info->path)); + return _is_dir; } else if (!ed->dirs_only) { @@ -820,9 +823,12 @@ _monitor_cb(void *data, int type, Ephoto *ephoto = data; Eio_Monitor_Event *ev = event; char file[PATH_MAX], dir[PATH_MAX]; + char *freedir; snprintf(file, PATH_MAX, "%s", ev->filename); - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); + freedir = ecore_file_dir_get(file); + snprintf(dir, PATH_MAX, "%s", freedir); + if (freedir) free(freedir); if (!type) return ECORE_CALLBACK_PASS_ON; diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c index 3d5f433..5d5f04f 100644 --- a/src/bin/ephoto_single_browser.c +++ b/src/bin/ephoto_single_browser.c @@ -74,6 +74,11 @@ static void _ephoto_main_del(void *data, Evas *e EINA_UNUSED, static void _next_entry(Ephoto_Single_Browser *sb); static void _orient_apply(Ephoto_Single_Browser *sb); +/*Vewer Callbacks*/ +static double _viewer_zoom_get(Evas_Object *obj); +static void _viewer_zoom_set(Evas_Object *obj, double zoom); +static void _viewer_zoom_fit(Evas_Object *obj); + /*Common*/ static const char * _ephoto_get_edje_group(const char *path) @@ -303,19 +308,11 @@ _monitor_cb(void *data, int type, Ephoto_Single_Browser *sb = data; Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - if (eina_list_count(sb->history)) + if (eina_list_count(sb->history) > 1) return ECORE_CALLBACK_PASS_ON; if (type == EIO_MONITOR_FILE_MODIFIED) { - if (!ecore_file_exists(sb->entry->path)) - { - if (eina_list_count(sb->entries) > 1) - _next_entry(sb); - else - _ephoto_main_back(sb, NULL, NULL); - ephoto_entry_free(sb->ephoto, sb->entry); - } - else + if (ecore_file_exists(sb->entry->path)) { Evas_Object *tmp; Evas_Coord w, h; @@ -328,12 +325,21 @@ _monitor_cb(void *data, int type, if (w > 0 && h > 0) { - evas_object_hide(v->image); - evas_object_image_file_set(v->image, sb->entry->path, group); - evas_object_show(v->image); + Eina_Bool fit = v->fit; + double zoom = _viewer_zoom_get(sb->viewer); + + _ephoto_single_browser_recalc(sb); + if (fit) + _viewer_zoom_fit(sb->viewer); + else + _viewer_zoom_set(sb->viewer, zoom); } } } + else if (type == EIO_MONITOR_FILE_DELETED) + { + _ephoto_main_back(sb, NULL, NULL); + } return ECORE_CALLBACK_PASS_ON; } @@ -2091,6 +2097,7 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (!strncmp(bname, "tmp", 3)) ecore_file_unlink(info->path); } + eina_iterator_free(tmps); if (sb->history) { EINA_LIST_FREE(sb->history, eh) diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index 6384627..93028db 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -1282,6 +1282,7 @@ _ephoto_thumb_search_cancel(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *hbox = evas_object_data_get(search, "parent"); Ephoto_Thumb_Browser *tb = evas_object_data_get(search, "thumb_browser"); + elm_drag_item_container_del(tb->grid); tb->entries = tb->ephoto->entries; if (eina_list_count(tb->ephoto->searchentries)) eina_list_free(tb->ephoto->searchentries); @@ -1841,6 +1842,8 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Ecore_Event_Handler *handler; _todo_items_free(tb); + elm_drop_item_container_del(tb->grid); + elm_drag_item_container_del(tb->grid); EINA_LIST_FREE(tb->handlers, handler) ecore_event_handler_del(handler); if (tb->animator.todo_items) {