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);