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.