Am Samstag, den 14.01.2006, 23:20 +0200 schrieb Hisham Mardam Bey: > > its old + new. I use the thinktux cvs, seems it isn´t updated there, > > because otherwise my old changes wouldn´t be displayed by diff, right? > > I forgot to cvs ci. (= > I did it like 15 minutes ago, so it should be on thinktux in like 10 > mins or 15 mins max. (=
I don´t know if did you check it the old patch or took the new parts out. The new stuff I mentioned in the last mail is in patch 6. It also includes the right string-sizes for the assocs. In patch 5 is the beginning of the sort option. If you are pleased with how it works in general, then it would be great if you could have a deeper look at it. The problem is that one can change often between the modes and sometimes not all appear again. After that happens a further mode- or dir-change will cause an infinite loop at icon_canvas_reset/_unpack. (size and modtime show a strange sorting order) can you please mention my patches as from 'jeff' the 'mista' just came in my head as I was searching for something that sounds together with rastamasta. > btw, are you on irc? (#edevelop) no, not used to it. but i´ll come around. > > -- > Hisham Mardam Bey > MSc (Computer Science) > http://hisham.cc/ > +9613609386 > Codito Ergo Sum (I Code Therefore I Am) >
? e_fileman_smart-2.c Index: e_fileman_smart.c =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.c,v retrieving revision 1.1.1.45 diff -u -r1.1.1.45 e_fileman_smart.c --- e_fileman_smart.c 14 Jan 2006 21:35:10 -0000 1.1.1.45 +++ e_fileman_smart.c 15 Jan 2006 00:01:59 -0000 @@ -104,7 +104,8 @@ static void _e_fm_file_delete (E_Fm_Icon *icon); static void _e_fm_dir_set (E_Fm_Smart_Data *sd, const char *dir); -static int _e_fm_dir_files_get (void *data); +static int _e_fm_dir_files_get (void *data); +static int _e_fm_dir_files_get_sorted (E_Fm_Smart_Data *sd); static char *_e_fm_dir_pop (const char *path); static void _e_fm_file_free (E_Fm_Icon *icon); static void _e_fm_dir_monitor_cb (void *data, Ecore_File_Monitor *ecore_file_monitor, Ecore_File_Event event, const char *path); @@ -146,9 +147,13 @@ static int _e_fm_drop_selection_cb (void *data, int type, void *event); static void _e_fm_drop_done_cb (E_Drag *drag, int dropped); +static void _e_fm_files_sort(E_Fm_Smart_Data *sd); static int _e_fm_files_sort_name_cb (void *d1, void *d2); static int _e_fm_files_sort_modtime_cb (void *d1, void *d2); static int _e_fm_files_sort_layout_name_cb (void *d1, void *d2); +static int _e_fm_files_sort_name_dir_first_cb (void *d1, void *d2); +static int _e_fm_files_sort_extension_cb(void *d1, void *d2); +static int _e_fm_files_sort_size_cb(void *d1, void *d2); static void _e_fm_selector_send_file (E_Fm_Icon *icon); static void _e_fm_selector_send_hilite_file (E_Fm_Icon *icon); @@ -1357,27 +1362,120 @@ static void _e_fm_menu_arrange_cb(void *data, E_Menu *m, E_Menu_Item *mi) -{ +{ E_Fm_Smart_Data *sd; sd = data; + if(e_menu_item_num_get(mi) == sd->arrange) + return; + switch (e_menu_item_num_get(mi)) - { - case E_FILEMAN_CANVAS_ARRANGE_NAME: - sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_files_sort_name_cb); - sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME; - _e_fm_redraw(sd); - break; + { + case E_FILEMAN_CANVAS_ARRANGE_NAME: + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME; + _e_fm_files_sort(sd); + break; + case E_FILEMAN_CANVAS_ARRANGE_MODTIME: + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_MODTIME; + _e_fm_files_sort(sd); + break; + case E_FILEMAN_CANVAS_ARRANGE_NAME_DIR_FIRST: + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME_DIR_FIRST; + _e_fm_files_sort(sd); + break; + case E_FILEMAN_CANVAS_ARRANGE_SIZE: + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_SIZE; + _e_fm_files_sort(sd); + break; + case E_FILEMAN_CANVAS_ARRANGE_EXTENSION: + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_EXTENSION; + _e_fm_files_sort(sd); + break; + } +} - case E_FILEMAN_CANVAS_ARRANGE_MODTIME: - sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_files_sort_modtime_cb); - sd->arrange = E_FILEMAN_CANVAS_ARRANGE_MODTIME; - _e_fm_redraw(sd); - break; - } + +static void +_e_fm_files_sort(E_Fm_Smart_Data *sd){ + Ecore_Sheap *heap; + Evas_List *list; + E_Fm_Icon *icon ,*icon_topdir; + icon_topdir = NULL; + + + + e_icon_canvas_width_fix(sd->layout, sd->w); + sd->position = 0.0; + e_icon_canvas_reset(sd->layout); + + list = sd->files; + + + e_icon_canvas_freeze(sd->layout); + + +/* icon_topdir = list->data; + if(!strcmp(icon_topdir->file->name, "..")) + list = evas_list_remove_list(list,list); + else + icon_topdir = NULL; +*/ + + switch(sd->arrange) + { + case E_FILEMAN_CANVAS_ARRANGE_NAME_DIR_FIRST: + heap = ecore_sheap_new(ECORE_COMPARE_CB(_e_fm_files_sort_name_dir_first_cb), evas_list_count(list)); + break; + case E_FILEMAN_CANVAS_ARRANGE_NAME: + heap = ecore_sheap_new(ECORE_COMPARE_CB(_e_fm_files_sort_name_cb), evas_list_count(list)); + break; + case E_FILEMAN_CANVAS_ARRANGE_MODTIME: + heap = ecore_sheap_new(ECORE_COMPARE_CB(_e_fm_files_sort_modtime_cb), evas_list_count(list)); + break; + case E_FILEMAN_CANVAS_ARRANGE_SIZE: + heap = ecore_sheap_new(ECORE_COMPARE_CB(_e_fm_files_sort_size_cb), evas_list_count(list)); + break; + case E_FILEMAN_CANVAS_ARRANGE_EXTENSION: + heap = ecore_sheap_new(ECORE_COMPARE_CB(_e_fm_files_sort_extension_cb), evas_list_count(list)); + break; + } + + if(heap) + { + sd->files = NULL; + + while (list) + { + icon = list->data; + if(icon) ecore_sheap_insert(heap, icon); /* if(icon) ??? */ + list = list->next; + } + +/* if(icon_topdir) + { + sd->files = evas_list_append(sd->files, icon_topdir); + e_icon_canvas_pack(sd->layout, icon_topdir->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon_topdir); + } +*/ + + while ((icon = ecore_sheap_extract(heap))) + { + sd->files = evas_list_append(sd->files, icon); + e_icon_canvas_pack(sd->layout, icon->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon); + } + ecore_sheap_destroy(heap); + + e_icon_canvas_thaw(sd->layout); + + e_icon_canvas_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h); + evas_object_smart_callback_call(sd->object, "changed", NULL); + } } + + + static void _e_fm_menu_refresh_cb(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -1388,6 +1486,7 @@ _e_fm_redraw(sd); } + static void _e_fm_dir_set(E_Fm_Smart_Data *sd, const char *dir) { @@ -1493,12 +1592,55 @@ } } - sd->dir2 = dir2; - if(sd->timer) + sd->dir2 = dir2; + if(sd->arrange != E_FILEMAN_CANVAS_ARRANGE_NAME) + _e_fm_dir_files_get_sorted(sd); + else + { + if(sd->timer) ecore_timer_del(sd->timer); - sd->timer = ecore_timer_add(sd->timer_int, _e_fm_dir_files_get, sd); + sd->timer = ecore_timer_add(sd->timer_int, _e_fm_dir_files_get, sd); + } +} + + +static int +_e_fm_dir_files_get_sorted(E_Fm_Smart_Data *sd) +{ + E_Fm_Icon *icon; + char path[PATH_MAX]; + + for(;sd->files_raw; sd->files_raw = evas_list_remove_list(sd->files_raw, sd->files_raw)) + { + char *f; + f = sd->files_raw->data; + icon = E_NEW(E_Fm_Icon, 1); + if (!icon) break; + snprintf(path, sizeof(path), "%s/%s", sd->dir, f); + icon->file = e_fm_file_new(path); + if (!icon->file) + { + E_FREE(icon); + } + else + { + icon->icon_obj = e_fm_icon_add(sd->evas); + icon->sd = sd; + e_fm_icon_file_set(icon->icon_obj, icon->file); + sd->files = evas_list_append(sd->files, icon); + evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon); + evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon); + evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon); + evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon); + evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_MOVE, _e_fm_icon_mouse_move_cb, sd); + evas_object_show(icon->icon_obj); + } + } + _e_fm_files_sort(sd); } + + static int _e_fm_dir_files_get(void *data) { @@ -1900,40 +2042,72 @@ sd->menu = mn; - /*- Arrange -*/ - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("Arrange Icons")); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/arrange"), - "fileman/button/arrange"); - - mn = e_menu_new(); - e_menu_category_set(mn,"fileman/unknown/arrange"); - e_menu_category_data_set("fileman/unknown/arrange",sd); - e_menu_item_submenu_set(mi, mn); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("By Name")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 2); - if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_NAME) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/arrange_name"), - "fileman/button/arrange_name"); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, _("By Mod Time")); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 2); - if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_MODTIME) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/arrange_time"), - "fileman/button/arrange_time"); + /*- Arrange -*/ + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Arrange Icons")); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/arrange"), + "fileman/button/arrange"); + + mn = e_menu_new(); + e_menu_item_submenu_set(mi, mn); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("By Name")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_NAME) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/arrange_name"), + "fileman/button/arrange_name"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("By Mod Time")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_MODTIME) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/arrange_time"), + "fileman/button/arrange_time"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Directorys First")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_NAME_DIR_FIRST) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/arrange_name"), + "fileman/button/arrange_name"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("By Size")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_SIZE) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/arrange_name"), + "fileman/button/arrange_name"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("By Type")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + if (sd->arrange == E_FILEMAN_CANVAS_ARRANGE_EXTENSION) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _e_fm_menu_arrange_cb, sd); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/arrange_name"), + "fileman/button/arrange_name"); + /*- New -*/ mi = e_menu_item_new(sd->menu); e_menu_item_label_set(mi, _("New")); @@ -3256,6 +3430,7 @@ free(drag->data); } + /* sort functions */ static int _e_fm_files_sort_name_cb(void *d1, void *d2) @@ -3273,10 +3448,10 @@ { Evas_Object *e1, *e2; E_Fm_File *f1, *f2; - + e1 = d1; e2 = d2; - + f1 = e_fm_icon_file_get(e1); f2 = e_fm_icon_file_get(e2); @@ -3294,6 +3469,54 @@ return (e1->file->mtime > e2->file->mtime); } +static int +_e_fm_files_sort_size_cb(void *d1, void *d2) +{ + E_Fm_Icon *e1, *e2; + + e1 = d1; + e2 = d2; + + return (e1->file->size > e2->file->size); +} + +static int +_e_fm_files_sort_name_dir_first_cb(void *d1, void *d2) +{ + E_Fm_Icon *e1, *e2; + + e1 = d1; + e2 = d2; + if(e1->file->type == E_FM_FILE_TYPE_DIRECTORY){ + if(e2->file->type == E_FM_FILE_TYPE_DIRECTORY) + return (strcmp(e1->file->name, e2->file->name)); + else + return -1; + }else + if(e2->file->type == E_FM_FILE_TYPE_DIRECTORY) + return 1; + else + return (strcmp(e1->file->name, e2->file->name)); +} +static int +_e_fm_files_sort_extension_cb(void *d1, void *d2) +{ + E_Fm_Icon *e1, *e2; + + e1 = d1; + e2 = d2; + if(e1->file->type == E_FM_FILE_TYPE_DIRECTORY){ + if(e2->file->type == E_FM_FILE_TYPE_DIRECTORY) + return (strcmp(e1->file->mime, e2->file->mime)); + else + return -1; + }else + if(e2->file->type == E_FM_FILE_TYPE_DIRECTORY) + return 1; + else + return (strcmp(e1->file->mime, e2->file->mime)); +} + static void _e_fm_selector_send_file(E_Fm_Icon *icon) { Index: e_fileman_smart.h =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.h,v retrieving revision 1.1.1.5 diff -u -r1.1.1.5 e_fileman_smart.h --- e_fileman_smart.h 7 Jan 2006 00:06:11 -0000 1.1.1.5 +++ e_fileman_smart.h 15 Jan 2006 00:01:59 -0000 @@ -70,8 +70,10 @@ enum _E_Fm_Arrange { E_FILEMAN_CANVAS_ARRANGE_NAME = 0, - E_FILEMAN_CANVAS_ARRANGE_MODTIME = 1, - E_FILEMAN_CANVAS_ARRANGE_SIZE = 2, + E_FILEMAN_CANVAS_ARRANGE_MODTIME = 1, + E_FILEMAN_CANVAS_ARRANGE_NAME_DIR_FIRST = 2, + E_FILEMAN_CANVAS_ARRANGE_SIZE = 3, + E_FILEMAN_CANVAS_ARRANGE_EXTENSION = 4 }; enum _E_Fm_State
Index: e_fileman_smart.c =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.c,v retrieving revision 1.1.1.45 diff -u -r1.1.1.45 e_fileman_smart.c --- e_fileman_smart.c 14 Jan 2006 21:35:10 -0000 1.1.1.45 +++ e_fileman_smart.c 14 Jan 2006 22:16:14 -0000 @@ -463,35 +463,35 @@ /* local subsystem functions */ int -_e_fm_init_assoc(E_Fm_Smart_Data *sd) +_e_fm_init_assoc(E_Fm_Smart_Data *sd) /* TODO: check if this gets freed correctly*/ { 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-remote"); + assoc->app = (char*)E_NEW(char *, 12); + snprintf(assoc->app, 12, "gimp-remote"); 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); + assoc->app = (char*)E_NEW(char *, 8); 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-remote"); + assoc->app = (char*)E_NEW(char *, 12); + snprintf(assoc->app, 12, "gimp-remote"); 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); + assoc->app = (char*)E_NEW(char *, 8); snprintf(assoc->app, 8, "exhibit"); sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc); @@ -505,10 +505,80 @@ 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); + assoc->app = (char*)E_NEW(char *, 8); snprintf(assoc->app, 8, "xmms -Q"); 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 *, 10); + snprintf(assoc->mime, 10, "%s", "directory"); + assoc->app = (char*)E_NEW(char *, 8); + snprintf(assoc->app, 8, "entropy"); + 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", ".eap"); + assoc->app = (char*)E_NEW(char *, 17); + snprintf(assoc->app, 17, "e_util_eapp_edit"); + sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc); + + Evas_List *l, *list, *apps; + + + list = e_app_name_glob_list("*"); + for (apps = sd->conf.main->apps; apps; apps = apps->next) + { + assoc = apps->data; + assoc->eap = NULL; + for (l = list; l; l = l->next) + { + E_App *a; + a = l->data; + + if((a->exe) && !strncmp(a->exe, assoc->app, strlen(assoc->app))) + { + assoc->eap = a; + break; + } + } + } + + + + /* THIS IS THE HACK */ + char *token,*mime; + char dot[PATH_MAX]; + for (l = list; l; l = l->next) + { + E_App *a; + a = l->data; + if (a->exe && a->comment && strlen(a->comment) > 1) + { + mime = strdup(a->comment); + if(token = strtok(mime, ";")) + { + assoc = E_NEW(E_Fm_Assoc_App, 1); + snprintf(dot, PATH_MAX , _(".%s"), token); + assoc->mime = strdup(dot); + assoc->app = a->exe; + assoc->eap = a; + sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc); + while(token = strtok(NULL, ";")) // take next token of mime + { + assoc = E_NEW(E_Fm_Assoc_App, 1); + snprintf(dot, PATH_MAX , _(".%s"), token); + assoc->mime = strdup(dot); + assoc->app = a->exe; + assoc->eap = a; + sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc); + } + } + } + } + evas_list_free(list); + free(token); + free(mime); return 1; } @@ -871,12 +941,15 @@ static void _e_fm_file_menu_open(void *data, E_Menu *m, E_Menu_Item *mi) { + E_Fm_Smart_Data *sd; E_Fm_Icon *icon; E_Fm_Assoc_App *assoc; Evas_List *l; - icon = data; + + sd = data; + icon = sd->selection.current.file; - for (l = icon->sd->conf.main->apps; l; l = l->next) + for (l = sd->conf.main->apps; l; l = l->next) { assoc = l->data; if(!strcmp(assoc->app,mi->label)){ @@ -888,7 +961,7 @@ switch (icon->file->type) { case E_FM_FILE_TYPE_DIRECTORY: - _e_fm_dir_set(icon->sd, icon->file->path); + _e_fm_dir_set(sd, icon->file->path); break; case E_FM_FILE_TYPE_FILE: if ((!e_fm_file_assoc_exec(icon->file) && (e_fm_file_can_exec(icon->file)))) @@ -2208,10 +2281,9 @@ mi = NULL; if((mo = evas_hash_find(icon->sd->mime_menu_hash,icon->file->mime)) == NULL) - { - /*- Arrange -*/ - mo = e_menu_new(); + { + mo = e_menu_new(); for (l = icon->sd->conf.main->apps; l; l = l->next) { assoc = l->data; @@ -2223,13 +2295,13 @@ 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"); - */ + if(assoc->eap) + { + if (!e_util_menu_item_edje_icon_list_set(mi, assoc->eap->icon_class)) + e_menu_item_icon_edje_set(mi, assoc->eap->path, "icon"); + } - e_menu_item_callback_set(mi, _e_fm_file_menu_open, icon); + e_menu_item_callback_set(mi, _e_fm_file_menu_open, icon->sd); } assoc = NULL; } @@ -2244,17 +2316,19 @@ "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); - } + } + else + { + 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"); + } + + mi = e_menu_item_new(mn); e_menu_item_label_set(mi, _("Open")); Index: e_fileman_smart.h =================================================================== RCS file: /root/e17/apps/e/src/bin/e_fileman_smart.h,v retrieving revision 1.1.1.5 diff -u -r1.1.1.5 e_fileman_smart.h --- e_fileman_smart.h 7 Jan 2006 00:06:11 -0000 1.1.1.5 +++ e_fileman_smart.h 14 Jan 2006 22:16:14 -0000 @@ -193,6 +193,7 @@ { char *mime; char *app; + E_App *eap; }; EAPI int e_fm_init(void);