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 008e5b1883f474127cdee29b80c51cdf1151fc46
Author: Carsten Haitzler (Rasterman) <[email protected]>
AuthorDate: Fri Jan 16 17:53:25 2026 +0000
move key inoput handling to its own file
---
src/efm/efm.c | 294 +---------------------------------------------------
src/efm/efm_key.c | 162 +++++++++++++++++++++++++++++
src/efm/efm_key.h | 10 ++
src/efm/efm_util.c | 140 +++++++++++++++++++++++++
src/efm/efm_util.h | 2 +
src/efm/meson.build | 1 +
6 files changed, 317 insertions(+), 292 deletions(-)
diff --git a/src/efm/efm.c b/src/efm/efm.c
index e089a2c..4acfb52 100644
--- a/src/efm/efm.c
+++ b/src/efm/efm.c
@@ -13,7 +13,7 @@
#include "efm_back_end.h"
#include "efm_custom.h"
#include "efm_private.h"
-#include "esc.h"
+#include "efm_key.h"
int _log_dom = -1;
@@ -37,146 +37,6 @@ _cb_header_change(void *data)
evas_object_smart_callback_call(sd->o_smart, "header_change", NULL);
}
-static void
-_cb_lost_selection(void *data, Elm_Sel_Type selection EINA_UNUSED)
-{
- Smart_Data *sd = evas_object_smart_data_get(data);
-
- if (sd->cnp_have)
- {
- sd->cnp_have = EINA_FALSE;
- sd->cnp_cut = EINA_FALSE;
- printf("XXX: lost select\n");
- }
-}
-
-static void
-_cnp_copy_files(Smart_Data *sd)
-{
- Eina_Strbuf *strbuf;
- const char *str = NULL;
-
- strbuf = eina_strbuf_new();
- if (!strbuf) return;
- if (sd->cnp_cut) eina_strbuf_append(strbuf, "#EFM: cut\n");
- if (_selected_icons_uri_strbuf_append(sd, strbuf))
- {
- str = eina_strbuf_string_get(strbuf);
- if (str)
- {
- elm_cnp_selection_set(sd->o_scroller, ELM_SEL_TYPE_CLIPBOARD,
- ELM_SEL_FORMAT_URILIST, str, strlen(str));
- elm_cnp_selection_loss_callback_set(sd->o_scroller,
- ELM_SEL_TYPE_CLIPBOARD,
- _cb_lost_selection, sd->o_smart);
- }
- }
- if (sd->cnp_cut)
- {
- Eina_Strbuf *buf = cmd_strbuf_new("cnp-cut");
-
- if (str) printf("XXX: CUT: [%s]\n", str);
- else printf("XXX: CUT: no str\n");
- if (buf)
- {
- _uri_list_cmd_strbuf_append(buf, "path", str);
- cmd_strbuf_exe_consume(buf, sd->exe_open);
- }
- }
- else
- {
- Eina_Strbuf *buf = cmd_strbuf_new("cnp-copy");
-
- if (str) printf("XXX: COPY: [%s]\n", str);
- else printf("XXX: COPY: no str\n");
- if (buf)
- {
- _uri_list_cmd_strbuf_append(buf, "path", str);
- cmd_strbuf_exe_consume(buf, sd->exe_open);
- }
- }
- eina_strbuf_free(strbuf);
-}
-
-static Eina_Bool
-_cb_sel_get(void *data, Evas_Object *_obj EINA_UNUSED, Elm_Selection_Data *ev)
-{
- Smart_Data *sd = evas_object_smart_data_get(data);
-
- if (!sd) return EINA_TRUE;
- printf("XXX: GET SEL %i\n", ev->format);
- if (ev->format & ELM_SEL_FORMAT_URILIST)
- {
- char **plist, **p, *esc, *tmp;
-
- tmp = malloc(ev->len + 1);
- if (tmp)
- {
- Eina_Strbuf *buf = cmd_strbuf_new("cnp-paste");
-
- memcpy(tmp, ev->data, ev->len);
- tmp[ev->len] = 0;
- plist = eina_str_split(tmp, "\n", -1);
- for (p = plist; *p != NULL; p++)
- {
- if (**p)
- {
- if (!strncmp(*p, " //..//#", 8))
- {
- const char *comment = *p + 8;
- printf("XXX: PASTE COMMENT [%s]\n", comment);
- }
- else
- {
- esc = unescape(*p);
- if (!esc) continue;
- printf("XXX: PASTE FILE: [%s]\n", esc);
- }
- }
- }
- free(*plist);
- free(plist);
- switch (ev->action)
- { // reality is we will not get an action in the selection
- case ELM_XDND_ACTION_COPY:
- cmd_strbuf_append(buf, "action", "copy");
- break;
- case ELM_XDND_ACTION_MOVE:
- cmd_strbuf_append(buf, "action", "move");
- break;
- case ELM_XDND_ACTION_ASK:
- cmd_strbuf_append(buf, "action", "ask");
- break;
- case ELM_XDND_ACTION_LIST:
- cmd_strbuf_append(buf, "action", "list");
- break;
- case ELM_XDND_ACTION_LINK:
- cmd_strbuf_append(buf, "action", "link");
- break;
- case ELM_XDND_ACTION_DESCRIPTION:
- cmd_strbuf_append(buf, "action", "description");
- break;
- default:
- break;
- }
- if (buf)
- {
- _uri_list_cmd_strbuf_append(buf, "path", tmp);
- cmd_strbuf_exe_consume(buf, sd->exe_open);
- }
- free(tmp);
- }
- }
- return EINA_TRUE;
-}
-
-static void
-_cnp_paste_files(Smart_Data *sd)
-{
- elm_cnp_selection_get(sd->o_scroller, ELM_SEL_TYPE_CLIPBOARD,
- ELM_SEL_FORMAT_URILIST, _cb_sel_get, sd->o_smart);
-}
-
static void
_cb_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info)
@@ -185,157 +45,7 @@ _cb_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
Evas_Event_Key_Down *ev = event_info;
Eina_Bool handled = EINA_FALSE;
- // these keys we use/steal for navigation, so want them for sure
- if (!strcmp(ev->key, "Up")) handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_UP);
- else if (!strcmp(ev->key, "Down"))
- handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_DOWN);
- else if (!strcmp(ev->key, "Left"))
- handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_LEFT);
- else if (!strcmp(ev->key, "Right"))
- handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_RIGHT);
- else if (!strcmp(ev->key, "Prior"))
- handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_PGUP);
- else if (!strcmp(ev->key, "Next"))
- handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_PGDN);
- else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter")))
- {
- if (sd->last_focused)
- {
- Icon *icon = sd->last_focused;
- Eina_Strbuf *strbuf = eina_strbuf_new();
-
- if (!icon->selected) _icon_select(icon);
-
- if (strbuf)
- {
- if (_selected_icons_uri_strbuf_append(sd, strbuf))
- {
- Eina_Strbuf *buf = cmd_strbuf_new("file-run");
-
- _icon_open_with_cmd_strbuf_append(buf, "open-with", sd);
- _uri_list_cmd_strbuf_append(buf, "path",
- eina_strbuf_string_get(strbuf));
- cmd_strbuf_exe_consume(buf, sd->exe_open);
- }
- eina_strbuf_free(strbuf);
- }
- handled = EINA_TRUE;
- }
- }
- else if (!strcmp(ev->key, "space"))
- {
- if (sd->last_focused)
- {
- Icon *icon = sd->last_focused;
-
- if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
- { // range select
- if (!icon->selected)
- {
- if (icon->sd->last_selected)
- _select_range(icon->sd->last_selected, icon);
- else _icon_select(icon);
- }
- }
- else if (evas_key_modifier_is_set(ev->modifiers, "Control"))
- { // multi-single select toggle
- if (!icon->selected) _icon_select(icon);
- else _icon_unselect(icon);
- }
- else
- { // select just one file so unselect previous files
- _unselect_all(icon->sd);
- if (!icon->selected) _icon_select(icon);
- else _icon_unselect(icon);
- }
- handled = EINA_TRUE;
- }
- }
- else if (!strcmp(ev->key, "Escape"))
- {
- handled = _unselect_all(sd);
- }
- // XXX: hmm - should we handle this?
- // else if (!strcmp(ev->key, "Backspace"))
- // {
- // }
- else if (!strcmp(ev->key, "Delete"))
- {
- Eina_Strbuf *strbuf = eina_strbuf_new();
-
- if (strbuf)
- {
- const char *cmd = "file-trash";
-
- if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
- cmd = "file-unlink";
-
- if (_selected_icons_uri_strbuf_append(sd, strbuf))
- {
- Eina_Strbuf *buf = cmd_strbuf_new(cmd);
-
- _file_list_cmd_strbuf_append(buf, "path",
- eina_strbuf_string_get(strbuf));
- cmd_strbuf_exe_consume(buf, sd->exe_open);
- }
- eina_strbuf_free(strbuf);
- }
- handled = EINA_TRUE;
- }
- else if (!strcmp(ev->key, "Home"))
- {
- if (sd->icons)
- {
- sd->last_focused_before = sd->last_focused;
- sd->last_focused = sd->icons->data;
- _icon_focus(sd);
- handled = EINA_TRUE;
- }
- }
- else if (!strcmp(ev->key, "End"))
- {
- if (sd->icons)
- {
- sd->last_focused_before = sd->last_focused;
- sd->last_focused = eina_list_last(sd->icons)->data;
- _icon_focus(sd);
- handled = EINA_TRUE;
- }
- }
- else if ((!strcmp(ev->key, "c"))
- && (evas_key_modifier_is_set(ev->modifiers, "Control")))
- {
- sd->cnp_have = EINA_TRUE;
- sd->cnp_cut = EINA_FALSE;
- _cnp_copy_files(sd);
- handled = EINA_TRUE;
- }
- else if ((!strcmp(ev->key, "x"))
- && (evas_key_modifier_is_set(ev->modifiers, "Control")))
- {
- sd->cnp_have = EINA_TRUE;
- sd->cnp_cut = EINA_TRUE;
- _cnp_copy_files(sd);
- handled = EINA_TRUE;
- }
- else if ((!strcmp(ev->key, "v"))
- && (evas_key_modifier_is_set(ev->modifiers, "Control")))
- {
- _cnp_paste_files(sd);
- handled = EINA_TRUE;
- }
- else if ((!strcmp(ev->key, "a"))
- && (evas_key_modifier_is_set(ev->modifiers, "Control")))
- {
- _efm_sel_all(sd);
- handled = EINA_TRUE;
- }
- else if ((!strcmp(ev->key, "Insert"))
- && (evas_key_modifier_is_set(ev->modifiers, "Shift")))
- {
- _cnp_paste_files(sd);
- handled = EINA_TRUE;
- }
+ handled = _efm_key_handle(sd, ev);
// flag on hold if we use the event - otherwise pass it on
if (handled)
{
diff --git a/src/efm/efm_key.c b/src/efm/efm_key.c
new file mode 100644
index 0000000..c311c04
--- /dev/null
+++ b/src/efm/efm_key.c
@@ -0,0 +1,162 @@
+#include "cmd.h"
+#include "efm_util.h"
+#include "efm_key.h"
+
+Eina_Bool
+_efm_key_handle(Smart_Data *sd, Evas_Event_Key_Down *ev)
+{
+ Eina_Bool handled = EINA_FALSE;
+
+ // these keys we use/steal for navigation, so want them for sure
+ if (!strcmp(ev->key, "Up")) handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_UP);
+ else if (!strcmp(ev->key, "Down"))
+ handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_DOWN);
+ else if (!strcmp(ev->key, "Left"))
+ handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_LEFT);
+ else if (!strcmp(ev->key, "Right"))
+ handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_RIGHT);
+ else if (!strcmp(ev->key, "Prior"))
+ handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_PGUP);
+ else if (!strcmp(ev->key, "Next"))
+ handled = _icon_focus_dir(sd, EFM_FOCUS_DIR_PGDN);
+ else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter")))
+ {
+ if (sd->last_focused)
+ {
+ Icon *icon = sd->last_focused;
+ Eina_Strbuf *strbuf = eina_strbuf_new();
+
+ if (!icon->selected) _icon_select(icon);
+
+ if (strbuf)
+ {
+ if (_selected_icons_uri_strbuf_append(sd, strbuf))
+ {
+ Eina_Strbuf *buf = cmd_strbuf_new("file-run");
+
+ _icon_open_with_cmd_strbuf_append(buf, "open-with", sd);
+ _uri_list_cmd_strbuf_append(buf, "path",
+ eina_strbuf_string_get(strbuf));
+ cmd_strbuf_exe_consume(buf, sd->exe_open);
+ }
+ eina_strbuf_free(strbuf);
+ }
+ handled = EINA_TRUE;
+ }
+ }
+ else if (!strcmp(ev->key, "space"))
+ {
+ if (sd->last_focused)
+ {
+ Icon *icon = sd->last_focused;
+
+ if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
+ { // range select
+ if (!icon->selected)
+ {
+ if (icon->sd->last_selected)
+ _select_range(icon->sd->last_selected, icon);
+ else _icon_select(icon);
+ }
+ }
+ else if (evas_key_modifier_is_set(ev->modifiers, "Control"))
+ { // multi-single select toggle
+ if (!icon->selected) _icon_select(icon);
+ else _icon_unselect(icon);
+ }
+ else
+ { // select just one file so unselect previous files
+ _unselect_all(icon->sd);
+ if (!icon->selected) _icon_select(icon);
+ else _icon_unselect(icon);
+ }
+ handled = EINA_TRUE;
+ }
+ }
+ else if (!strcmp(ev->key, "Escape"))
+ {
+ handled = _unselect_all(sd);
+ }
+ // XXX: hmm - should we handle this?
+ // else if (!strcmp(ev->key, "Backspace"))
+ // {
+ // }
+ else if (!strcmp(ev->key, "Delete"))
+ {
+ Eina_Strbuf *strbuf = eina_strbuf_new();
+
+ if (strbuf)
+ {
+ const char *cmd = "file-trash";
+
+ if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
+ cmd = "file-unlink";
+
+ if (_selected_icons_uri_strbuf_append(sd, strbuf))
+ {
+ Eina_Strbuf *buf = cmd_strbuf_new(cmd);
+
+ _file_list_cmd_strbuf_append(buf, "path",
+ eina_strbuf_string_get(strbuf));
+ cmd_strbuf_exe_consume(buf, sd->exe_open);
+ }
+ eina_strbuf_free(strbuf);
+ }
+ handled = EINA_TRUE;
+ }
+ else if (!strcmp(ev->key, "Home"))
+ {
+ if (sd->icons)
+ {
+ sd->last_focused_before = sd->last_focused;
+ sd->last_focused = sd->icons->data;
+ _icon_focus(sd);
+ handled = EINA_TRUE;
+ }
+ }
+ else if (!strcmp(ev->key, "End"))
+ {
+ if (sd->icons)
+ {
+ sd->last_focused_before = sd->last_focused;
+ sd->last_focused = eina_list_last(sd->icons)->data;
+ _icon_focus(sd);
+ handled = EINA_TRUE;
+ }
+ }
+ else if ((!strcmp(ev->key, "c"))
+ && (evas_key_modifier_is_set(ev->modifiers, "Control")))
+ {
+ sd->cnp_have = EINA_TRUE;
+ sd->cnp_cut = EINA_FALSE;
+ _cnp_copy_files(sd);
+ handled = EINA_TRUE;
+ }
+ else if ((!strcmp(ev->key, "x"))
+ && (evas_key_modifier_is_set(ev->modifiers, "Control")))
+ {
+ sd->cnp_have = EINA_TRUE;
+ sd->cnp_cut = EINA_TRUE;
+ _cnp_copy_files(sd);
+ handled = EINA_TRUE;
+ }
+ else if ((!strcmp(ev->key, "v"))
+ && (evas_key_modifier_is_set(ev->modifiers, "Control")))
+ {
+ _cnp_paste_files(sd);
+ handled = EINA_TRUE;
+ }
+ else if ((!strcmp(ev->key, "a"))
+ && (evas_key_modifier_is_set(ev->modifiers, "Control")))
+ {
+ _efm_sel_all(sd);
+ handled = EINA_TRUE;
+ }
+ else if ((!strcmp(ev->key, "Insert"))
+ && (evas_key_modifier_is_set(ev->modifiers, "Shift")))
+ {
+ _cnp_paste_files(sd);
+ handled = EINA_TRUE;
+ }
+ return handled;
+}
\ No newline at end of file
diff --git a/src/efm/efm_key.h b/src/efm/efm_key.h
new file mode 100644
index 0000000..b214c31
--- /dev/null
+++ b/src/efm/efm_key.h
@@ -0,0 +1,10 @@
+#ifndef EFM_KEY_H
+#define EFM_KEY_H 1
+
+#include <Elementary.h>
+
+#include "efm_structs.h"
+
+Eina_Bool _efm_key_handle(Smart_Data *sd, Evas_Event_Key_Down *ev);
+
+#endif
\ No newline at end of file
diff --git a/src/efm/efm_util.c b/src/efm/efm_util.c
index 56e5e44..c1783a2 100644
--- a/src/efm/efm_util.c
+++ b/src/efm/efm_util.c
@@ -11,6 +11,146 @@
#include "mimeapps.h"
// util funcs for the efm view
+static void
+_cb_lost_selection(void *data, Elm_Sel_Type selection EINA_UNUSED)
+{
+ Smart_Data *sd = evas_object_smart_data_get(data);
+
+ if (sd->cnp_have)
+ {
+ sd->cnp_have = EINA_FALSE;
+ sd->cnp_cut = EINA_FALSE;
+ printf("XXX: lost select\n");
+ }
+}
+
+static Eina_Bool
+_cb_sel_get(void *data, Evas_Object *_obj EINA_UNUSED, Elm_Selection_Data *ev)
+{
+ Smart_Data *sd = evas_object_smart_data_get(data);
+
+ if (!sd) return EINA_TRUE;
+ printf("XXX: GET SEL %i\n", ev->format);
+ if (ev->format & ELM_SEL_FORMAT_URILIST)
+ {
+ char **plist, **p, *esc, *tmp;
+
+ tmp = malloc(ev->len + 1);
+ if (tmp)
+ {
+ Eina_Strbuf *buf = cmd_strbuf_new("cnp-paste");
+
+ memcpy(tmp, ev->data, ev->len);
+ tmp[ev->len] = 0;
+ plist = eina_str_split(tmp, "\n", -1);
+ for (p = plist; *p != NULL; p++)
+ {
+ if (**p)
+ {
+ if (!strncmp(*p, " //..//#", 8))
+ {
+ const char *comment = *p + 8;
+ printf("XXX: PASTE COMMENT [%s]\n", comment);
+ }
+ else
+ {
+ esc = unescape(*p);
+ if (!esc) continue;
+ printf("XXX: PASTE FILE: [%s]\n", esc);
+ }
+ }
+ }
+ free(*plist);
+ free(plist);
+ switch (ev->action)
+ { // reality is we will not get an action in the selection
+ case ELM_XDND_ACTION_COPY:
+ cmd_strbuf_append(buf, "action", "copy");
+ break;
+ case ELM_XDND_ACTION_MOVE:
+ cmd_strbuf_append(buf, "action", "move");
+ break;
+ case ELM_XDND_ACTION_ASK:
+ cmd_strbuf_append(buf, "action", "ask");
+ break;
+ case ELM_XDND_ACTION_LIST:
+ cmd_strbuf_append(buf, "action", "list");
+ break;
+ case ELM_XDND_ACTION_LINK:
+ cmd_strbuf_append(buf, "action", "link");
+ break;
+ case ELM_XDND_ACTION_DESCRIPTION:
+ cmd_strbuf_append(buf, "action", "description");
+ break;
+ default:
+ break;
+ }
+ if (buf)
+ {
+ _uri_list_cmd_strbuf_append(buf, "path", tmp);
+ cmd_strbuf_exe_consume(buf, sd->exe_open);
+ }
+ free(tmp);
+ }
+ }
+ return EINA_TRUE;
+}
+
+void
+_cnp_copy_files(Smart_Data *sd)
+{
+ Eina_Strbuf *strbuf;
+ const char *str = NULL;
+
+ strbuf = eina_strbuf_new();
+ if (!strbuf) return;
+ if (sd->cnp_cut) eina_strbuf_append(strbuf, "#EFM: cut\n");
+ if (_selected_icons_uri_strbuf_append(sd, strbuf))
+ {
+ str = eina_strbuf_string_get(strbuf);
+ if (str)
+ {
+ elm_cnp_selection_set(sd->o_scroller, ELM_SEL_TYPE_CLIPBOARD,
+ ELM_SEL_FORMAT_URILIST, str, strlen(str));
+ elm_cnp_selection_loss_callback_set(sd->o_scroller,
+ ELM_SEL_TYPE_CLIPBOARD,
+ _cb_lost_selection, sd->o_smart);
+ }
+ }
+ if (sd->cnp_cut)
+ {
+ Eina_Strbuf *buf = cmd_strbuf_new("cnp-cut");
+
+ if (str) printf("XXX: CUT: [%s]\n", str);
+ else printf("XXX: CUT: no str\n");
+ if (buf)
+ {
+ _uri_list_cmd_strbuf_append(buf, "path", str);
+ cmd_strbuf_exe_consume(buf, sd->exe_open);
+ }
+ }
+ else
+ {
+ Eina_Strbuf *buf = cmd_strbuf_new("cnp-copy");
+
+ if (str) printf("XXX: COPY: [%s]\n", str);
+ else printf("XXX: COPY: no str\n");
+ if (buf)
+ {
+ _uri_list_cmd_strbuf_append(buf, "path", str);
+ cmd_strbuf_exe_consume(buf, sd->exe_open);
+ }
+ }
+ eina_strbuf_free(strbuf);
+}
+
+void
+_cnp_paste_files(Smart_Data *sd)
+{
+ elm_cnp_selection_get(sd->o_scroller, ELM_SEL_TYPE_CLIPBOARD,
+ ELM_SEL_FORMAT_URILIST, _cb_sel_get, sd->o_smart);
+}
+
double
_scale_get(Smart_Data *sd)
{
diff --git a/src/efm/efm_util.h b/src/efm/efm_util.h
index 247c9e2..0298fe4 100644
--- a/src/efm/efm_util.h
+++ b/src/efm/efm_util.h
@@ -17,6 +17,8 @@ typedef enum
Eina_Bool _selected_icons_uri_strbuf_append(Smart_Data *sd, Eina_Strbuf *strbuf);
void _detail_realized_items_resize(Smart_Data *sd);
+void _cnp_copy_files(Smart_Data *sd);
+void _cnp_paste_files(Smart_Data *sd);
double _scale_get(Smart_Data *sd);
Eina_List *_icons_path_find(const char *path);
Eina_Bool _icon_focus_dir(Smart_Data *sd, Efm_Focus_Dir dir);
diff --git a/src/efm/meson.build b/src/efm/meson.build
index 0bd7d95..1807477 100644
--- a/src/efm/meson.build
+++ b/src/efm/meson.build
@@ -19,6 +19,7 @@ executable('efm', [
'efm_custom.c',
'efm_menu.c',
'efm_popup_menu.c',
+ 'efm_key.c',
'main.c'
],
include_directories: inc,
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.