This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efm2.

View the commit online.

commit d5109ca87285ebc5fe51ec906c9e20e8d9405207
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Wed Dec 27 21:22:42 2023 +0000

    we can finally navigate to child dirs and parent dirs...
---
 src/backends/default/open.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
 src/efm/efm.c               | 28 ++++++++++++++++++++--
 src/efm/efm.h               |  1 +
 src/efm/efm_back_end.c      | 18 ++++++++++----
 src/efm/main.c              | 20 ++++++++++++++--
 5 files changed, 117 insertions(+), 8 deletions(-)

diff --git a/src/backends/default/open.c b/src/backends/default/open.c
index 5638025..9950ad6 100644
--- a/src/backends/default/open.c
+++ b/src/backends/default/open.c
@@ -974,6 +974,64 @@ do_handle_cmd(Cmd *c)
       }
       KEY_WALK_END
     }
+  else if (!strcmp(c->command, "file-run"))
+    {
+      KEY_WALK_BEGIN
+      {
+        if (!strcmp(key, "path"))
+          {
+            char **plist, **p;
+            int files = 0, dirs = 0;
+
+            plist = eina_str_split(data, "\n", -1);
+            for (p = plist; *p; p++)
+              {
+                Efreet_Uri *uri = efreet_uri_decode(*p);
+
+                if (uri)
+                  {
+                    if ((uri->protocol) && (!strcmp(uri->protocol, "file")))
+                      {
+                        files++;
+                        if (ecore_file_is_dir(uri->path)) dirs++;
+                      }
+                    efreet_uri_free(uri);
+                  }
+              }
+            if ((files == 1) && (dirs == 1))
+              { // open a single dir, so set view to that dir
+                Efreet_Uri *uri = efreet_uri_decode(*plist);
+
+                if (uri)
+                  {
+                    Eina_Strbuf *strbuf;
+
+                    strbuf = cmd_strbuf_new("dir-request");
+                    cmd_strbuf_append(strbuf, "path", uri->path);
+                    cmd_strbuf_print_consume(strbuf);
+                    efreet_uri_free(uri);
+                  }
+              }
+            else
+              { // walk through all files and "run" them
+                for (p = plist; *p; p++)
+                  {
+                    Efreet_Uri *uri = efreet_uri_decode(*p);
+
+                    if (uri)
+                      {
+                        fprintf(stderr, "FFF: [%s][%s][%s]\n", uri->protocol,
+                                uri->hostname, uri->path);
+                        efreet_uri_free(uri);
+                      }
+                  }
+              }
+            free(*plist);
+            free(plist);
+          }
+      }
+      KEY_WALK_END
+    }
   //   cmd_dump_sterr(c);
 }
 
diff --git a/src/efm/efm.c b/src/efm/efm.c
index 0df9d97..742672a 100644
--- a/src/efm/efm.c
+++ b/src/efm/efm.c
@@ -45,13 +45,15 @@ static Evas_Smart_Class _sc_parent        = EVAS_SMART_CLASS_INIT_NULL;
   Smart_Data *sd = evas_object_smart_data_get(obj); \
   if (!sd) return
 
+static void _reset(Smart_Data *sd);
+static char *_sanitize_dir(const char *path);
+
 #include "efm_private.h"
 #include "efm_back_end.c"
 #include "efm_util.c"
 #include "efm_dnd.c"
 
