I started making the open-with menu. Should I make the items with
toggles and the last chosen app is then used for the normal open-item?
I changed the code for key selection with control set. It now gets less
messed up when selecting back and forth, but its not perfect. I thought
about making a direct lookup for icons by coordinates, as it could make
the selection-logic more simple.
To me the naming-scheme for icons and files seems a bit inconsistent.
The List of E_Fm_Icon is called sd->files and then it includes a file-
and an icon-object, sometimes its reffered to as selection.current.file
and more often as icon. Is it grown or planned like that? If this is not
planned, I would like to rename it to E_Fm_Item and sd->items and all
function that work on E_Fm_Item and not on E_Fm_File or e_fileman_icon“s
smartdata. I can wait with that, but it would have been much easier for
me to understand the code.
regards,
jeff
Index: e_fileman_file.c
===================================================================
RCS file: /root/e17/apps/e/src/bin/e_fileman_file.c,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 e_fileman_file.c
12,17c12
< typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
< struct _E_Fm_Assoc_App
< {
< char *mime;
< char *app;
< };
---
>
49a45
> char *ext;
80c76
< if (S_ISDIR(file->mode))
---
> if (S_ISDIR(file->mode)){
81a78,79
> file->mime = "directory";
> }
98a97,106
> if(!file->mime)
> {
> ext = strrchr(file->name, '.');
> if (ext)
> {
> file->mime = ext;
> }
> else
> file->mime = "unknown";
> }
330a339,340
>
>
420a431,454
> int e_fm_file_exec_with(E_Fm_File *file, char* exec_with)
> {
> Ecore_Exe *exe;
> char app[PATH_MAX * 2];
> if (!exec_with || !file) return 0;
>
> snprintf(app, PATH_MAX * 2, "%s \"%s\"", exec_with, file->path);
> exe = ecore_exe_run(app, NULL);
>
> if (!exe)
> {
> e_error_dialog_show(_("Run Error"),
> _("3 Enlightenment was unable fork a child process:\n"
> "\n"
> "%s\n"
> "\n"),
> app);
> return 0;
> }
> }
>
>
>
>
428a463
> ///??? if (file->mime) free(file->mime);
431a467
>
Index: e_fileman_file.h
===================================================================
RCS file: /root/e17/apps/e/src/bin/e_fileman_file.h,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 e_fileman_file.h
39a40
> char *mime; /* mimetype (just the extension) */
68a70
> EAPI int e_fm_file_exec_with (E_Fm_File *file, char* exec_with);
Index: e_fileman_smart.c
===================================================================
RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.c,v
retrieving revision 1.1.1.41
diff -r1.1.1.41 e_fileman_smart.c
90c90
<
---
> typedef enum _E_Fm_State E_Fm_State;
94c94,95
< int height;
---
> int height;
> Evas_List *apps;
142a144,151
> enum _E_Fm_State
> {
> E_FILEMAN_STATE_IDLE = 0,
> E_FILEMAN_STATE_TYPEBUFFER = 1,
> E_FILEMAN_STATE_RENAME = 2,
> };
>
>
163a173,174
> Evas_Hash *mime_menu_hash;
>
176c187,189
<
---
>
> E_Fm_State state;
> // E_Fm_Icon *active_file;
252a266,267
> static void _e_fm_file_rename_start(E_Fm_Icon *icon);
> static void _e_fm_file_rename_abort(E_Fm_Icon *icon);
314c329
<
---
> static int _e_fm_init_assoc(E_Fm_Smart_Data *sd);
379a395
>
614a631,683
>
>
> int
> _e_fm_init_assoc(E_Fm_Smart_Data *sd)
> {
> E_Fm_Assoc_App *assoc;
>
> assoc = E_NEW(E_Fm_Assoc_App, 1);
> assoc->mime = (char*)E_NEW(char *, 5);
> snprintf(assoc->mime, 5, "%s", ".jpg");
> assoc->app = (char*)E_NEW(char *, 7);
> snprintf(assoc->app, 5, "gimp");
> sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
>
> assoc = E_NEW(E_Fm_Assoc_App, 1);
> assoc->mime = (char*)E_NEW(char *, 5);
> snprintf(assoc->mime, 5, "%s", ".jpg");
> assoc->app = (char*)E_NEW(char *, 7);
> snprintf(assoc->app, 8, "exhibit");
> sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
>
> assoc = E_NEW(E_Fm_Assoc_App, 1);
> assoc->mime = (char*)E_NEW(char *, 5);
> snprintf(assoc->mime, 5, "%s", ".png");
> assoc->app = (char*)E_NEW(char *, 7);
> snprintf(assoc->app, 5, "gimp");
> sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
>
> assoc = E_NEW(E_Fm_Assoc_App, 1);
> assoc->mime = (char*)E_NEW(char *, 5);
> snprintf(assoc->mime, 5, "%s", ".png");
> assoc->app = (char*)E_NEW(char *, 7);
> snprintf(assoc->app, 8, "exhibit");
> sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
>
> assoc = E_NEW(E_Fm_Assoc_App, 1);
> assoc->mime = (char*)E_NEW(char *, 5);
> snprintf(assoc->mime, 5, "%s", ".pdf");
> assoc->app = (char*)E_NEW(char *, 7);
> snprintf(assoc->app, 7, "evince");
> sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
>
> assoc = E_NEW(E_Fm_Assoc_App, 1);
> assoc->mime = (char*)E_NEW(char *, 5);
> snprintf(assoc->mime, 5, "%s", ".mp3");
> assoc->app = (char*)E_NEW(char *, 7);
> snprintf(assoc->app, 8, "xmms -Q");
> sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
>
> return 1;
> }
>
>
728a798,799
> _e_fm_init_assoc(sd);
> sd->state = E_FILEMAN_STATE_IDLE;
774a846
> evas_hash_free(sd->mime_menu_hash);
913,914c985,990
< _e_fm_file_rename(E_Fm_Icon *icon, const char* name)
< {
---
> _e_fm_file_rename(E_Fm_Icon *icon, const char* name) // could be better called _e_fm_file_rename_apply
> {
> e_fm_icon_edit_entry_set(icon->icon_obj, NULL);
> evas_object_focus_set(icon->sd->entry_obj, 0);
> evas_object_del(icon->sd->entry_obj);
> icon->sd->entry_obj = NULL;
919,921c995,1013
< {
< e_fm_icon_title_set(icon->icon_obj, name);
< }
---
> {
> e_fm_icon_title_set(icon->icon_obj, name);
> }
> evas_object_focus_set(icon->sd->object, 1);
> icon->sd->state = E_FILEMAN_STATE_IDLE;
>
> }
>
> static void
> _e_fm_file_rename_abort(E_Fm_Icon *icon)
> {
> e_fm_icon_edit_entry_set(icon->icon_obj, NULL);
> evas_object_focus_set(icon->sd->entry_obj, 0);
> evas_object_del(icon->sd->entry_obj);
> icon->sd->entry_obj = NULL;
> e_fm_icon_title_set(icon->icon_obj, icon->file->name);
> evas_object_focus_set(icon->sd->object, 1);
> icon->sd->state = E_FILEMAN_STATE_IDLE;
>
954c1046,1048
<
---
> char *exe;
> E_Fm_Assoc_App *assoc;
> Evas_List *l;
955a1050,1059
>
> for (l = icon->sd->conf.main->apps; l; l = l->next)
> {
> assoc = l->data;
> if(!strcmp(assoc->app,mi->label)){
> e_fm_file_exec_with(icon->file, assoc->app);
> return;
> }
>
> }
999a1104,1105
> _e_fm_file_rename_start(icon);
> }
1000a1107,1110
> static void
> _e_fm_file_rename_start(E_Fm_Icon *icon)
> {
> icon->sd->state = E_FILEMAN_STATE_RENAME;
1009,1011c1119,1121
< e_fm_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,
< _e_fm_win_mouse_up_cb, icon);
< e_grabinput_get(icon->sd->win->evas_win, 1, icon->sd->win->evas_win);
---
> // e_fm_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,
> // _e_fm_win_mouse_up_cb, icon);
> //e_grabinput_get(icon->sd->win->evas_win, 1, icon->sd->win->evas_win);
1013a1124
>
1015c1126,1127
< e_fm_grab_time = ecore_time_get();
---
>
> // e_fm_grab_time = ecore_time_get();
1741c1853
< sd->files = evas_list_prepend(sd->files, icon);
---
> sd->files = evas_list_append(sd->files, icon);
1923c2035,2041
<
---
>
> if(sd->state == E_FILEMAN_STATE_RENAME)
> {
> _e_fm_file_rename_abort(sd->selection.current.file);
> return;
> }
>
2149a2268
>
2155a2275,2280
> if(icon->sd->state == E_FILEMAN_STATE_RENAME)
> {
> _e_fm_file_rename_abort(icon->sd->selection.current.file);
> return;
> }
>
2238,2240c2363,2365
< E_Menu *mn;
< E_Menu_Item *mi;
< int x, y, w, h;
---
> //E_Menu *mn;
> //E_Menu_Item *mi;
> //int x, y, w, h;
2245c2370,2429
< mn = e_menu_new();
---
>
> E_Menu *mn,*mo;
> E_Menu_Item *mi, *mio;
> int x, y, w, h;
>
> Evas_List *l;
> E_Fm_Assoc_App *assoc;
>
> mn = e_menu_new();
>
>
> mi = NULL;
> if((mo = evas_hash_find(icon->sd->mime_menu_hash,icon->file->mime)) == NULL)
> { /*- Arrange -*/
> mo = e_menu_new();
>
>
> for (l = icon->sd->conf.main->apps; l; l = l->next)
> {
> assoc = l->data;
> if (strcmp(icon->file->mime, assoc->mime) == 0)
> {
>
> mi = e_menu_item_new(mo);
> e_menu_item_label_set(mi, _(assoc->app));
> e_menu_item_radio_set(mi, 1);
> e_menu_item_radio_group_set(mi, 2);
>
> //if (!((assoc->app->icon_class) &&
> // (e_util_menu_item_edje_icon_list_set(mi, assoc->app->icon_class))))
> // e_menu_item_icon_edje_set(mi, assoc->app->path, "item");
>
> e_menu_item_callback_set(mi, _e_fm_file_menu_open, icon);
> }
> assoc = NULL;
> }
> if(mi)
> {
> icon->sd->mime_menu_hash = evas_hash_add(icon->sd->mime_menu_hash,strdup(icon->file->mime), mo);
> mi = e_menu_item_new(mn);
> e_menu_item_submenu_set(mi, mo);
> e_menu_item_label_set(mi, _("Open with"));
> e_menu_item_icon_edje_set(mi,
> (char *)e_theme_edje_file_get("base/theme/fileman",
> "fileman/button/open"),
> "fileman/button/open");
> }
> }
> else
> {
> mi = e_menu_item_new(mn);
> e_menu_item_label_set(mi, _("Open with"));
> e_menu_item_icon_edje_set(mi,
> (char *)e_theme_edje_file_get("base/theme/fileman",
> "fileman/button/open"),
> "fileman/button/open");
> e_menu_item_submenu_set(mi, mo);
> }
>
>
2642a2827,2831
>
>
>
>
>
2646,2649c2835
< Evas_List *l;
<
< if(sd->selection.current.ptr)
< {
---
> Evas_List *l;
2651d2836
< Evas_Coord x, y, x2, y2;
2653,2664c2838,2861
< l = sd->selection.current.ptr;
< icon = l->data;
< evas_object_geometry_get(icon->icon_obj, &x, &y, NULL, NULL);
< x2 = x + 1;
< l = l->prev;
< while(l && x != x2)
< {
< icon = l->data;
< evas_object_geometry_get(icon->icon_obj, &x2, &y2, NULL, NULL);
< if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< {
< if(icon->state.selected)
---
> if(!sd->selection.current.ptr)
> _e_fm_selections_add(sd->files->data, sd->files);
> else
> {
> if(sd->selection.current.ptr->prev) /* are we already at the beginning? */
> {
> Evas_Coord x, x2, y, w, h;
>
> l = sd->selection.current.ptr;
> icon = l->data;
> evas_object_geometry_get(icon->icon_obj, &x, NULL, NULL, NULL);
> x2 = x + 1;
> l = l->prev;
>
> if (!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
> {
> for(; l && (x != x2); l = l->prev)
> {
> icon = l->data;
> evas_object_geometry_get(icon->icon_obj, &x2, NULL, NULL, NULL);
>
> }
> _e_fm_selections_clear(sd);
> if(!l)
2666,2667c2863,2864
< _e_fm_selections_del(l->data);
< _e_fm_selections_current_set(l->data, l);
---
> l = sd->files; // go to the beginning
> _e_fm_selections_add(l->data, l);
2669,2711c2866,2917
< else
< _e_fm_selections_add(l->data, l);
< }
< l = l->prev;
< }
< if(l && !evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< {
< if(l->next) l = l->next;
< if(!l) return;
< _e_fm_selections_clear(sd);
< _e_fm_selections_add(l->data, l);
< }
< else if(!l)
< {
< if(!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< _e_fm_selections_clear(sd);
< _e_fm_selections_add(sd->files->data, sd->files);
< }
< if(l)
< {
< E_Fm_Icon *icon;
< Evas_Coord x, y, w, h;
< icon = l->data;
< evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
< if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
< {
< E_Event_Fm_Reconfigure *ev;
<
< ev = E_NEW(E_Event_Fm_Reconfigure, 1);
< if (ev)
< {
< ev->object = sd->object;
< ev->x = sd->x;
< ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
< ev->w = sd->w;
< ev->h = sd->h;
< ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
< }
< }
< }
< }
< else
< _e_fm_selections_add(sd->files->data, sd->files);
---
> else
> _e_fm_selections_add(l->next->data, l->next);
> }
> else /* Control modifier set */
> {
> int flag = 0;
> icon = l->data;
> if(flag = icon->state.selected)
> {
> if(l->next->next)
> icon = l->next->next->data;
> else
> icon = l->next->data;
>
> evas_object_geometry_get(icon->icon_obj, &x, NULL, NULL, NULL);
> _e_fm_selections_del(sd->selection.current.ptr->data);
> x2 = x + 1;
> }
> for(; l && (x != x2); l = l->prev)
> {
> icon = l->data;
> evas_object_geometry_get(icon->icon_obj, &x2, NULL, NULL, NULL);
>
> if(icon->state.selected)
> {
> _e_fm_selections_del(l->data);
> _e_fm_selections_current_set(l->data, l);
> }
> else
> _e_fm_selections_add(l->data, l);
> }
> if(flag && l)
> _e_fm_selections_current_set(l->data, l);
> }
> evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
> if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
> {
> E_Event_Fm_Reconfigure *ev;
>
> ev = E_NEW(E_Event_Fm_Reconfigure, 1);
> if (ev)
> {
> ev->object = sd->object;
> ev->x = sd->x;
> ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
> ev->w = sd->w;
> ev->h = sd->h;
> ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
> }
> }
> }
> }
2713a2920
>
2717,2735c2924,2949
< Evas_List *l;
<
< if(sd->selection.current.ptr)
< {
< E_Fm_Icon *icon;
< Evas_Coord x, y, x2, y2;
<
< l = sd->selection.current.ptr;
< icon = l->data;
< evas_object_geometry_get(icon->icon_obj, &x, &y, NULL, NULL);
< x2 = x + 1;
< l = l->next;
< while(l && x != x2)
< {
< icon = l->data;
< evas_object_geometry_get(icon->icon_obj, &x2, &y2, NULL, NULL);
< if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< {
< if(icon->state.selected)
---
> Evas_List *l, *l2;
>
> if(!sd->selection.current.ptr)
> _e_fm_selections_add(sd->files->data, sd->files);
> else
> {
> if(sd->selection.current.ptr->next) /* are we already at the end? */
> {
>
> E_Fm_Icon *icon;
> Evas_Coord x, x2, y, w, h;;
> l = sd->selection.current.ptr;
> icon = l->data;
> evas_object_geometry_get(icon->icon_obj, &x, NULL, NULL, NULL);
> x2 = x + 1;
> l = l->next;
>
> if (!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
> {
> for(; l && (x != x2); l = l->next)
> {
> icon = l->data;
> evas_object_geometry_get(icon->icon_obj, &x2, NULL, NULL, NULL);
> }
> _e_fm_selections_clear(sd);
> if(!l)
2737,2738c2951,2952
< _e_fm_selections_del(l->data);
< _e_fm_selections_current_set(l->data, l);
---
> l = evas_list_last(sd->files);
> _e_fm_selections_add(l->data, l);
2740,2782c2954,3006
< else
< _e_fm_selections_add(l->data, l);
< }
< l = l->next;
< }
< if(l && !evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< {
< if(l->prev) l = l->prev;
< if(!l) return;
< _e_fm_selections_clear(sd);
< _e_fm_selections_add(l->data, l);
< }
< else if(!l)
< {
< if(!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< _e_fm_selections_clear(sd);
< _e_fm_selections_add((evas_list_last(sd->files))->data, evas_list_last(sd->files));
< }
< if(l)
< {
< E_Fm_Icon *icon;
< Evas_Coord x, y, w, h;
<
< icon = l->data;
< evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
< if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
< {
< E_Event_Fm_Reconfigure *ev;
< ev = E_NEW(E_Event_Fm_Reconfigure, 1);
< if (ev)
< {
< ev->object = sd->object;
< ev->x = sd->x;
< ev->y = sd->child.y + y + h + sd->icon_info.y_space - (sd->y + sd->h);
< ev->w = sd->w;
< ev->h = sd->h;
< ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
< }
< }
< }
< }
< else
< _e_fm_selections_add(sd->files->data, sd->files);
---
> else
> _e_fm_selections_add(l->prev->data, l->prev);
> }
> else /* Control modifier set */
> {
> int flag = 0;
> icon = l->data;
> if(flag = icon->state.selected)
> {
> if(l->prev->prev)
> icon = l->prev->prev->data;
> else
> icon = l->prev->data; // This case
>
> evas_object_geometry_get(icon->icon_obj, &x, NULL, NULL, NULL);
> _e_fm_selections_del(sd->selection.current.ptr->data);
> x2 = x + 1;
> }
> for(; l && (x != x2); l = l->next)
> {
> icon = l->data;
> evas_object_geometry_get(icon->icon_obj, &x2, NULL, NULL, NULL);
>
> if(icon->state.selected)
> {
> _e_fm_selections_del(l->data);
> _e_fm_selections_current_set(l->data, l);
> }
> else
> _e_fm_selections_add(l->data, l);
> }
> if(flag && l)
> _e_fm_selections_current_set(l->data, l);
>
> }
> evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
> if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
> {
> E_Event_Fm_Reconfigure *ev;
>
> ev = E_NEW(E_Event_Fm_Reconfigure, 1);
> if (ev)
> {
> ev->object = sd->object;
> ev->x = sd->x;
> ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
> ev->w = sd->w;
> ev->h = sd->h;
> ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
> }
> }
> }
> }
2787,2792c3011,3016
< {
< Evas_List *prev;
<
< if(sd->selection.current.ptr)
< {
< if(sd->selection.current.ptr->prev)
---
> {
> if(!sd->selection.current.ptr)
> _e_fm_selections_add(sd->files->data, sd->files);
> else
> {
> if(sd->selection.current.ptr->prev)
2794,2797c3018,3020
< prev = sd->selection.current.ptr->prev;
< if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< {
< E_Fm_Icon *icon;
---
> Evas_List *prev;
> E_Fm_Icon *icon, *icon_prev;
> Evas_Coord x, y, w, h;
2799,2800c3022,3028
< icon = prev->data;
< if(icon->state.selected)
---
> icon = sd->selection.current.ptr->data;
> prev = sd->selection.current.ptr->prev;
> icon_prev = prev->data;
>
> if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
> {
> if(icon_prev->state.selected)
2802,2803c3030,3039
< _e_fm_selections_del(prev->data);
< _e_fm_selections_current_set(prev->data, prev);
---
> if(icon->state.selected)
> {
> _e_fm_selections_del(icon);
> _e_fm_selections_current_set(icon_prev, prev);
> }
> else
> {
> _e_fm_selections_del(icon_prev);
> _e_fm_selections_current_set(icon_prev, prev);
> }
2805,2817c3041,3050
< else
< _e_fm_selections_add(prev->data, prev);
< }
< else
< {
< _e_fm_selections_clear(sd);
< _e_fm_selections_add(prev->data, prev);
< }
< {
< E_Fm_Icon *icon;
< Evas_Coord x, y, w, h;
< icon = prev->data;
< evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
---
> else
> _e_fm_selections_add(icon_prev, prev);
> }
> else
> {
> _e_fm_selections_clear(sd);
> _e_fm_selections_add(icon_prev, prev);
> }
>
> evas_object_geometry_get(icon_prev->icon_obj, &x, &y, &w, &h);
2819,2824c3052,3056
< {
< E_Event_Fm_Reconfigure *ev;
<
< ev = E_NEW(E_Event_Fm_Reconfigure, 1);
< if (ev)
< {
---
> {
> E_Event_Fm_Reconfigure *ev;
> ev = E_NEW(E_Event_Fm_Reconfigure, 1);
> if (ev)
> {
2831,2833c3063,3064
< }
< }
< }
---
> }
> }
2835,2837c3066
< }
< else
< _e_fm_selections_add(sd->files->data, sd->files);
---
> }
2843,2847c3072,3076
< Evas_List *next;
<
< if (sd->selection.current.ptr)
< {
< if (sd->selection.current.ptr->next)
---
> if(!sd->selection.current.ptr)
> _e_fm_selections_add(sd->files->data, sd->files);
> else
> {
> if (sd->selection.current.ptr->next)
2849,2855c3078,3089
< next = sd->selection.current.ptr->next;
< if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
< {
< E_Fm_Icon *icon;
<
< icon = next->data;
< if (icon->state.selected)
---
> Evas_List *next;
> E_Fm_Icon *icon, *icon_next;
> Evas_Coord x, y, w, h;
>
> icon = sd->selection.current.ptr->data;
>
> next = sd->selection.current.ptr->next;
> icon_next = next->data;
>
> if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
> {
> if (icon_next->state.selected)
2857,2872c3091,3111
< _e_fm_selections_del(next->data);
< _e_fm_selections_current_set(next->data, next);
< }
< else
< _e_fm_selections_add(next->data, next);
< }
< else
< {
< _e_fm_selections_clear(sd);
< _e_fm_selections_add(next->data, next);
< }
< {
< E_Fm_Icon *icon;
< Evas_Coord x, y, w, h;
< icon = next->data;
< evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
---
> if(icon->state.selected)
> {
> _e_fm_selections_del(icon);
> _e_fm_selections_current_set(icon_next, next);
> }
> else
> {
> _e_fm_selections_del(icon_next);
> _e_fm_selections_current_set(icon_next, next);
> }
> }
> else
> _e_fm_selections_add(icon_next, next);
> }
> else
> {
> _e_fm_selections_clear(sd);
> _e_fm_selections_add(icon_next, next);
> }
>
> evas_object_geometry_get(icon_next->icon_obj, &x, &y, &w, &h);
2874,2875c3113,3114
< {
< E_Event_Fm_Reconfigure *ev;
---
> {
> E_Event_Fm_Reconfigure *ev;
2877,2879c3116,3118
< ev = E_NEW(E_Event_Fm_Reconfigure, 1);
< if (ev)
< {
---
> ev = E_NEW(E_Event_Fm_Reconfigure, 1);
> if (ev)
> {
2886,2888c3125,3126
< }
< }
< }
---
> }
> }
2890,2892c3128
< }
< else
< _e_fm_selections_add(sd->files->data, sd->files);
---
> }
2894a3131,3132
>
>
2941,2944c3179,3182
< Evas_Event_Key_Down *ev;
< E_Fm_Smart_Data *sd;
< Evas_List *l;
< E_Fm_Icon *icon;
---
> Evas_Event_Key_Down *ev;
> E_Fm_Smart_Data *sd;
> Evas_List *l;
> E_Fm_Icon *icon;
2946,3052c3184,3189
< ev = event_info;
< sd = data;
<
< if (!strcmp(ev->keyname, "Tab"))
< {
< if(strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {
<
< _e_fm_autocomplete(sd);
< }
< }
< if (!strcmp(ev->keyname, "Up"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {
< edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
< edje_object_part_text_set(sd->edje_obj, "text", "");
< for (l = sd->files; l; l = l->next)
< {
< icon = l->data;
< e_fm_icon_signal_emit(icon->icon_obj, "default", "");
< }
< edje_object_signal_emit(sd->edje_obj, "default", "");
< }
< else
< _e_fm_icon_select_up(sd);
< }
< else if (!strcmp(ev->keyname, "Down"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {
< edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
< edje_object_part_text_set(sd->edje_obj, "text", "");
< for (l = sd->files; l; l = l->next)
< {
< icon = l->data;
< e_fm_icon_signal_emit(icon->icon_obj, "default", "");
< }
< edje_object_signal_emit(sd->edje_obj, "default", "");
< }
< else
< _e_fm_icon_select_down(sd);
< }
< else if (!strcmp(ev->keyname, "Left"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {}
< else
< _e_fm_icon_select_left(sd);
< }
< else if (!strcmp(ev->keyname, "Right"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {}
< else
< _e_fm_icon_select_right(sd);
< }
< else if (!strcmp(ev->keyname, "Escape"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {
< edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
< edje_object_part_text_set(sd->edje_obj, "text", "");
< for (l = sd->files; l; l = l->next)
< {
< icon = l->data;
< e_fm_icon_signal_emit(icon->icon_obj, "default", "");
< }
< edje_object_signal_emit(sd->edje_obj, "default", "");
< }
< }
< else if (!strcmp(ev->keyname, "Return"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {
< edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
< edje_object_part_text_set(sd->edje_obj, "text", "");
< for (l = sd->files; l; l = l->next)
< {
< icon = l->data;
< e_fm_icon_signal_emit(icon->icon_obj, "default", "");
< }
< edje_object_signal_emit(sd->edje_obj, "default", "");
< }
< else
< _e_fm_icon_run(sd);
< }
< else if (!strcmp(ev->keyname, "BackSpace"))
< {
< if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< {
< char *str;
< str = NULL;
< str = edje_object_part_text_get(sd->edje_obj, "text");
< if(str)
< {
< char *buf;
< int size;
< size = strlen(str);
< buf = calloc(size , sizeof(char));
< snprintf(buf, size, "%s", str);
< edje_object_part_text_set(sd->edje_obj, "text", buf);
< _e_fm_icon_select_glob(sd, buf);
< E_FREE(buf);
< }
< }
< else
---
> ev = event_info;
> sd = data;
> const char *name;
> if(sd->state == E_FILEMAN_STATE_RENAME)
> {
> if (!strcmp(ev->keyname, "Return"))
3054,3082c3191,3201
< char *fullname;
<
< fullname = _e_fm_dir_pop(sd->dir);
< if (fullname)
< {
< if (sd->win)
< e_win_title_set(sd->win, fullname);
< _e_fm_dir_set(sd, fullname);
< free(fullname);
< }
< }
< }
< else if (ev->string)
< {
< char *str;
< str = NULL;
< str = edje_object_part_text_get(sd->edje_obj, "text");
< if(str)
< {
< char *buf;
< int size;
< size = strlen(str) + strlen(ev->string) + 2;
< buf = calloc(size, sizeof(char));
< snprintf(buf, size, "%s%s", str, ev->string);
< edje_object_part_text_set(sd->edje_obj, "text", buf);
< _e_fm_icon_select_glob(sd, buf);
< E_FREE(buf);
< }
< else
---
> if(!sd->selection.current.file) return;///???
> icon = sd->selection.current.file;
> name = e_entry_text_get(icon->sd->entry_obj);
> // name = e_entry_text_get(icon->sd->entry_obj);
> // e_fm_icon_edit_entry_set(icon->icon_obj, NULL);
> // evas_object_focus_set(icon->sd->entry_obj, 0);
> // evas_object_del(icon->sd->entry_obj);
> // icon->sd->entry_obj = NULL;
> _e_fm_file_rename(icon, name);
> }
> else if (!strcmp(ev->keyname, "Escape"))
3084,3090c3203,3336
< edje_object_part_text_set(sd->edje_obj, "text", ev->string);
< _e_fm_icon_select_glob(sd, ev->string);
< }
<
< if(strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
< edje_object_signal_emit(sd->edje_obj, "typebuf_show", "");
< }
---
> if(!sd->selection.current.file) return;///???
> icon = sd->selection.current.file;
> _e_fm_file_rename_abort(icon);
> }
> }
> else
> {
> if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
> {
> if (!strcmp(ev->keyname, "Tab"))
> {
> _e_fm_autocomplete(sd);
> }
> else if (!strcmp(ev->keyname, "BackSpace"))
> {
> char *str;
> str = NULL;
> str = edje_object_part_text_get(sd->edje_obj, "text");
> if(str)
> {
> char *buf;
> int size;
> size = strlen(str);
> buf = calloc(size , sizeof(char));
> snprintf(buf, size, "%s", str);
> edje_object_part_text_set(sd->edje_obj, "text", buf);
> _e_fm_icon_select_glob(sd, buf);
> E_FREE(buf);
> }
> }
> else if (!strcmp(ev->keyname, "Up")
> || !strcmp(ev->keyname, "Down")
> || !strcmp(ev->keyname, "Escape")
> || !strcmp(ev->keyname, "Return"))
> {
>
> edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
> edje_object_part_text_set(sd->edje_obj, "text", "");
> for (l = sd->files; l; l = l->next)
> {
> icon = l->data;
> e_fm_icon_signal_emit(icon->icon_obj, "default", "");
> }
> edje_object_signal_emit(sd->edje_obj, "default", "");
> }
> else if (ev->string)
> {
> char *str;
> str = NULL;
> str = edje_object_part_text_get(sd->edje_obj, "text");
> if(str)
> {
> char *buf;
> int size;
> size = strlen(str) + strlen(ev->string) + 2;
> buf = calloc(size, sizeof(char));
> snprintf(buf, size, "%s%s", str, ev->string);
> edje_object_part_text_set(sd->edje_obj, "text", buf);
> _e_fm_icon_select_glob(sd, buf);
> E_FREE(buf);
> }
> else
> {
> edje_object_part_text_set(sd->edje_obj, "text", ev->string);
> _e_fm_icon_select_glob(sd, ev->string);
> }
> }
> }
> else if (!strcmp(ev->keyname, "Up"))
> {
> _e_fm_icon_select_up(sd);
> }
> else if (!strcmp(ev->keyname, "Down"))
> {
> _e_fm_icon_select_down(sd);
> }
> else if (!strcmp(ev->keyname, "Left"))
> {
> _e_fm_icon_select_left(sd);
> }
> else if (!strcmp(ev->keyname, "Right"))
> {
> _e_fm_icon_select_right(sd);
> }
> else if (!strcmp(ev->keyname, "F2"))
> {
> icon = sd->selection.current.file;
> _e_fm_file_rename_start(icon);
> }
> else if (!strcmp(ev->keyname, "Escape"))
> {
>
> }
> else if (!strcmp(ev->keyname, "Return"))
> {
> _e_fm_icon_run(sd);
> }
> else if (!strcmp(ev->keyname, "BackSpace"))
> {
> char *fullname;
>
> fullname = _e_fm_dir_pop(sd->dir);
> if (fullname)
> {
> if (sd->win)
> e_win_title_set(sd->win, fullname);
> _e_fm_dir_set(sd, fullname);
> free(fullname);
> }
> }
> else if (ev->string)
> {
> char *str;
> str = NULL;
> str = edje_object_part_text_get(sd->edje_obj, "text");
> if(str)
> {
> char *buf;
> int size;
> size = strlen(str) + strlen(ev->string) + 2;
> buf = calloc(size, sizeof(char));
> snprintf(buf, size, "%s%s", str, ev->string);
> edje_object_part_text_set(sd->edje_obj, "text", buf);
> _e_fm_icon_select_glob(sd, buf);
> E_FREE(buf);
> }
> else
> {
> edje_object_part_text_set(sd->edje_obj, "text", ev->string);
> _e_fm_icon_select_glob(sd, ev->string);
> }
> if(sd->state == E_FILEMAN_STATE_IDLE) edje_object_signal_emit(sd->edje_obj, "typebuf_show", "");
> }
> }
Index: e_fileman_smart.h
===================================================================
RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.h,v
retrieving revision 1.1.1.4
diff -r1.1.1.4 e_fileman_smart.h
7a8
> typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
24a26,31
> struct _E_Fm_Assoc_App
> {
> char *mime;
> char *app;
> };
>