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 01a4b01bdd2a86788ec824798f1026be4646eafd
Author: Carsten Haitzler (Rasterman) <[email protected]>
AuthorDate: Tue Feb 17 16:02:16 2026 +0000
add single click mode
---
TODO.md | 1 -
src/efm/efm.c | 18 ++++++++++++++++++
src/efm/efm.h | 2 ++
src/efm/efm_structs.h | 1 +
src/efm/efm_util.c | 51 +++++++++++++++++++++++++++++++++------------------
src/efm/main.c | 15 +++++++++++++++
6 files changed, 69 insertions(+), 19 deletions(-)
diff --git a/TODO.md b/TODO.md
index c29596e..ad20088 100644
--- a/TODO.md
+++ b/TODO.md
@@ -23,7 +23,6 @@
* Remember scroll pos, view size/pos
* Set window icon correctly for dir
* Special icons for special filenames/paths (~/Desktop, ~/Videos etc.)
-* Single click/select mode
* Favorites view move (manual .order changes, cb's for selecting single click)
* Immutable dirs (no moving files/changes - just browse/launch)
* Dir info pane
diff --git a/src/efm/efm.c b/src/efm/efm.c
index 8ee91ec..e270d37 100644
--- a/src/efm/efm.c
+++ b/src/efm/efm.c
@@ -512,6 +512,7 @@ _smart_add(Evas_Object *obj)
sd->config.detail_heading[4] = eina_stringshare_add("User");
sd->config.detail_heading[5] = eina_stringshare_add("Group");
sd->config.detail_heading[6] = eina_stringshare_add("Permissions");
+ sd->config.single_click = EINA_FALSE;
evas_object_size_hint_min_set(obj, 1, 1);
@@ -1608,6 +1609,23 @@ efm_icon_fill_get(Evas_Object *obj)
return sd->config.icon_fill;
}
+void
+efm_single_click_set(Evas_Object *obj, Eina_Bool enable)
+{
+ ENTRY;
+
+ if (sd->config.single_click == !!enable) return;
+ sd->config.single_click = !!enable;
+}
+
+Eina_Bool
+efm_single_click_get(Evas_Object *obj)
+{
+ ENTRY EINA_FALSE;
+
+ return sd->config.single_click;
+}
+
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 80e4def..e46d68e 100644
--- a/src/efm/efm.h
+++ b/src/efm/efm.h
@@ -83,6 +83,8 @@ void efm_icon_style_set(Evas_Object *obj, const char *style);
const char *efm_icon_style_get(Evas_Object *obj);
void efm_icon_fill_set(Evas_Object *obj, Eina_Bool fill);
Eina_Bool efm_icon_fill_get(Evas_Object *obj);
+void efm_single_click_set(Evas_Object *obj, Eina_Bool enable);
+Eina_Bool efm_single_click_get(Evas_Object *obj);
void efm_path_view_mode_set(Evas_Object *obj, Efm_View_Mode mode);
Efm_View_Mode efm_path_view_mode_get(Evas_Object *obj);
void efm_path_sort_mode_set(Evas_Object *obj, Efm_Sort_Mode mode);
diff --git a/src/efm/efm_structs.h b/src/efm/efm_structs.h
index 5a8d240..ef608ef 100644
--- a/src/efm/efm_structs.h
+++ b/src/efm/efm_structs.h
@@ -164,6 +164,7 @@ struct _Smart_Data
Eina_Stringshare *detail_heading[7];
Eina_Bool all_files;
Eina_Bool icon_fill;
+ Eina_Bool single_click;
} config;
};
diff --git a/src/efm/efm_util.c b/src/efm/efm_util.c
index 4953ed9..9b62365 100644
--- a/src/efm/efm_util.c
+++ b/src/efm/efm_util.c
@@ -961,6 +961,30 @@ _file_list_cmd_strbuf_append(Eina_Strbuf *strbuf, const char *key,
free(tmps);
}
+static void
+_icon_run_selected(Icon *icon)
+{
+ Eina_Strbuf *buf, *strbuf;
+
+ if ((!icon) || (!icon->sd)) return;
+
+ buf = cmd_strbuf_new("file-run");
+ if (!buf) return;
+ strbuf = eina_strbuf_new();
+ if (!strbuf)
+ {
+ eina_strbuf_free(buf);
+ return;
+ }
+
+ _icon_path_cmd_strbuf_append(buf, "over", icon->sd, icon);
+ _icon_open_with_cmd_strbuf_append(buf, "open-with", icon->sd);
+ _selected_icons_uri_strbuf_append(icon->sd, strbuf);
+ _uri_list_cmd_strbuf_append(buf, "path", eina_strbuf_string_get(strbuf));
+ cmd_strbuf_exe_consume(buf, icon->sd->exe_open);
+ eina_strbuf_free(strbuf);
+}
+
static void
_cb_icon_mouse_down(void *data, Evas *e EINA_UNUSED,
Evas_Object *obj EINA_UNUSED, void *event_info)
@@ -1004,20 +1028,8 @@ _cb_icon_mouse_down(void *data, Evas *e EINA_UNUSED,
}
else if (ev->flags == EVAS_BUTTON_DOUBLE_CLICK)
{ // double clicked
- Eina_Strbuf *buf = cmd_strbuf_new("file-run");
- Eina_Strbuf *strbuf = eina_strbuf_new();
-
printf("XXX: DBL\n");
- if (strbuf)
- {
- _icon_path_cmd_strbuf_append(buf, "over", icon->sd, icon);
- _icon_open_with_cmd_strbuf_append(buf, "open-with", icon->sd);
- _selected_icons_uri_strbuf_append(icon->sd, strbuf);
- _uri_list_cmd_strbuf_append(buf, "path",
- eina_strbuf_string_get(strbuf));
- cmd_strbuf_exe_consume(buf, icon->sd->exe_open);
- eina_strbuf_free(strbuf);
- }
+ _icon_run_selected(icon);
}
}
else if (ev->button == 3)
@@ -1297,12 +1309,14 @@ _cb_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
}
if (!dragged)
{
- Eina_Strbuf *buf = cmd_strbuf_new("file-clicked");
+ Eina_Strbuf *buf = cmd_strbuf_new("file-clicked");
+ Eina_Bool shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
+ Eina_Bool ctrl = evas_key_modifier_is_set(ev->modifiers, "Control");
printf("XXX: mouse clicked\n");
_icon_path_cmd_strbuf_append(buf, "path", icon->sd, icon);
cmd_strbuf_exe_consume(buf, icon->sd->exe_open);
- if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
+ if (shift)
{ // range select
if (!icon->selected)
{
@@ -1311,7 +1325,7 @@ _cb_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
else _icon_select(icon);
}
}
- else if (evas_key_modifier_is_set(ev->modifiers, "Control"))
+ else if (ctrl)
{ // multi-single select toggle
if (!icon->selected) _icon_select(icon);
else _icon_unselect(icon);
@@ -1322,6 +1336,8 @@ _cb_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
if (!icon->selected) _icon_select(icon);
else _icon_unselect(icon);
}
+ if ((icon->sd->config.single_click) && (!shift) && (!ctrl))
+ _icon_run_selected(icon);
}
else _icon_select_update(icon);
icon->sd->last_focused = icon;
@@ -1329,7 +1345,6 @@ _cb_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
}
else if ((ev->button == 3) && (icon->down))
{ // right mouse click
- // XXX: handle right mouse click on an icon
dx = ev->canvas.x - icon->down_x;
dy = ev->canvas.y - icon->down_y;
if (((dx * dx) + (dy * dy)) > (5 * 5)) dragged = EINA_TRUE;
@@ -3055,4 +3070,4 @@ _path_parent(const char *path)
if (p) p[1] = 0;
}
return tmps;
-}
\ No newline at end of file
+}
diff --git a/src/efm/main.c b/src/efm/main.c
index a42f8b4..4db9b64 100644
--- a/src/efm/main.c
+++ b/src/efm/main.c
@@ -149,6 +149,12 @@ _cb_sort_order(void *data, Evas_Object *obj EINA_UNUSED,
efm_path_sort_mode_set(data, mode);
}
+static void
+_cb_single_click(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ efm_single_click_set(data, elm_check_state_get(obj));
+}
+
static void
_cb_header_change(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
@@ -398,6 +404,15 @@ elm_main(int argc, char **argv)
elm_box_pack_end(bx2, o);
evas_object_show(o);
+ o = elm_check_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_object_text_set(o, "Single Click");
+ elm_check_state_set(o, efm_single_click_get(efm));
+ evas_object_smart_callback_add(o, "changed", _cb_single_click, efm);
+ elm_box_pack_end(bx2, o);
+ evas_object_show(o);
+
o = elm_check_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.