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 c7642bcfc57085a10c549e7ce55310ddce6168cb
Author: Carsten Haitzler (Rasterman) <[email protected]>
AuthorDate: Sat Jan 17 17:16:47 2026 +0000
the very very very start of typebuf - using elm entry
---
src/efm/efm.c | 142 ++++++++++++++++++++++++++++++++++++++++++++++----
src/efm/efm_structs.h | 3 ++
2 files changed, 134 insertions(+), 11 deletions(-)
diff --git a/src/efm/efm.c b/src/efm/efm.c
index 4acfb52..e32255e 100644
--- a/src/efm/efm.c
+++ b/src/efm/efm.c
@@ -5,9 +5,11 @@
//
// maximum # of files in a dir that is sane: 10,000
// maximum number of files in a dir on a real system to be fast with: 3,000
+#include "Evas.h"
#include "cmd.h"
#include "efm.h"
#include "efm_icon.h"
+#include "efm_structs.h"
#include "efm_util.h"
#include "efm_dnd.h"
#include "efm_back_end.h"
@@ -37,6 +39,112 @@ _cb_header_change(void *data)
evas_object_smart_callback_call(sd->o_smart, "header_change", NULL);
}
+static void
+_typebuf_del(Smart_Data *sd)
+{
+ Evas_Object *o = sd->o_typebuf;
+
+ printf("XXX: hide typebuf\n");
+ sd->o_typebuf = NULL;
+ evas_object_del(o);
+ evas_object_focus_set(sd->o_clip, EINA_TRUE);
+}
+
+static void
+_cb_typebuf_aborted(void *data, Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ Smart_Data *sd = data;
+
+ printf("XXX: typebuf aborted\n");
+ _typebuf_del(sd);
+}
+
+static void
+_cb_typebuf_activated(void *data, Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ Smart_Data *sd = data;
+
+ printf("XXX: typebuf activated\n");
+ _typebuf_del(sd);
+}
+
+static void
+_cb_typebuf_changed(void *data, Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ Smart_Data *sd = data;
+ const char *str = elm_entry_entry_get(sd->o_typebuf);
+ char *s = elm_entry_markup_to_utf8(str);
+
+ printf("XXX: typebuf changed[%s]\n", s);
+ free(s);
+}
+
+static void
+_cb_typebuf_cursor(void *data, Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ Smart_Data *sd = data;
+ int cpos = elm_entry_cursor_pos_get(sd->o_typebuf);
+ int x, y, w, h;
+
+ if (sd->typebuf_cursor_ignore) return;
+ elm_entry_cursor_geometry_get(sd->o_typebuf, &x, &y, &w, &h);
+ printf("XXX: typebuf cursor %i @ %i,%i %ix%i\n", cpos, x, y, w, h);
+}
+
+static Eina_Bool
+_cb_typebuf_key(void *data, Evas_Object *obj EINA_UNUSED,
+ Evas_Event_Key_Down *ev)
+{
+ Smart_Data *sd = data;
+ int cpos = elm_entry_cursor_pos_get(sd->o_typebuf);
+ int cpos2;
+
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (!ev->key) return EINA_FALSE;
+ printf("INTERTCEPT %s\n", ev->key);
+ if (!strcmp(ev->key, "Tab")) return EINA_TRUE;
+ if (!strcmp(ev->key, "Up")) return EINA_TRUE;
+ if (!strcmp(ev->key, "Down")) return EINA_TRUE;
+ sd->typebuf_cursor_ignore++;
+ elm_entry_cursor_end_set(sd->o_typebuf);
+ cpos2 = elm_entry_cursor_pos_get(sd->o_typebuf);
+ elm_entry_cursor_pos_set(sd->o_typebuf, cpos);
+ sd->typebuf_cursor_ignore--;
+ if ((cpos == 0) && (!strcmp(ev->key, "Left"))) return EINA_TRUE;
+ if ((cpos == cpos2) && (!strcmp(ev->key, "Right"))) return EINA_TRUE;
+ return EINA_FALSE;
+}
+
+static void
+_typebuf_add(Smart_Data *sd, Evas_Event_Key_Down *ev)
+{
+ Evas_Object *o;
+
+ if (sd->o_typebuf) return;
+ elm_object_focus_set(sd->o_scroller, EINA_TRUE);
+ sd->o_typebuf = o = elm_entry_add(sd->o_scroller);
+ elm_grid_pack(sd->o_overlay_grid, o, 10, 40, 400, 20);
+ elm_entry_single_line_set(o, EINA_TRUE);
+ elm_entry_key_down_intercept_set(o, _cb_typebuf_key, sd);
+ elm_entry_scrollable_set(o, EINA_TRUE);
+ elm_scroller_policy_set(o, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ evas_object_move(o, 100, 100);
+ evas_object_resize(o, 200, 40);
+ elm_entry_entry_insert(o, ev->string);
+ evas_object_smart_callback_add(o, "aborted", _cb_typebuf_aborted, sd);
+ evas_object_smart_callback_add(o, "activated", _cb_typebuf_activated, sd);
+ evas_object_smart_callback_add(o, "changed,user", _cb_typebuf_changed, sd);
+ evas_object_smart_callback_add(o, "cursor,changed", _cb_typebuf_cursor, sd);
+ evas_object_show(o);
+ elm_object_focus_set(o, EINA_TRUE);
+ // handle first initial text
+ _cb_typebuf_changed(sd, o, NULL);
+}
+
static void
_cb_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info)
@@ -45,13 +153,18 @@ _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;
- handled = _efm_key_handle(sd, ev);
- // flag on hold if we use the event - otherwise pass it on
- if (handled)
+ if (!sd->o_typebuf)
{
- ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
- sd->key_control = EINA_TRUE;
+ handled = _efm_key_handle(sd, ev);
+ // flag on hold if we use the event - otherwise pass it on
+ if (handled)
+ {
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ sd->key_control = EINA_TRUE;
+ }
+ else if (ev->string) _typebuf_add(sd, ev);
}
+ else elm_object_focus_set(sd->o_typebuf, EINA_TRUE);
// XXX: if we're dnding - modify dnd action based on shift, ctrl etc.
printf("XXX: KEY: [%c] [%s]\n", handled ? '#' : ' ', ev->key);
}
@@ -63,18 +176,20 @@ _cb_refocus(void *data)
sd->refocus_job = NULL;
if (sd->rename_icon) return;
- // printf("XXX: REFOCUS\n");
+ printf("XXX: REFOCUS\n");
if (sd->focused)
{
- // printf("XXX: focus widget\n");
- evas_object_focus_set(sd->o_clip, EINA_TRUE);
+ printf("XXX: focus widget\n");
+ if (sd->o_typebuf) elm_object_focus_set(sd->o_typebuf, EINA_TRUE);
+ else evas_object_focus_set(sd->o_clip, EINA_TRUE);
if (sd->key_control) _icon_focus_show(sd);
}
else
{
- // printf("XXX: unfocused widget\n");
+ printf("XXX: unfocused widget\n");
_icon_focus_hide(sd);
- // XXX: exit rename mode if on...
+ // exit rename mode if on...
+ if (sd->rename_icon) _icon_rename_end(sd->rename_icon);
}
}
@@ -685,6 +800,11 @@ _smart_del(Evas_Object *obj)
evas_object_del(sd->o_over);
sd->o_over = NULL;
}
+ if (sd->o_typebuf)
+ {
+ evas_object_del(sd->o_typebuf);
+ sd->o_typebuf = NULL;
+ }
if (sd->o_list_detailed_dummy)
{
evas_object_del(sd->o_list_detailed_dummy);
@@ -1196,7 +1316,7 @@ _cb_scroller_focus(void *data, Evas_Object *obj EINA_UNUSED,
{
Smart_Data *sd = data;
- // printf("XXX: FOCUS\n");
+ printf("XXX: FOCUS\n");
sd->focused = EINA_TRUE;
evas_object_focus_set(sd->o_clip, EINA_TRUE);
}
diff --git a/src/efm/efm_structs.h b/src/efm/efm_structs.h
index 807b085..76eef57 100644
--- a/src/efm/efm_structs.h
+++ b/src/efm/efm_structs.h
@@ -44,6 +44,7 @@ struct _Smart_Data
Evas_Object *o_focus;
Evas_Object *o_sel;
Evas_Object *o_over;
+ Evas_Object *o_typebuf;
Evas_Object *o_detail_header;
Evas_Object *o_detail_header_item[7];
@@ -79,6 +80,8 @@ struct _Smart_Data
Icon *rename_icon;
Icon *dnd_over_icon;
+ int typebuf_cursor_ignore;
+
Evas_Coord icon_min_w, icon_min_h;
Evas_Coord list_min_w, list_min_h;
Evas_Coord list_detailed_min_w, list_detailed_min_h;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.