etrunko pushed a commit to branch master.

http://git.enlightenment.org/apps/rage.git/commit/?id=7c80b9a131b729bd244b40c194dc36bf24dde661

commit 7c80b9a131b729bd244b40c194dc36bf24dde661
Author: Eduardo Lima (Etrunko) <ebl...@gmail.com>
Date:   Mon Aug 25 15:36:44 2014 -0300

    dnd: Recurse into directories
    
    Signed-off-by: Eduardo Lima (Etrunko) <eduardo.l...@intel.com>
---
 AUTHORS       |  1 +
 src/bin/dnd.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index b9a9404..230cb46 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1 +1,2 @@
 Carsten Haitzler <ras...@rasterman.com>
+Eduardo Lima (Etrunko) <ebl...@gmail.com>
diff --git a/src/bin/dnd.c b/src/bin/dnd.c
index f8faba4..1a8b9d2 100644
--- a/src/bin/dnd.c
+++ b/src/bin/dnd.c
@@ -60,6 +60,39 @@ _escape_parse(const char *str)
    return dest;
 }
 
+static Eina_Bool
+_recurse_dir(Evas_Object *win, const char *path)
+{
+   Eina_Bool ret = EINA_FALSE;
+   Eina_List *ls, *l;
+   char *p, *escape;
+   const char *full;
+
+   ls = ecore_file_ls(path);
+   EINA_LIST_FOREACH(ls, l, p)
+     {
+        escape = _escape_parse(p);
+        full = eina_stringshare_printf("%s/%s", path, escape);
+        free(escape);
+        if (ecore_file_is_dir(full))
+          {
+             ret = _recurse_dir(win, full);
+             eina_stringshare_del(full);
+             continue;
+          }
+
+        printf("inserting '%s'\n", full);
+        win_video_insert(win, full);
+        eina_stringshare_del(full);
+        ret = EINA_TRUE;
+     }
+
+   EINA_LIST_FREE(ls, p)
+     free(p);
+
+   return ret;
+}
+
 Eina_Bool
 _cb_drop(void *data, Evas_Object *o EINA_UNUSED, Elm_Selection_Data *ev)
 {
@@ -94,8 +127,15 @@ _cb_drop(void *data, Evas_Object *o EINA_UNUSED, 
Elm_Selection_Data *ev)
                             tt = _escape_parse(tb);
                             if (tt)
                               {
-                                 win_video_insert(win, tt);
-                                 inserted = EINA_TRUE;
+                                 if (ecore_file_is_dir(tt))
+                                   {
+                                      inserted = _recurse_dir(win, tt);
+                                   }
+                                 else
+                                   {
+                                      win_video_insert(win, tt);
+                                      inserted = EINA_TRUE;
+                                   }
                                  free(tt);
                               }
                          }
@@ -108,8 +148,15 @@ _cb_drop(void *data, Evas_Object *o EINA_UNUSED, 
Elm_Selection_Data *ev)
                             tt = _escape_parse(tb);
                             if (tt)
                               {
-                                 win_video_insert(win, tt);
-                                 inserted = EINA_TRUE;
+                                 if (ecore_file_is_dir(tt))
+                                   {
+                                      inserted = _recurse_dir(win, tt);
+                                   }
+                                 else
+                                   {
+                                      win_video_insert(win, tt);
+                                      inserted = EINA_TRUE;
+                                   }
                                  free(tt);
                               }
                          }
@@ -124,8 +171,15 @@ _cb_drop(void *data, Evas_Object *o EINA_UNUSED, 
Elm_Selection_Data *ev)
         char *tt = _escape_parse(ev->data);
         if (tt)
           {
-             win_video_insert(win, tt);
-             inserted = EINA_TRUE;
+             if (ecore_file_is_dir(tt))
+               {
+                  inserted = _recurse_dir(win, tt);
+               }
+             else
+               {
+                  win_video_insert(win, tt);
+                  inserted = EINA_TRUE;
+               }
              free(tt);
           }
      }

-- 


Reply via email to