-static void
-_cb_header_change(void *data)
+  static void _cb_header_change(void *data)
 {
   Smart_Data *sd = data;
 
@@ -1424,6 +1426,7 @@ _reset(Smart_Data *sd)
 
   if (sd->config.path)
     {
+      printf("O [ %s ]\n", sd->config.path);
       _listing_do(sd);
       buf = cmd_strbuf_new("dir-set");
       cmd_strbuf_append(buf, "path", sd->config.path);
@@ -1802,6 +1805,27 @@ efm_path_get(Evas_Object *obj)
   return sd->config.path;
 }
 
+void
+efm_path_parent(Evas_Object *obj)
+{
+  char *tmps, *p;
+
+  ENTRY;
+  if (!sd->config.path) return;
+  tmps = strdup(sd->config.path);
+  if (!tmps) return;
+  p = strrchr(tmps, '/');
+  if ((p) && (p != tmps))
+    {
+      *p = 0;
+      p = strrchr(tmps, '/');
+      if (p) p[1] = 0;
+    }
+  eina_stringshare_replace(&sd->config.path, tmps);
+  _reset(sd);
+  free(tmps);
+}
+
 ////////
 void
 efm_path_view_mode_set(Evas_Object *obj, Efm_View_Mode mode)
diff --git a/src/efm/efm.h b/src/efm/efm.h
index 9ee94f0..b821b8e 100644
--- a/src/efm/efm.h
+++ b/src/efm/efm.h
@@ -52,6 +52,7 @@ void        efm_backend_set(Evas_Object *obj, const char *backend);
 // alweays call path_Set last after setup above like setting icon size etc.
 void        efm_path_set(Evas_Object *obj, const char *path);
 const char *efm_path_get(Evas_Object *obj);
+void        efm_path_parent(Evas_Object *obj);
 
 #define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__)
 #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
diff --git a/src/efm/efm_back_end.c b/src/efm/efm_back_end.c
index 187c1e4..aec8152 100644
--- a/src/efm/efm_back_end.c
+++ b/src/efm/efm_back_end.c
@@ -407,7 +407,7 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
   Eina_List         *l, *il2, *il = NULL;
   Icon              *icon, *icon2;
   Block             *block;
-  const char        *file, *label, *s;
+  const char        *path, *file, *label, *s;
   int                file_adds = 0, file_dels = 0;
 
   if (!sd)
@@ -463,7 +463,7 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
       }
     else if (!strcmp(c->command, "timer-del"))
       { // *** must call before list-begin
-        const char *name = cmd_key_find(c, "backend");
+        const char *name = cmd_key_find(c, "name");
         Smart_Data_Timer *st;
         Eina_List        *l;
 
@@ -562,13 +562,13 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
       }
 
     // below commands all send a path for a specific file
-    file = cmd_key_find(c, "path");
+    path = file = cmd_key_find(c, "path");
     printf("XXXXX [%s] [%s]\n", c->command, file);
     if (file)
       {
         s = strrchr(file, '/');
         if (s) file = s + 1;
-        if (file[0] == '.') // XXX filter dor files or not
+        if (file[0] == '.') // XXX filter dot files or not
           {
             CMD_DONE;
           }
@@ -577,6 +577,16 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
       { // somehow we didn't get a sane filename from the back-end
         CMD_DONE;
       }
+    if (!strcmp(c->command, "dir-request"))
+      {
+        char *path2;
+
+        path2 = _sanitize_dir(path);
+        eina_stringshare_replace(&sd->config.path, path2);
+        free(path2);
+        _reset(sd);
+        CMD_DONE;
+      }
     label = cmd_key_find(c, "link-label");
     if (!label) label = cmd_key_find(c, "label");
 
diff --git a/src/efm/main.c b/src/efm/main.c
index 2d833b8..c68d154 100644
--- a/src/efm/main.c
+++ b/src/efm/main.c
@@ -6,6 +6,13 @@
 static Evas_Object *o_detail_header_box = NULL;
 static Evas_Object *o_detail_header     = NULL;
 
+static void
+_cb_parent(void *data, Evas_Object *obj EINA_UNUSED,
+           void *event_info EINA_UNUSED)
+{
+  efm_path_parent(data);
+}
+
 static void
 _cb_icons(void *data, Evas_Object *obj EINA_UNUSED,
           void *event_info EINA_UNUSED)
@@ -64,7 +71,7 @@ EAPI_MAIN int
 elm_main(int argc, char **argv)
 {
   const char  *path;
-  Evas_Object *o, *win, *sc, *efm, *bx, *bx2;
+  Evas_Object *o, *win, *sc, *efm, *bx, *bx2, *par;
   char         buf[PATH_MAX];
 
   if (argc > 1)
@@ -109,11 +116,18 @@ elm_main(int argc, char **argv)
   bx2 = o = elm_box_add(win);
   evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, 0);
   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-  elm_box_homogeneous_set(o, EINA_TRUE);
+  elm_box_homogeneous_set(o, EINA_FALSE);
   elm_box_horizontal_set(o, EINA_TRUE);
   elm_box_pack_end(bx, o);
   evas_object_show(o);
 
+  par = o = elm_button_add(win);
+  evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, 0);
+  evas_object_size_hint_weight_set(o, 0, 0);
+  elm_object_text_set(o, "<");
+  elm_box_pack_end(bx2, o);
+  evas_object_show(o);
+
   o = elm_button_add(win);
   evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, 0);
   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
@@ -142,6 +156,8 @@ elm_main(int argc, char **argv)
   efm_path_set(o, path);
   evas_object_show(o);
 
+  evas_object_smart_callback_add(par, "clicked", _cb_parent, efm);
+
   bx2 = o = elm_box_add(win);
   evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, 0);
   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to