On Wed, 22 Apr 2009 22:11:19 +0400 Sergey Semernin <[email protected]>
said:
hmmm ... not what i wanted. i wanted edje's entry used as it can actually
follow theme styles etc. etc. this uses e's entry which is old (and should now
be replaced/deprecated).
see elementary's elm_entry.c
> Hello, All.
>
> This is patch for in-place files renaming in efm2.
>
> I was guided by next reasons:
> - leave usual rename dialog, where it is more convenient;
> - using theme for entry field (all entries looks the same);
>
> For theme elements:
> e/fileman/default/icon/variable,
> e/fileman/default/icon/fixed,
> e/fileman/default/list/variable,
> e/fileman/default/list_odd/variable,
> e/fileman/default/list/fixed,
> e/fileman/default/list_odd/fixed,
> I have added entry pbject placement named "e.swallow.entry".
> It could be any entry or editing widget, I'm using e_widget_entry.
>
> In e_fm.c I have added handlers for entry object:
> _e_fm2_icon_entry_widget_add - create and focus entry field;
> _e_fm2_icon_entry_widget_del - destroy entry field and return focus to
> efm2 window; _e_fm2_icon_entry_widget_cb_key_down - key down handler for
> entry widget; _e_fm2_icon_entry_widget_accept - do file rename and destroy
> entry widget; Also in mouse and keyboard handlers of efm2 window I have added
> conditions to prevent double event processing (with entry and then rest
> objects of window).
>
> Renaming accepted when enter key pressed or other icon selected or icon
> deselected. Renaming cancelling when escape key pressed or efm2 window closed.
> Only one renaming allowed in efm2 window.
>
> data/themes/default.edc | 42 ++++++++++++
> src/bin/e_fm.c | 161 ++++++++++++++++++++++++++++++++++++
> +----------- 2 files changed, 169 insertions(+), 34 deletions(-)
>
> Index: e/data/themes/default.edc
> ===================================================================
> --- e/data/themes/default.edc (revision 40283)
> +++ e/data/themes/default.edc (working copy)
> @@ -13427,6 +13427,13 @@
> image.normal: "icon_efm_dnd_move.png";
> }
> }
> + part { name: "e.swallow.entry";
> + type: SWALLOW;
> + description { state: "default" 0.0;
> + rel1.to: "e.text.label";
> + rel2.to: "e.text.label";
> + }
> + }
> }
> programs {
> program { name: "go_active";
> @@ -13840,6 +13847,13 @@
> image.normal: "icon_efm_dnd_move.png";
> }
> }
> + part { name: "e.swallow.entry";
> + type: SWALLOW;
> + description { state: "default" 0.0;
> + rel1.to: "e.text.label";
> + rel2.to: "e.text.label";
> + }
> + }
> }
> programs {
> program { name: "go_active";
> @@ -15082,6 +15096,13 @@
> color: 0 0 0 0;
> }
> }
> + part { name: "e.swallow.entry";
> + type: SWALLOW;
> + description { state: "default" 0.0;
> + rel1.to: "e.text.label";
> + rel2.to: "e.text.label";
> + }
> + }
> }
> programs {
> program { name: "go_active";
> @@ -15547,6 +15568,13 @@
> color: 0 0 0 0;
> }
> }
> + part { name: "e.swallow.entry";
> + type: SWALLOW;
> + description { state: "default" 0.0;
> + rel1.to: "e.text.label";
> + rel2.to: "e.text.label";
> + }
> + }
> }
> programs {
> program { name: "go_active";
> @@ -16014,6 +16042,13 @@
> color: 0 0 0 0;
> }
> }
> + part { name: "e.swallow.entry";
> + type: SWALLOW;
> + description { state: "default" 0.0;
> + rel1.to: "e.text.label";
> + rel2.to: "e.text.label";
> + }
> + }
> }
> programs {
> program { name: "go_active";
> @@ -16480,6 +16515,13 @@
> color: 0 0 0 0;
> }
> }
> + part { name: "e.swallow.entry";
> + type: SWALLOW;
> + description { state: "default" 0.0;
> + rel1.to: "e.text.label";
> + rel2.to: "e.text.label";
> + }
> + }
> }
> programs {
> program { name: "go_active";
> Index: e/src/bin/e_fm.c
> ===================================================================
> --- e/src/bin/e_fm.c (revision 40283)
> +++ e/src/bin/e_fm.c (working copy)
> @@ -127,6 +127,8 @@
> int ox, oy;
> int x, y, w, h;
> } selrect;
> +
> + E_Fm2_Icon *iop_icon;
> };
>
> struct _E_Fm2_Region
> @@ -147,6 +149,7 @@
> int saved_rel;
> E_Menu *menu;
> E_Entry_Dialog *entry_dialog;
> + Evas_Object *entry_widget;
> E_Config_Dialog *prop_dialog;
> E_Dialog *dialog;
>
> @@ -324,7 +327,13 @@
> static void _e_fm2_file_rename_no_cb(void *data);
> static void _e_fm2_file_properties(void *data, E_Menu *m, E_Menu_Item *mi);
> static void _e_fm2_file_properties_delete_cb(void *obj);
> +static void _e_fm2_file_do_rename(const char *text, E_Fm2_Icon *ic);
>
> +static Evas_Object* _e_fm2_icon_entry_widget_add(E_Fm2_Icon *ic);
> +static void _e_fm2_icon_entry_widget_del(E_Fm2_Icon *ic);
> +static void _e_fm2_icon_entry_widget_cb_key_down(void *data, Evas
> *e, Evas_Object *obj, void *event_info); +static void
> _e_fm2_icon_entry_widget_accept(E_Fm2_Icon *ic); +
> static void _e_fm_retry_abort_dialog(int pid, const char *str);
> static void _e_fm_retry_abort_delete_cb(void *obj);
> static void _e_fm_retry_abort_retry_cb(void *data, E_Dialog *dialog);
> @@ -4453,6 +4462,8 @@
> e_object_del(E_OBJECT(ic->entry_dialog));
> ic->entry_dialog = NULL;
> }
> + if (ic->entry_widget)
> + _e_fm2_icon_entry_widget_del(ic);
> if (ic->prop_dialog)
> {
> e_object_del(E_OBJECT(ic->prop_dialog));
> @@ -4669,6 +4680,9 @@
> {
> const char *selectraise;
>
> + if(ic->sd->iop_icon)
> + _e_fm2_icon_entry_widget_accept(ic->sd->iop_icon);
> +
> edje_object_signal_emit(ic->obj, "e,state,selected", "e");
> edje_object_signal_emit(ic->obj_icon, "e,state,selected", "e");
> evas_object_stack_below(ic->obj, ic->sd->drop);
> @@ -4688,6 +4702,9 @@
> {
> const char *stacking, *selectraise;
>
> + if(ic->entry_widget)
> + _e_fm2_icon_entry_widget_accept(ic);
> +
> edje_object_signal_emit(ic->obj, "e,state,unselected", "e");
> edje_object_signal_emit(ic->obj_icon, "e,state,unselected", "e");
> stacking = edje_object_data_get(ic->obj, "stacking");
> @@ -6297,6 +6314,10 @@
>
> ic = data;
> ev = event_info;
> +
> + if (ic->entry_widget)
> + return;
> +
> if ((ev->button == 1) && (ev->flags & EVAS_BUTTON_DOUBLE_CLICK))
> {
> /* if its a directory && open dirs in-place is set then change the
> dir @@ -6340,6 +6361,9 @@
> ic = data;
> ev = event_info;
>
> + if (ic->entry_widget)
> + return;
> +
> if ((ev->button == 1) && (!ic->drag.dnd))
> {
> if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
> @@ -6449,6 +6473,10 @@
>
> ic = data;
> ev = event_info;
> +
> + if (ic->entry_widget)
> + return;
> +
> if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
> if ((ic->drag.start) && (ic->sd->eobj))
> {
> @@ -6656,6 +6684,9 @@
> sd = data;
> ev = event_info;
>
> + if(sd->iop_icon)
> + return;
> +
> if (evas_key_modifier_is_set(ev->modifiers, "Control"))
> {
> if (!strcmp(ev->key, "x"))
> @@ -8370,30 +8401,84 @@
> _e_fm2_file_rename(void *data, E_Menu *m, E_Menu_Item *mi)
> {
> E_Fm2_Icon *ic;
> - E_Manager *man;
> - E_Container *con;
> char text[PATH_MAX + 256];
>
> ic = data;
> - if (ic->entry_dialog) return;
> + if (ic->entry_dialog || ic->entry_widget) return;
>
> - man = e_manager_current_get();
> - if (!man) return;
> - con = e_container_current_get(man);
> - if (!con) return;
> + if (!_e_fm2_icon_entry_widget_add(ic))
> + {
> + snprintf(text, PATH_MAX + 256,
> + _("Rename %s to:"),
> + ic->info.file);
> + ic->entry_dialog = e_entry_dialog_show(_("Rename File"),
> "edit-rename",
> + text, ic->info.file, NULL, NULL,
> + _e_fm2_file_rename_yes_cb,
> + _e_fm2_file_rename_no_cb, ic);
> + E_OBJECT(ic->entry_dialog)->data = ic;
> + e_object_del_attach_func_set(E_OBJECT(ic->entry_dialog),
> _e_fm2_file_rename_delete_cb);
> + }
> +}
>
> - snprintf(text, PATH_MAX + 256,
> - _("Rename %s to:"),
> - ic->info.file);
> - ic->entry_dialog = e_entry_dialog_show(_("Rename File"), "edit-rename",
> - text, ic->info.file, NULL, NULL,
> - _e_fm2_file_rename_yes_cb,
> - _e_fm2_file_rename_no_cb, ic);
> - E_OBJECT(ic->entry_dialog)->data = ic;
> - e_object_del_attach_func_set(E_OBJECT(ic->entry_dialog),
> _e_fm2_file_rename_delete_cb); +static Evas_Object*
> +_e_fm2_icon_entry_widget_add(E_Fm2_Icon *ic)
> +{
> + Evas_Object *eo;
> +
> + if (ic->sd->iop_icon)
> + _e_fm2_icon_entry_widget_accept(ic->sd->iop_icon);
> +
> + if (!edje_object_part_exists(ic->obj, "e.swallow.entry"))
> + return NULL;
> +
> + ic->entry_widget = e_widget_entry_add(evas_object_evas_get(ic->obj),
> + NULL, NULL, NULL, NULL);
> + evas_object_event_callback_add(ic->entry_widget, EVAS_CALLBACK_KEY_DOWN,
> + _e_fm2_icon_entry_widget_cb_key_down, ic);
> + edje_object_part_swallow(ic->obj, "e.swallow.entry", ic->entry_widget);
> + evas_object_show(ic->entry_widget);
> + e_widget_entry_text_set(ic->entry_widget, ic->info.file);
> + e_widget_focus_set(ic->entry_widget, 0);
> + eo = e_widget_entry_editable_object_get(ic->entry_widget);
> + e_editable_cursor_move_to_start(eo);
> + e_editable_selection_move_to_end(eo);
> + ic->sd->iop_icon = ic;
> +
> + return ic->entry_widget;
> }
>
> static void
> +_e_fm2_icon_entry_widget_del(E_Fm2_Icon *ic)
> +{
> + ic->sd->iop_icon = NULL;
> + evas_object_focus_set(ic->sd->obj, 1);
> + evas_object_del(ic->entry_widget);
> + ic->entry_widget = NULL;
> +}
> +
> +static void
> +_e_fm2_icon_entry_widget_cb_key_down(void *data, Evas *e, Evas_Object *obj,
> void *event_info) +{
> + Evas_Event_Key_Down *ev;
> + E_Fm2_Icon *ic;
> +
> + ev = event_info;
> + ic = data;
> +
> + if (!strcmp(ev->key, "Escape"))
> + _e_fm2_icon_entry_widget_del(ic);
> + else if (!strcmp(ev->key, "Return"))
> + _e_fm2_icon_entry_widget_accept(ic);
> +}
> +
> +static void
> +_e_fm2_icon_entry_widget_accept(E_Fm2_Icon *ic)
> +{
> + _e_fm2_file_do_rename(e_widget_entry_text_get(ic->entry_widget), ic);
> + _e_fm2_icon_entry_widget_del(ic);
> +}
> +
> +static void
> _e_fm2_file_rename_delete_cb(void *obj)
> {
> E_Fm2_Icon *ic;
> @@ -8406,27 +8491,11 @@
> _e_fm2_file_rename_yes_cb(char *text, void *data)
> {
> E_Fm2_Icon *ic;
> - char oldpath[PATH_MAX];
> - char newpath[PATH_MAX];
> - char *args = NULL;
> - size_t size = 0;
> - size_t length = 0;
>
> ic = data;
> ic->entry_dialog = NULL;
> - if ((text) && (strcmp(text, ic->info.file)))
> - {
> - _e_fm2_icon_realpath(ic, oldpath, sizeof(oldpath));
> - snprintf(newpath, sizeof(newpath), "%s/%s", ic->sd->realpath, text);
> - if (e_filereg_file_protected(oldpath)) return;
>
> - args = _e_fm_string_append_quoted(args, &size, &length, oldpath);
> - args = _e_fm_string_append_char(args, &size, &length, ' ');
> - args = _e_fm_string_append_quoted(args, &size, &length, newpath);
> -
> - _e_fm_client_file_move(args, ic->sd->obj);
> - free(args);
> - }
> + _e_fm2_file_do_rename(text, ic);
> }
>
> static void
> @@ -8438,6 +8507,30 @@
> ic->entry_dialog = NULL;
> }
>
> +static void
> +_e_fm2_file_do_rename(const char *text, E_Fm2_Icon *ic)
> +{
> + char oldpath[PATH_MAX];
> + char newpath[PATH_MAX];
> + char *args = NULL;
> + size_t size = 0;
> + size_t length = 0;
> +
> + if ((text) && (strcmp(text, ic->info.file)))
> + {
> + _e_fm2_icon_realpath(ic, oldpath, sizeof(oldpath));
> + snprintf(newpath, sizeof(newpath), "%s/%s", ic->sd->realpath, text);
> + if (e_filereg_file_protected(oldpath)) return;
> +
> + args = _e_fm_string_append_quoted(args, &size, &length, oldpath);
> + args = _e_fm_string_append_char(args, &size, &length, ' ');
> + args = _e_fm_string_append_quoted(args, &size, &length, newpath);
> +
> + _e_fm_client_file_move(args, ic->sd->obj);
> + free(args);
> + }
> +}
> +
> static void _e_fm_retry_abort_dialog(int pid, const char *str)
> {
> E_Manager *man;
> @@ -8662,7 +8755,7 @@
> E_Container *con;
>
> ic = data;
> - if (ic->entry_dialog) return;
> + if (ic->entry_dialog || ic->entry_widget) return;
>
> man = e_manager_current_get();
> if (!man) return;
>
>
> Sincerely yours, Sergey.
>
> --
> Jabber/XMPP: [email protected]
> Cellular: +7-909-206-5992
>
--
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler) [email protected]
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today.
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel