diff --git a/src/bin/ephoto_directory_browser.c b/src/bin/ephoto_directory_browser.c index 93b12a7..bfb659e 100644 --- a/src/bin/ephoto_directory_browser.c +++ b/src/bin/ephoto_directory_browser.c @@ -391,11 +391,13 @@ _check_for_subdirs(Ephoto_Entry *entry) return EINA_FALSE; EINA_ITERATOR_FOREACH(ls, info) { - if (info->type == EINA_FILE_DIR) - { - eina_iterator_free(ls); - return EINA_TRUE; - } + if (info->type != EINA_FILE_DIR && info->type != EINA_FILE_LNK) + continue; + if (info->type == EINA_FILE_LNK && !ecore_file_is_dir( + ecore_file_realpath(info->path))) + continue; + eina_iterator_free(ls); + return EINA_TRUE; } eina_iterator_free(ls); return EINA_FALSE; @@ -729,7 +731,7 @@ _monitor_cb(void *data, int type, return ECORE_CALLBACK_PASS_ON; if (type == EIO_MONITOR_DIRECTORY_CREATED) { - if (!ecore_file_is_dir(ev->filename)) + if (!ecore_file_is_dir(ecore_file_realpath(ev->filename))) return ECORE_CALLBACK_PASS_ON; if (ephoto_entry_exists(entry->ephoto, ev->filename)) return ECORE_CALLBACK_PASS_ON; @@ -833,7 +835,7 @@ _monitor_cb(void *data, int type, } else if (type == EIO_MONITOR_DIRECTORY_MODIFIED) { - if (!ecore_file_is_dir(ev->filename)) + if (!ecore_file_is_dir(ecore_file_realpath(ev->filename))) return ECORE_CALLBACK_PASS_ON; if ((elm_genlist_item_expanded_get(entry->item) == EINA_TRUE)) { @@ -874,7 +876,7 @@ _top_monitor_cb(void *data, int type, return ECORE_CALLBACK_PASS_ON; if (type == EIO_MONITOR_DIRECTORY_CREATED) { - if (!ecore_file_is_dir(ev->filename)) + if (!ecore_file_is_dir(ecore_file_realpath(ev->filename))) return ECORE_CALLBACK_PASS_ON; if (ephoto_entry_exists(db->ephoto, ev->filename)) return ECORE_CALLBACK_PASS_ON; @@ -924,7 +926,7 @@ _top_monitor_cb(void *data, int type, } else if (type == EIO_MONITOR_DIRECTORY_MODIFIED) { - if (!ecore_file_is_dir(ev->filename)) + if (!ecore_file_is_dir(ecore_file_realpath(ev->filename))) return ECORE_CALLBACK_PASS_ON; item = elm_genlist_first_item_get(db->fsel); while (item) @@ -1068,6 +1070,11 @@ _ephoto_dir_entry_create(void *data, int type EINA_UNUSED, void *event) db->todo_items = eina_list_append(db->todo_items, e); db->animator.count++; } + else if (ecore_file_is_dir(ecore_file_realpath(e->path))) + { + db->todo_items = eina_list_append(db->todo_items, e); + db->animator.count++; + } if (!db->animator.todo_items) db->animator.todo_items = ecore_animator_add(_todo_items_process, db); @@ -1185,8 +1192,12 @@ ephoto_directory_browser_initialize_structure(Ephoto *ephoto) cur = next; EINA_ITERATOR_FOREACH(it, finfo) { - if (finfo->type == EINA_FILE_DIR && - strncmp(finfo->path + finfo->name_start, ".", 1)) + if (finfo->type != EINA_FILE_DIR && finfo->type != EINA_FILE_LNK) + continue; + if (finfo->type == EINA_FILE_LNK && !ecore_file_is_dir( + ecore_file_realpath(finfo->path))) + continue; + if (strncmp(finfo->path + finfo->name_start, ".", 1)) { Ephoto_Entry *entry = ephoto_entry_new(db->ephoto, finfo->path, finfo->path+finfo->name_start, finfo->type); diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index ac94f41..ef6e37d 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -741,6 +741,10 @@ _ephoto_populate_filter(void *data, Eio_File *handler EINA_UNUSED, { return EINA_TRUE; } + else if (info->type == EINA_FILE_LNK && !ed->thumbs_only) + { + return ecore_file_is_dir(ecore_file_realpath(info->path)); + } if (!ed->dirs_only) return _ephoto_eina_file_direct_info_image_useful(info); else @@ -1065,7 +1069,10 @@ ephoto_entry_new(Ephoto *ephoto, const char *path, const char *label, entry->basename = ecore_file_file_get(entry->path); entry->label = eina_stringshare_add(label); if (type == EINA_FILE_DIR) - entry->is_dir = EINA_TRUE; + entry->is_dir = EINA_TRUE; + else if (type == EINA_FILE_LNK && ecore_file_is_dir( + ecore_file_realpath(entry->path))) + entry->is_dir = EINA_TRUE; else entry->is_dir = EINA_FALSE; return entry; diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index aa72ff2..14c748f 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -1417,7 +1417,7 @@ _ephoto_thumb_entry_create(void *data, int type EINA_UNUSED, void *event) Ephoto_Entry *e; e = ev->entry; - if (!e->is_dir) + if (!e->is_dir && !ecore_file_is_dir(ecore_file_realpath(e->path))) { Eina_File *f;