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.

Reply via email to