From 489f258229a643d708061ac117c6deb24f07a943 Mon Sep 17 00:00:00 2001 From: sebastid Date: Mon, 10 Oct 2005 19:27:22 +0000 Subject: [PATCH] Cleanup, and disable. Seems to be some weird things going on. SVN revision: 17398 --- src/bin/e_fileman_smart.c | 3456 ++++++++++++++++++------------------- src/bin/e_fileman_smart.h | 3 +- src/bin/e_int_menus.c | 2 + 3 files changed, 1657 insertions(+), 1804 deletions(-) diff --git a/src/bin/e_fileman_smart.c b/src/bin/e_fileman_smart.c index 7aec0d9d7..1540233e3 100644 --- a/src/bin/e_fileman_smart.c +++ b/src/bin/e_fileman_smart.c @@ -9,70 +9,71 @@ /* TODO: * - checking wether events belong to us (ecore events) - * + * * - scrolling - * - * - we need a redraw function that will just re-arrange and not do + * + * - we need a redraw function that will just re-arrange and not do * the whole thing. for example, when we resize, we should just * check the file offset and fill the empty space with icons - * + * * - is the offset code working properly? i have a feeling we're displayin * more icons that the visible space can take and they are being hidden. - * + * * - emit all sorts of signals on double click, right click, single click... - * + * * - aspect ratio on thumbnails. - * + * * - add typebuffer like in evidence. - * + * * - keyboard shortcuts for directory and file navigation. - * + * * - multi select - * + * * - allow for icon movement inside the canvas - * + * * - add metadata system which allows us to save icon positions and will * eventually allow us to have custom icon sizes, custom bgs per dir... - * + * * - double check dir monitoring. note: when we are in a dir that is constantly * changing, we cant keep calling redraw_new as it will kill us. - * + * * - we need to fix the icon edc to allow us to have icon labels what will * wrap on wrap=char */ -typedef struct _E_Fileman_Smart_Data E_Fileman_Smart_Data; -typedef struct _E_Fileman_File E_Fileman_File; -typedef struct _E_Fileman_Thumb_Pending E_Fileman_Thumb_Pending; +typedef struct _E_Fileman_Smart_Data E_Fileman_Smart_Data; +typedef struct _E_Fileman_File E_Fileman_File; +typedef struct _E_Fileman_Thumb_Pending E_Fileman_Thumb_Pending; typedef struct _E_Fileman_Fake_Mouse_Up_Info E_Fileman_Fake_Mouse_Up_Info; -typedef enum _E_Fileman_File_Type E_Fileman_File_Type; -typedef enum _E_Fileman_Arrange E_Fileman_Arrange; + +typedef enum _E_Fileman_File_Type E_Fileman_File_Type; +typedef enum _E_Fileman_Arrange E_Fileman_Arrange; struct _E_Fileman_File { struct dirent *dir_entry; - + Evas_Object *icon; Evas_Object *icon_img; Evas_Object *entry; Evas_Object *event; Evas_Object *title; - + E_Fileman_Smart_Data *sd; - + E_Menu *menu; struct { - Evas_Object *table; - E_Win *win; - Evas_Object *bg; - Evas_List *objects; + Evas_Object *table; + E_Win *win; + Evas_Object *bg; + Evas_List *objects; } prop; struct { - unsigned char clicked : 1; - unsigned char selected : 1; - } state; - + unsigned char clicked : 1; + unsigned char selected : 1; + } state; + void *data; }; @@ -84,39 +85,39 @@ struct _E_Fileman_Thumb_Pending enum _E_Fileman_File_Type { - E_FILEMAN_FILETYPE_ALL = 0, - E_FILEMAN_FILETYPE_NORMAL = 1, - E_FILEMAN_FILETYPE_DIRECTORY = 2, - E_FILEMAN_FILETYPE_FILE = 3, - E_FILEMAN_FILETYPE_HIDDEN = 4, - E_FILEMAN_FILETYPE_UNKNOWN = 5 + E_FILEMAN_FILETYPE_ALL = 0, + E_FILEMAN_FILETYPE_NORMAL = 1, + E_FILEMAN_FILETYPE_DIRECTORY = 2, + E_FILEMAN_FILETYPE_FILE = 3, + E_FILEMAN_FILETYPE_HIDDEN = 4, + E_FILEMAN_FILETYPE_UNKNOWN = 5 }; enum _E_Fileman_Arrange { - E_FILEMAN_CANVAS_ARRANGE_NAME = 0, - E_FILEMAN_CANVAS_ARRANGE_MODTIME = 1, - E_FILEMAN_CANVAS_ARRANGE_SIZE = 2, + E_FILEMAN_CANVAS_ARRANGE_NAME = 0, + E_FILEMAN_CANVAS_ARRANGE_MODTIME = 1, + E_FILEMAN_CANVAS_ARRANGE_SIZE = 2, }; struct _E_Fileman_Fake_Mouse_Up_Info { - Evas *canvas; - int button; + Evas *canvas; + int button; }; struct _E_Fileman_Smart_Data { Evas_Object *bg; Evas_Object *clip; - + E_Menu *menu; E_Win *win; Evas *evas; - Evas_List *event_handlers; + Evas_List *event_handlers; Evas_List *pending_thumbs; - + char *dir; Evas_List *files; Evas_List *files_raw; @@ -126,47 +127,47 @@ struct _E_Fileman_Smart_Data int file_offset; int visible_files; double position; - + char *thumb_path; - + struct { - unsigned char start : 1; - int x, y; - double time; - E_Fileman_File *file; - Ecore_Evas *ecore_evas; - Evas *evas; - Ecore_X_Window win; - Evas_Object *icon; - Evas_Object *icon_img; + unsigned char start : 1; + int x, y; + double time; + E_Fileman_File *file; + Ecore_Evas *ecore_evas; + Evas *evas; + Ecore_X_Window win; + Evas_Object *icon; + Evas_Object *icon_img; } drag; - + struct { - E_Drop_Handler *drop_file; + E_Drop_Handler *drop_file; } drop; - + struct { - int w; - int h; - int x_space; - int y_space; + int w; + int h; + int x_space; + int y_space; } icon_info; struct { - int w; - int h; - } max; - + int w; + int h; + } max; + struct { - Evas_List *files; - E_Fileman_File *current_file; - - struct { - unsigned char enabled : 1; - Evas_Coord x, y; - Evas_Object *obj; - } band; - + Evas_List *files; + E_Fileman_File *current_file; + + struct { + unsigned char enabled : 1; + Evas_Coord x, y; + Evas_Object *obj; + } band; + } selection; }; @@ -181,173 +182,166 @@ static void _e_fm_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h); static void _e_fm_smart_show(Evas_Object *object); static void _e_fm_smart_hide(Evas_Object *object); -static Evas_Smart *e_fileman_smart = NULL; - -static void _e_fm_redraw_new (E_Fileman_Smart_Data *sd); -static void _e_fm_redraw_update (E_Fileman_Smart_Data *sd); -static void _e_fm_size_calc (E_Fileman_Smart_Data *sd); -static void _e_fm_redraw (E_Fileman_Smart_Data *sd); +static void _e_fm_redraw_new(E_Fileman_Smart_Data *sd); +static void _e_fm_redraw_update(E_Fileman_Smart_Data *sd); +static void _e_fm_size_calc(E_Fileman_Smart_Data *sd); static void _e_fm_selections_clear(E_Fileman_Smart_Data *sd); static void _e_fm_selections_add(E_Fileman_File *file); static void _e_fm_selections_del(E_Fileman_File *file); static void _e_fm_selections_add_rect(E_Fileman_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); -static void _e_fm_files_free (E_Fileman_Smart_Data *sd); -static char *_e_fm_file_stripext(char *path); -static Evas_Bool _e_fm_file_can_preview (E_Fileman_File *file); -static void _e_fm_file_delete (E_Fileman_File *file); +static void _e_fm_files_free(E_Fileman_Smart_Data *sd); +static Evas_Bool _e_fm_file_can_preview(E_Fileman_File *file); +static void _e_fm_file_delete(E_Fileman_File *file); static void _e_fm_file_exec(E_Fileman_File *file); static E_Fileman_File_Type _e_fm_file_type(E_Fileman_File *file); static char *_e_fm_file_fullname(E_Fileman_File *file); -static Evas_Object *_e_fm_file_preview_get (E_Fileman_File *file); -static Evas_Object *_e_fm_file_icon_mime_get (E_Fileman_File *file); -static Evas_Object *_e_fm_file_icon_get (E_Fileman_File *file); -static void _e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_fm_file_icon_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_fm_file_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_fm_file_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_fm_file_menu_open (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_menu_copy (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_menu_cut (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_menu_paste (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_menu_rename (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_menu_delete (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_menu_properties (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_file_delete_yes_cb (void *data, E_Dialog *dia); -static void _e_fm_file_delete_no_cb (void *data, E_Dialog *dia); -static const char *_e_fm_file_thumb_path_get(char *file); +static Evas_Object *_e_fm_file_icon_mime_get(E_Fileman_File *file); +static Evas_Object *_e_fm_file_icon_get(E_Fileman_File *file); +static void _e_fm_file_icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_file_icon_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_file_icon_mouse_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_file_icon_mouse_out_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_file_menu_open(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_menu_copy(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_menu_cut(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_menu_paste(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_menu_rename(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_menu_properties(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_file_delete_yes_cb(void *data, E_Dialog *dia); +static void _e_fm_file_delete_no_cb(void *data, E_Dialog *dia); +static char *_e_fm_file_thumb_path_get(char *file); static Evas_Bool _e_fm_file_thumb_exists(char *file); static Evas_Bool _e_fm_file_thumb_create(char *file); static Evas_Object *_e_fm_file_thumb_get(E_Fileman_File *file); static char *_e_fm_file_id(char *file); -static void _e_fm_fake_mouse_up_cb (void *data); -static void _e_fm_fake_mouse_up_later (Evas *evas, int button); -static void _e_fm_fake_mouse_up_all_later (Evas *evas); -static int _e_fm_dir_files_sort_name_cb (void *d1, void *d2); -static int _e_fm_dir_files_sort_modtime_cb (void *d1, void *d2); -static void _e_fm_dir_set (E_Fileman_Smart_Data *sd, const char *dir); -static void _e_fm_dir_monitor_cb (void *data, Ecore_File_Monitor *ecore_file_monitor, Ecore_File_Event event, const char *path); -static Evas_List *_e_fm_dir_files_get (char *dirname, E_Fileman_File_Type type); +static void _e_fm_fake_mouse_up_cb(void *data); +static void _e_fm_fake_mouse_up_later(Evas *evas, int button); +static void _e_fm_fake_mouse_up_all_later(Evas *evas); +static int _e_fm_dir_files_sort_name_cb(void *d1, void *d2); +static int _e_fm_dir_files_sort_modtime_cb(void *d1, void *d2); +static void _e_fm_dir_set(E_Fileman_Smart_Data *sd, const char *dir); +static void _e_fm_dir_monitor_cb(void *data, Ecore_File_Monitor *ecore_file_monitor, Ecore_File_Event event, const char *path); +static Evas_List *_e_fm_dir_files_get(char *dirname, E_Fileman_File_Type type); static char *_e_fm_dir_pop(const char *path); -static void _e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_fm_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _e_fm_mouse_move_cb (void *data, Evas *e, Evas_Object *obj, void *event_info); -static int _e_fm_win_mouse_move_cb (void *data, int type, void *event); -static int _e_fm_grabbed_mouse_up_cb (void *data, int type, void *event); -static void _e_fm_menu_arrange_cb (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_fm_menu_refresh_cb (void *data, E_Menu *m, E_Menu_Item *mi); -static int _e_fm_drop_enter_cb (void *data, int type, void *event); -static int _e_fm_drop_leave_cb (void *data, int type, void *event); -static int _e_fm_drop_position_cb (void *data, int type, void *event); -static int _e_fm_drop_selection_cb (void *data, int type, void *event); +static void _e_fm_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_fm_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +static int _e_fm_win_mouse_move_cb(void *data, int type, void *event); +static int _e_fm_grabbed_mouse_up_cb(void *data, int type, void *event); +static void _e_fm_menu_arrange_cb(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm_menu_refresh_cb(void *data, E_Menu *m, E_Menu_Item *mi); +static int _e_fm_drop_enter_cb(void *data, int type, void *event); +static int _e_fm_drop_leave_cb(void *data, int type, void *event); +static int _e_fm_drop_position_cb(void *data, int type, void *event); +static int _e_fm_drop_selection_cb(void *data, int type, void *event); static void _e_fm_drop_cb(E_Drag *drag, int dropped); -static int _e_fm_drop_drop_cb (void *data, int type, void *event); -static int _e_fm_thumbnailer_server_data(void *data, int type, void *event); -static int _e_fm_thumbnailer_client_data(void *data, int type, void *event); -static int _e_fm_thumbnailer_exit(void *data, int type, void *event); +static int _e_fm_drop_drop_cb(void *data, int type, void *event); +static int _e_fm_thumbnailer_exit(void *data, int type, void *event); -static Ecore_Event_Handler *_e_fileman_mouse_up_handler = NULL; +static Ecore_Event_Handler *_e_fm_mouse_up_handler = NULL; static char *thumb_path; -static double _e_fileman_grab_time = 0; - +static double _e_fm_grab_time = 0; +static Evas_Smart *e_fm_smart = NULL; /* externally accessible functions */ Evas_Object * e_fm_add(Evas *evas) { - if (!e_fileman_smart) - { - e_fileman_smart = evas_smart_new("e_fileman", - _e_fm_smart_add, /* add */ - _e_fm_smart_del, /* del */ - NULL, /* layer_set */ - _e_fm_smart_raise, /* raise */ - _e_fm_smart_lower, /* lower */ - _e_fm_smart_stack_above, /* stack_above */ - _e_fm_smart_stack_below, /* stack_below */ - _e_fm_smart_move, /* move */ - _e_fm_smart_resize, /* resize */ - _e_fm_smart_show, /* show */ - _e_fm_smart_hide, /* hide */ - NULL, /* color_set */ - NULL, /* clip_set */ - NULL, /* clip_unset */ - NULL); /* data*/ - } - return evas_object_smart_add(evas, e_fileman_smart); + if (!e_fm_smart) + { + e_fm_smart = evas_smart_new("e_fileman", + _e_fm_smart_add, /* add */ + _e_fm_smart_del, /* del */ + NULL, /* layer_set */ + _e_fm_smart_raise, /* raise */ + _e_fm_smart_lower, /* lower */ + _e_fm_smart_stack_above, /* stack_above */ + _e_fm_smart_stack_below, /* stack_below */ + _e_fm_smart_move, /* move */ + _e_fm_smart_resize, /* resize */ + _e_fm_smart_show, /* show */ + _e_fm_smart_hide, /* hide */ + NULL, /* color_set */ + NULL, /* clip_set */ + NULL, /* clip_unset */ + NULL); /* data*/ + } + return evas_object_smart_add(evas, e_fm_smart); } -char* -e_fm_dir_get (Evas_Object *object) +void +e_fm_dir_set(Evas_Object *object, const char *dir) { E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - + + _e_fm_dir_set(sd, dir); +} + +char * +e_fm_dir_get(Evas_Object *object) +{ + E_Fileman_Smart_Data *sd; + + if ((!object) || !(sd = evas_object_smart_data_get(object))) + return NULL; + return strdup(sd->dir); } void -e_fm_dir_set (Evas_Object *object, const char *dir) +e_fm_e_win_set(Evas_Object *object, E_Win *win) { E_Fileman_Smart_Data *sd; - - if ((!object) || !(sd = evas_object_smart_data_get(object))) - return; - - _e_fm_dir_set(sd, dir); -} -void -e_fm_e_win_set (Evas_Object *object, E_Win *win) -{ - E_Fileman_Smart_Data *sd; - if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - + sd->win = win; } E_Win * -e_fm_e_win_get (Evas_Object *object) -{ +e_fm_e_win_get(Evas_Object *object) +{ E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) - return; - + return NULL; + return sd->win; } void -e_fm_menu_set (Evas_Object *object, E_Menu *menu) -{ +e_fm_menu_set(Evas_Object *object, E_Menu *menu) +{ E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - if(menu) + + if (menu) sd->menu = menu; } E_Menu * -e_fm_menu_get (Evas_Object *object) -{ +e_fm_menu_get(Evas_Object *object) +{ E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) - return; - + return NULL; + return sd->menu; } void e_fm_scroll_horizontal(Evas_Object *object, double percent) { - + } void @@ -356,173 +350,170 @@ e_fm_scroll_vertical(Evas_Object *object, double percent) E_Fileman_Smart_Data *sd; int offsetpx; Evas_Coord bx, by, bw, bh; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; /* fix me */ return; - + evas_object_geometry_get(sd->bg, &bx, &by, &bw, &bh); - + offsetpx = (sd->position - percent) * sd->max.h; sd->position = percent; - + printf("offsetpx = %d\n", offsetpx); - + if (offsetpx > 0) // moving up - { - int offset; - int visible; - Evas_List *dirs; - - offset = sd->file_offset - sd->visible_files; - visible = sd->visible_files; - dirs = evas_list_nth_list(sd->files, offset); - offsetpx = abs(offsetpx); - printf("downscroll!!\n"); - while (dirs) - { - Evas_Coord x, y, w, h; - E_Fileman_File *file; - - printf("moving icons %d pixels!\n",offsetpx); - - file = dirs->data; - evas_object_geometry_get(file->icon, &x, &y, &w, &h); - - if(y + offsetpx + w > by + bh) - sd->file_offset--; - - evas_object_move(file->icon, x, y + offsetpx); - - dirs = dirs->next; - } - } + { + int offset; + int visible; + Evas_List *dirs; + + offset = sd->file_offset - sd->visible_files; + visible = sd->visible_files; + dirs = evas_list_nth_list(sd->files, offset); + offsetpx = abs(offsetpx); + printf("downscroll!!\n"); + while (dirs) + { + Evas_Coord x, y, w, h; + E_Fileman_File *file; + + printf("moving icons %d pixels!\n",offsetpx); + + file = dirs->data; + evas_object_geometry_get(file->icon, &x, &y, &w, &h); + + if ((y + offsetpx + w) > (by + bh)) + sd->file_offset--; + + evas_object_move(file->icon, x, y + offsetpx); + + dirs = dirs->next; + } + } else if (offsetpx < 0) // moving down - { - int offset; - int visible; - Evas_List *dirs; - - offset = sd->file_offset - sd->visible_files; - visible = sd->visible_files; - dirs = evas_list_nth_list(sd->files, offset); - offsetpx = abs(offsetpx); - printf("downscroll!!\n"); - while (dirs) - { - Evas_Coord x, y, w, h; - E_Fileman_File *file; - - printf("moving icons %d pixels!\n",offsetpx); - - file = dirs->data; - evas_object_geometry_get(file->icon, &x, &y, &w, &h); - - if(y - offsetpx + w < by) - { - sd->file_offset++; - sd->visible_files--; - } - - evas_object_move(file->icon, x, y - offsetpx); - - dirs = dirs->next; - } - } - + { + int offset; + int visible; + Evas_List *dirs; + + offset = sd->file_offset - sd->visible_files; + visible = sd->visible_files; + dirs = evas_list_nth_list(sd->files, offset); + offsetpx = abs(offsetpx); + printf("downscroll!!\n"); + while (dirs) + { + Evas_Coord x, y, w, h; + E_Fileman_File *file; + + printf("moving icons %d pixels!\n",offsetpx); + + file = dirs->data; + evas_object_geometry_get(file->icon, &x, &y, &w, &h); + + if ((y - offsetpx + w) < by) + { + sd->file_offset++; + sd->visible_files--; + } + + evas_object_move(file->icon, x, y - offsetpx); + + dirs = dirs->next; + } + } + _e_fm_redraw_update(sd); } static void -_e_fm_redraw_update (E_Fileman_Smart_Data *sd) +_e_fm_redraw_update(E_Fileman_Smart_Data *sd) { Evas_List *dirs = NULL; Evas_Coord x, y, w, h; - Evas_Coord xo, yo; - + Evas_Coord yo; + E_Fileman_File *file; - struct dirent *dir_entry; - + if (!sd->dir) return; - + dirs = evas_list_nth(sd->files, sd->file_offset - 1); printf("offset is %d\n",sd->file_offset); file = dirs->data; - if(!file) printf ("CANT GET FILE!\n"); + if (!file) printf("CANT GET FILE!\n"); evas_object_geometry_get(file->icon, &x, &y, &w, &h); - x += w + sd->icon_info.x_space; - - evas_object_geometry_get (sd->bg, NULL, &yo, &w, &h); - - dirs = sd->files_raw; - - sd->file_offset -= sd->visible_files; - - dirs = evas_list_nth_list(dirs, sd->file_offset); - - while (dirs) - { - struct dirent *dir_entry; - int icon_w, icon_h; - Evas_Object *icon; - Evas_Coord fw, fh, il, ir, it, ib; - - if (y > yo + h) - return; - - dir_entry = (struct dirent*)evas_list_data (dirs); - - icon = edje_object_add (sd->evas); - e_theme_edje_object_set(icon, "base/theme/fileman", - "fileman/icon"); - - file = E_NEW(E_Fileman_File, 1); - file->icon = icon; - file->dir_entry = dir_entry; - file->sd = sd; - file->icon_img = _e_fm_file_icon_get (file); - edje_object_part_swallow (icon, "icon_swallow", file->icon_img); - edje_object_part_text_set (icon, "icon_title", dir_entry->d_name); - file->event = evas_object_rectangle_add(sd->evas); - evas_object_color_set(file->event, 0, 0, 0, 0); - - edje_object_size_min_calc (icon, &icon_w, &icon_h); - evas_object_resize (icon, icon_w, icon_h); - evas_object_resize (file->event, icon_w, icon_h); - - if (x > w || x + icon_w > w) - { - x = sd->icon_info.x_space; - y += icon_h + sd->icon_info.y_space; - } - - evas_object_move (icon, x, y); - evas_object_move (file->event, x, y); - evas_object_stack_above (icon, sd->bg); - evas_object_stack_above (file->event, icon); - evas_object_clip_set (icon, sd->clip); - evas_object_clip_set (file->event, sd->clip); - evas_object_show (icon); - evas_object_show (file->event); - - - x+= icon_w + sd->icon_info.x_space; + x += w + sd->icon_info.x_space; - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_file_icon_mouse_down_cb, file); - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_UP, _e_fm_file_icon_mouse_up_cb, file); - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_IN, _e_fm_file_icon_mouse_in_cb, file); - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_OUT, _e_fm_file_icon_mouse_out_cb, file); - evas_object_repeat_events_set(file->event, TRUE); - - sd->files = evas_list_append (sd->files, file); - - sd->file_offset++; - sd->visible_files++; - dirs = dirs->next; - } + evas_object_geometry_get(sd->bg, NULL, &yo, &w, &h); + + dirs = sd->files_raw; + + sd->file_offset -= sd->visible_files; + + dirs = evas_list_nth_list(dirs, sd->file_offset); + + while (dirs) + { + struct dirent *dir_entry; + int icon_w, icon_h; + Evas_Object *icon; + + if (y > (yo + h)) + return; + + dir_entry = evas_list_data (dirs); + + icon = edje_object_add(sd->evas); + e_theme_edje_object_set(icon, "base/theme/fileman", + "fileman/icon"); + + file = E_NEW(E_Fileman_File, 1); + file->icon = icon; + file->dir_entry = dir_entry; + file->sd = sd; + file->icon_img = _e_fm_file_icon_get(file); + edje_object_part_swallow(icon, "icon_swallow", file->icon_img); + edje_object_part_text_set(icon, "icon_title", dir_entry->d_name); + file->event = evas_object_rectangle_add(sd->evas); + evas_object_color_set(file->event, 0, 0, 0, 0); + + edje_object_size_min_calc(icon, &icon_w, &icon_h); + evas_object_resize(icon, icon_w, icon_h); + evas_object_resize(file->event, icon_w, icon_h); + + if ((x > w) || ((x + icon_w) > w)) + { + x = sd->icon_info.x_space; + y += icon_h + sd->icon_info.y_space; + } + + evas_object_move(icon, x, y); + evas_object_move(file->event, x, y); + evas_object_stack_above(icon, sd->bg); + evas_object_stack_above(file->event, icon); + evas_object_clip_set(icon, sd->clip); + evas_object_clip_set(file->event, sd->clip); + evas_object_show(icon); + evas_object_show(file->event); + + x += icon_w + sd->icon_info.x_space; + + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_file_icon_mouse_down_cb, file); + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_UP, _e_fm_file_icon_mouse_up_cb, file); + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_IN, _e_fm_file_icon_mouse_in_cb, file); + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_OUT, _e_fm_file_icon_mouse_out_cb, file); + evas_object_repeat_events_set(file->event, TRUE); + + sd->files = evas_list_append(sd->files, file); + + sd->file_offset++; + sd->visible_files++; + dirs = dirs->next; + } } /* local subsystem functions */ @@ -531,97 +522,95 @@ static void _e_fm_smart_add(Evas_Object *object) { Evas *evas; - char *homedir, *dir; + char *homedir; + char dir[PATH_MAX]; E_Fileman_Smart_Data *sd; - + if ((!object) || !(evas = evas_object_evas_get(object))) return; - + sd = E_NEW(E_Fileman_Smart_Data, 1); if (!sd) return; - sd->bg = evas_object_rectangle_add (evas); // this should become an edje - evas_object_color_set (sd->bg, 0, 0, 0, 0); - evas_object_show (sd->bg); - - evas_object_event_callback_add (sd->bg, EVAS_CALLBACK_MOUSE_DOWN, - _e_fm_mouse_down_cb, sd); - evas_object_event_callback_add (sd->bg, EVAS_CALLBACK_MOUSE_UP, - _e_fm_mouse_up_cb, sd); - evas_object_event_callback_add (sd->bg, EVAS_CALLBACK_MOUSE_MOVE, - _e_fm_mouse_move_cb, sd); - evas_object_smart_member_add(sd->bg, object); + sd->bg = evas_object_rectangle_add(evas); // this should become an edje + evas_object_color_set(sd->bg, 0, 0, 0, 0); + evas_object_show(sd->bg); + + evas_object_event_callback_add(sd->bg, EVAS_CALLBACK_MOUSE_DOWN, + _e_fm_mouse_down_cb, sd); + evas_object_event_callback_add(sd->bg, EVAS_CALLBACK_MOUSE_UP, + _e_fm_mouse_up_cb, sd); + evas_object_event_callback_add(sd->bg, EVAS_CALLBACK_MOUSE_MOVE, + _e_fm_mouse_move_cb, sd); + evas_object_smart_member_add(sd->bg, object); sd->clip = evas_object_rectangle_add(evas); evas_object_smart_member_add(sd->clip, object); evas_object_move(sd->clip, -100000, -100000); evas_object_resize(sd->clip, 200000, 200000); evas_object_color_set(sd->clip, 255, 255, 255, 255); - - evas_object_clip_set(sd->bg, sd->clip); - + + evas_object_clip_set(sd->bg, sd->clip); + sd->icon_info.w = 48; sd->icon_info.h = 48; sd->icon_info.x_space = 15; sd->icon_info.y_space = 15; - + homedir = e_user_homedir_get(); - thumb_path = E_NEW(char, PATH_MAX); - snprintf (thumb_path, PATH_MAX, "%s/.e/e/fileman/thumbnails", homedir); - if (!ecore_file_exists(thumb_path)) - ecore_file_mkpath(thumb_path); - free(homedir); - + if (homedir) + { + thumb_path = E_NEW(char, PATH_MAX); + snprintf(thumb_path, PATH_MAX, "%s/.e/e/fileman/thumbnails", homedir); + if (!ecore_file_exists(thumb_path)) + ecore_file_mkpath(thumb_path); + free(homedir); + } + sd->monitor = NULL; - sd->file_offset = 0; - sd->position = 0; - sd->evas = evas; - sd->pending_thumbs = NULL; - sd->event_handlers = NULL; - + sd->selection.band.obj = edje_object_add(sd->evas); - e_theme_edje_object_set(sd->selection.band.obj, + e_theme_edje_object_set(sd->selection.band.obj, "base/theme/fileman/rubberband", - "fileman/rubberband"); - - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER, - _e_fm_drop_enter_cb, - sd)); - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE, - _e_fm_drop_leave_cb, - sd)); - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, - _e_fm_drop_position_cb, - sd)); - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, - _e_fm_drop_drop_cb, - sd)); - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, - _e_fm_drop_selection_cb, - sd)); - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_EVENT_EXE_EXIT, - _e_fm_thumbnailer_exit, - sd)); - sd->event_handlers = evas_list_append (sd->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, - _e_fm_win_mouse_move_cb, - sd)); + "fileman/rubberband"); + + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER, + _e_fm_drop_enter_cb, + sd)); + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE, + _e_fm_drop_leave_cb, + sd)); + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, + _e_fm_drop_position_cb, + sd)); + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, + _e_fm_drop_drop_cb, + sd)); + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, + _e_fm_drop_selection_cb, + sd)); + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_EVENT_EXE_EXIT, + _e_fm_thumbnailer_exit, + sd)); + sd->event_handlers = evas_list_append(sd->event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, + _e_fm_win_mouse_move_cb, + sd)); evas_object_smart_data_set(object, sd); - - dir = get_current_dir_name(); - _e_fm_dir_set (sd, dir); - free(dir); + + if (getcwd(dir, sizeof(dir))) + _e_fm_dir_set(sd, dir); } static void @@ -629,48 +618,47 @@ _e_fm_smart_del(Evas_Object *object) { E_Fileman_Smart_Data *sd; Evas_List *l; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) - return; - - _e_fm_files_free (sd); - + return; + + _e_fm_files_free(sd); + for (l = sd->event_handlers; l; l = l->next) - { - Ecore_Event_Handler *h; - - h = l->data; - ecore_event_handler_del(h); - } - + { + Ecore_Event_Handler *h; + + h = l->data; + ecore_event_handler_del(h); + } evas_list_free(sd->event_handlers); sd->event_handlers = NULL; - - + evas_object_del(sd->selection.band.obj); + evas_object_del(sd->clip); evas_object_del(sd->bg); - - free (sd->dir); + + free(sd->dir); free(sd); } - + static void _e_fm_smart_raise(Evas_Object *object) { E_Fileman_Smart_Data *sd; Evas_List *l; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - evas_object_raise (sd->bg); + + evas_object_raise(sd->bg); for (l = sd->files; l; l = l->next) - { - E_Fileman_File *file; - - file = l->data; - evas_object_stack_above (file->icon, sd->bg); - } + { + E_Fileman_File *file; + + file = l->data; + evas_object_stack_above(file->icon, sd->bg); + } } static void @@ -678,18 +666,18 @@ _e_fm_smart_lower(Evas_Object *object) { E_Fileman_Smart_Data *sd; Evas_List *l; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - + evas_object_lower (sd->bg); for (l = sd->files; l; l = l->next) - { - E_Fileman_File *file; - - file = l->data; - evas_object_stack_above (file->icon, sd->bg); - } + { + E_Fileman_File *file; + + file = l->data; + evas_object_stack_above(file->icon, sd->bg); + } } static void @@ -697,18 +685,18 @@ _e_fm_smart_stack_above(Evas_Object *object, Evas_Object *above) { E_Fileman_Smart_Data *sd; Evas_List *l; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - evas_object_stack_above (sd->bg, above); + + evas_object_stack_above(sd->bg, above); for (l = sd->files; l; l = l->next) - { - E_Fileman_File *file; - - file = l->data; - evas_object_stack_above (file->icon, sd->bg); - } + { + E_Fileman_File *file; + + file = l->data; + evas_object_stack_above(file->icon, sd->bg); + } } static void @@ -716,356 +704,290 @@ _e_fm_smart_stack_below(Evas_Object *object, Evas_Object *below) { E_Fileman_Smart_Data *sd; Evas_List *l; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - evas_object_stack_below (sd->bg, below); + + evas_object_stack_below(sd->bg, below); for (l = sd->files; l; l = l->next) - { - E_Fileman_File *file; - - file = l->data; - evas_object_stack_above (file->icon, sd->bg); - } -} + { + E_Fileman_File *file; -static void -_e_fm_smart_move (Evas_Object *object, Evas_Coord x, Evas_Coord y) -{ - E_Fileman_Smart_Data *sd; - - if ((!object) || !(sd = evas_object_smart_data_get(object))) - return; - - evas_object_move (sd->bg, x, y); - evas_object_move (sd->clip, x, y); - - _e_fm_redraw_new (sd); // no new + file = l->data; + evas_object_stack_above(file->icon, sd->bg); + } } static void -_e_fm_smart_resize (Evas_Object *object, Evas_Coord w, Evas_Coord h) +_e_fm_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y) { E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - evas_object_resize (sd->bg, w, h); - evas_object_resize (sd->clip, w, h); + + evas_object_move(sd->bg, x, y); + evas_object_move(sd->clip, x, y); + + _e_fm_redraw_new(sd); // no new +} + +static void +_e_fm_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h) +{ + E_Fileman_Smart_Data *sd; + + if ((!object) || !(sd = evas_object_smart_data_get(object))) + return; + + evas_object_resize(sd->bg, w, h); + evas_object_resize(sd->clip, w, h); // optimize - _e_fm_redraw_new (sd); // no new + _e_fm_redraw_new(sd); // no new } static void -_e_fm_smart_show (Evas_Object *object) +_e_fm_smart_show(Evas_Object *object) { E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - evas_object_show (sd->clip); + + evas_object_show(sd->clip); } static void -_e_fm_smart_hide (Evas_Object *object) +_e_fm_smart_hide(Evas_Object *object) { E_Fileman_Smart_Data *sd; - + if ((!object) || !(sd = evas_object_smart_data_get(object))) return; - - evas_object_hide (sd->clip); + + evas_object_hide(sd->clip); } static void -_e_fm_redraw_new (E_Fileman_Smart_Data *sd) +_e_fm_redraw_new(E_Fileman_Smart_Data *sd) { Evas_List *dirs = NULL; Evas_Coord x, y, w, h; Evas_Coord xo, yo; - + E_Fileman_File *file; struct dirent *dir_entry; - + if (!sd->dir) return; - - if(sd->files) - { - _e_fm_files_free (sd); - } - - evas_object_geometry_get (sd->bg, &x, &y, &w, &h); + + if (sd->files) + _e_fm_files_free(sd); + + evas_object_geometry_get(sd->bg, &x, &y, &w, &h); xo = x; - yo = y; - + yo = y; + x = sd->icon_info.x_space; y = sd->icon_info.y_space; - sd->files_raw = _e_fm_dir_files_get (sd->dir, E_FILEMAN_FILETYPE_NORMAL); + sd->files_raw = _e_fm_dir_files_get(sd->dir, E_FILEMAN_FILETYPE_NORMAL); dirs = sd->files_raw; - - //if (sd->monitor) - // ecore_file_monitor_del (sd->monitor); - //sd->monitor = ecore_file_monitor_add (sd->dir, _e_fm_dir_monitor_cb, sd); - - dir_entry = calloc (1, sizeof (struct dirent)); + + if (sd->monitor) + ecore_file_monitor_del(sd->monitor); + sd->monitor = ecore_file_monitor_add(sd->dir, _e_fm_dir_monitor_cb, sd); + + dir_entry = E_NEW(struct dirent, 1); dir_entry->d_type = 4; - snprintf (dir_entry->d_name, NAME_MAX+1, ".."); - - dirs = evas_list_prepend (dirs, dir_entry); + snprintf(dir_entry->d_name, NAME_MAX + 1, ".."); + + dirs = evas_list_prepend(dirs, dir_entry); //sd->file_offset = 0; //sd->visible_files = 0; - + sd->file_offset -= sd->visible_files; - - if(sd->file_offset <= 0) + + if (sd->file_offset <= 0) sd->file_offset = 0; else dirs = evas_list_nth_list(dirs, sd->file_offset); - + sd->visible_files = 0; //_e_fm_size_calc(sd); - + while (dirs) - { - struct dirent *dir_entry; - int icon_w, icon_h; - Evas_Object *icon; - Evas_Coord fw, fh, il, ir, it, ib; - - if (y > yo + h) - return; - - dir_entry = (struct dirent*)evas_list_data (dirs); - - icon = edje_object_add (sd->evas); - e_theme_edje_object_set(icon, "base/theme/fileman", - "fileman/icon"); - - file = E_NEW(E_Fileman_File, 1); - file->icon = icon; - file->dir_entry = dir_entry; - file->sd = sd; - file->icon_img = _e_fm_file_icon_get (file); - edje_object_part_swallow (icon, "icon_swallow", file->icon_img); - edje_object_part_text_set (icon, "icon_title", dir_entry->d_name); - file->event = evas_object_rectangle_add(sd->evas); - evas_object_color_set(file->event, 0, 0, 0, 0); - -#if 0 - { - Evas_Textblock_Style *e_editable_text_style; - - e_editable_text_style = evas_textblock2_style_new(); - evas_textblock2_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 align=center color=#000000 wrap=char'"); + { + struct dirent *dir_entry; + int icon_w, icon_h; + Evas_Object *icon; - file->title = evas_object_textblock2_add(sd->evas); - evas_object_textblock2_style_set(file->title, e_editable_text_style); - evas_object_textblock2_text_markup_set(file->title, dir_entry->d_name); + if (y > (yo + h)) break; - evas_object_resize (file->title, sd->icon_info.w*2, 1); - evas_object_textblock2_size_formatted_get (file->title, &fw, &fh); - evas_object_textblock2_style_insets_get(file->title, &il, &ir, &it, &ib); - evas_object_resize(file->title, sd->icon_info.w*2, fh + it + ib); - edje_extern_object_min_size_set (file->title, sd->icon_info.w*2, fh + it + ib); - edje_object_part_swallow (icon, "icon_title", file->title); - } + dir_entry = (struct dirent*)evas_list_data(dirs); + + icon = edje_object_add(sd->evas); + e_theme_edje_object_set(icon, "base/theme/fileman", + "fileman/icon"); + + file = E_NEW(E_Fileman_File, 1); + file->icon = icon; + file->dir_entry = dir_entry; + file->sd = sd; + file->icon_img = _e_fm_file_icon_get(file); + edje_object_part_swallow(icon, "icon_swallow", file->icon_img); + edje_object_part_text_set(icon, "icon_title", dir_entry->d_name); + file->event = evas_object_rectangle_add(sd->evas); + evas_object_color_set(file->event, 0, 0, 0, 0); + +#if 0 + { + Evas_Textblock_Style *e_editable_text_style; + + e_editable_text_style = evas_textblock2_style_new(); + evas_textblock2_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 align=center color=#000000 wrap=char'"); + + file->title = evas_object_textblock2_add(sd->evas); + evas_object_textblock2_style_set(file->title, e_editable_text_style); + evas_object_textblock2_text_markup_set(file->title, dir_entry->d_name); + + evas_object_resize(file->title, sd->icon_info.w*2, 1); + evas_object_textblock2_size_formatted_get(file->title, &fw, &fh); + evas_object_textblock2_style_insets_get(file->title, &il, &ir, &it, &ib); + evas_object_resize(file->title, sd->icon_info.w*2, fh + it + ib); + edje_extern_object_min_size_set(file->title, sd->icon_info.w*2, fh + it + ib); + edje_object_part_swallow(icon, "icon_title", file->title); + } #endif - - edje_object_size_min_calc (icon, &icon_w, &icon_h); - evas_object_resize (icon, icon_w, icon_h); - evas_object_resize (file->event, icon_w, icon_h); - - if (x > w || x + icon_w > w) - { - x = sd->icon_info.x_space; - y += icon_h + sd->icon_info.y_space; - } - - evas_object_move (icon, x, y); - evas_object_move (file->event, x, y); - evas_object_stack_above (icon, sd->bg); - evas_object_stack_above (file->event, icon); - evas_object_clip_set (icon, sd->clip); - evas_object_clip_set (file->event, sd->clip); - evas_object_show (icon); - evas_object_show (file->event); - - - x+= icon_w + sd->icon_info.x_space; - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_file_icon_mouse_down_cb, file); - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_UP, _e_fm_file_icon_mouse_up_cb, file); - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_IN, _e_fm_file_icon_mouse_in_cb, file); - evas_object_event_callback_add (file->event, EVAS_CALLBACK_MOUSE_OUT, _e_fm_file_icon_mouse_out_cb, file); - evas_object_repeat_events_set(file->event, FALSE); - - sd->files = evas_list_append (sd->files, file); - - sd->file_offset++; - sd->visible_files++; - dirs = dirs->next; - } + edje_object_size_min_calc(icon, &icon_w, &icon_h); + evas_object_resize(icon, icon_w, icon_h); + evas_object_resize(file->event, icon_w, icon_h); + + if ((x > w) || ((x + icon_w) > w)) + { + x = sd->icon_info.x_space; + y += icon_h + sd->icon_info.y_space; + } + + evas_object_move(icon, x, y); + evas_object_move(file->event, x, y); + evas_object_stack_above(icon, sd->bg); + evas_object_stack_above(file->event, icon); + evas_object_clip_set(icon, sd->clip); + evas_object_clip_set(file->event, sd->clip); + evas_object_show(icon); + evas_object_show(file->event); + + x += icon_w + sd->icon_info.x_space; + + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_file_icon_mouse_down_cb, file); + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_UP, _e_fm_file_icon_mouse_up_cb, file); + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_IN, _e_fm_file_icon_mouse_in_cb, file); + evas_object_event_callback_add(file->event, EVAS_CALLBACK_MOUSE_OUT, _e_fm_file_icon_mouse_out_cb, file); + evas_object_repeat_events_set(file->event, FALSE); + + sd->files = evas_list_append(sd->files, file); + + sd->file_offset++; + sd->visible_files++; + dirs = dirs->next; + } } // when this is enabled, the thumbnailer is broken -void -_e_fm_size_calc (E_Fileman_Smart_Data *sd) -{ - Evas_List *dirs = NULL; - Evas_Coord x, y, w, h; - E_Fileman_File *file; - struct dirent *dir_entry; - - if (!sd->dir) - return; - - evas_object_geometry_get (sd->bg, &x, &y, &w, &h); - - x = 0; - y = 0; - - dirs = sd->files_raw; - - dir_entry = calloc (1, sizeof (struct dirent)); - dir_entry->d_type = 4; - snprintf (dir_entry->d_name, NAME_MAX+1, ".."); - - dirs = evas_list_prepend (dirs, dir_entry); - - while (dirs) - { - struct dirent *dir_entry; - int icon_w, icon_h; - Evas_Object *icon; - - dir_entry = (struct dirent*)evas_list_data (dirs); - - icon = edje_object_add (sd->evas); - e_theme_edje_object_set(icon, "base/theme/fileman", "fileman/icon"); - - file = E_NEW(E_Fileman_File, 1); - file->icon = icon; - file->dir_entry = dir_entry; - file->sd = sd; - file->icon_img = _e_fm_file_icon_get (file); // this might be causing borkage - edje_object_part_swallow (icon, "icon_swallow", file->icon_img); - edje_object_part_text_set (icon, "icon_title", dir_entry->d_name); - edje_object_size_min_calc (icon, &icon_w, &icon_h); - - if (x > w || x + icon_w > w) - { - x = sd->icon_info.x_space; - y += icon_h + sd->icon_info.y_space; - } - - x+= icon_w + sd->icon_info.x_space; - - evas_object_del(file->icon); - evas_object_del(file->icon_img); - free(file); - - dirs = dirs->next; - } - - sd->max.w = x; // not really max w. - sd->max.h = y; -} - static void -_e_fm_redraw (E_Fileman_Smart_Data *sd) +_e_fm_size_calc(E_Fileman_Smart_Data *sd) { Evas_List *dirs = NULL; Evas_Coord x, y, w, h; - Evas_Coord xo, yo; - + E_Fileman_File *file; + struct dirent *dir_entry; + if (!sd->dir) return; - - evas_object_geometry_get (sd->bg, &x, &y, &w, &h); - xo = x; - yo = y; - - x = sd->icon_info.x_space; - y = sd->icon_info.y_space; - - dirs = sd->files; - - sd->file_offset -= sd->visible_files; - - if(sd->file_offset <= 0) - sd->file_offset = 0; - else - dirs = evas_list_nth_list(dirs, sd->file_offset); - - sd->visible_files = 0; - + + evas_object_geometry_get(sd->bg, &x, &y, &w, &h); + + x = 0; + y = 0; + + dirs = sd->files_raw; + + dir_entry = E_NEW(struct dirent, 1); + dir_entry->d_type = 4; + snprintf(dir_entry->d_name, NAME_MAX + 1, ".."); + + dirs = evas_list_prepend(dirs, dir_entry); + while (dirs) - { - E_Fileman_File *file; - int icon_w, icon_h; - - file = dirs->data; - - if (y > yo + h) - return; - - edje_object_size_min_calc (file->icon, &icon_w, &icon_h); - - if (x > w || x + icon_w > w) - { - x = sd->icon_info.x_space; - y += icon_h + sd->icon_info.y_space; - } - - evas_object_move (file->icon, x, y); - - x+= icon_w + sd->icon_info.y_space; - - sd->file_offset++; - sd->visible_files++; - dirs = dirs->next; - } + { + struct dirent *dir_entry; + int icon_w, icon_h; + Evas_Object *icon; + + dir_entry = (struct dirent*)evas_list_data(dirs); + + icon = edje_object_add(sd->evas); + e_theme_edje_object_set(icon, "base/theme/fileman", "fileman/icon"); + + file = E_NEW(E_Fileman_File, 1); + file->icon = icon; + file->dir_entry = dir_entry; + file->sd = sd; + file->icon_img = _e_fm_file_icon_get(file); // this might be causing borkage + edje_object_part_swallow(icon, "icon_swallow", file->icon_img); + edje_object_part_text_set(icon, "icon_title", dir_entry->d_name); + edje_object_size_min_calc(icon, &icon_w, &icon_h); + + if ((x > w) || ((x + icon_w) > w)) + { + x = sd->icon_info.x_space; + y += icon_h + sd->icon_info.y_space; + } + + x += icon_w + sd->icon_info.x_space; + + evas_object_del(file->icon); + evas_object_del(file->icon_img); + free(file); + + dirs = dirs->next; + } + + sd->max.w = x; // not really max w. + sd->max.h = y; } static void _e_fm_selections_clear(E_Fileman_Smart_Data *sd) { Evas_List *l; - + for (l = sd->selection.files; l; l = l->next) - { - E_Fileman_File *file; - - file = l->data; - if(!file) continue; - edje_object_signal_emit(file->icon, "unclicked", ""); - edje_object_signal_emit(file->icon_img, "unclicked", ""); - file->state.clicked = 0; - file->state.selected = 0; - } - - sd->selection.files = evas_list_free(sd->selection.files); - - if(sd->selection.current_file) - { - sd->selection.files = NULL; - sd->selection.current_file = NULL; - } + { + E_Fileman_File *file; + + file = l->data; + if (!file) continue; + edje_object_signal_emit(file->icon, "unclicked", ""); + edje_object_signal_emit(file->icon_img, "unclicked", ""); + file->state.clicked = 0; + file->state.selected = 0; + } + sd->selection.files = evas_list_free(sd->selection.files); + sd->selection.files = NULL; + sd->selection.current_file = NULL; } -static void +static void _e_fm_selections_add(E_Fileman_File *file) { - if(!file) + if (!file) return; - + edje_object_signal_emit(file->icon, "clicked", ""); edje_object_signal_emit(file->icon_img, "clicked", ""); file->sd->selection.current_file = file; @@ -1076,337 +998,271 @@ _e_fm_selections_add(E_Fileman_File *file) static void _e_fm_selections_add_rect(E_Fileman_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) { - Evas_List *l; - - for (l = sd->files; l; l = l->next) - { - E_Fileman_File *file; - Evas_Coord x, y, w, h; - - file = l->data; - if(!file) continue; - - evas_object_geometry_get(file->icon, &x, &y, &w, &h); - - } + for (l = sd->files; l; l = l->next) + { + E_Fileman_File *file; + Evas_Coord x, y, w, h; + + file = l->data; + if (!file) continue; + + evas_object_geometry_get(file->icon, &x, &y, &w, &h); + } } static void _e_fm_selections_del(E_Fileman_File *file) -{ - if(!file) +{ + if (!file) return; - + edje_object_signal_emit(file->icon, "unclicked", ""); - edje_object_signal_emit(file->icon_img, "unclicked", ""); + edje_object_signal_emit(file->icon_img, "unclicked", ""); file->state.clicked = 0; file->sd->selection.files = evas_list_remove(file->sd->selection.files, file); file->sd->selection.current_file = evas_list_nth(file->sd->selection.files, 0); } static void -_e_fm_dir_set (E_Fileman_Smart_Data *sd, const char *dir) +_e_fm_dir_set(E_Fileman_Smart_Data *sd, const char *dir) { - if(!sd || !dir) - return; - - - if(sd->dir) - if(!strcmp(sd->dir, dir)) - return; - - if(sd->dir) - free (sd->dir); - - sd->dir = calloc (/*strlen(dir) + 1*/PATH_MAX, sizeof (char)); - snprintf (sd->dir, PATH_MAX/*strlen(dir) + 1*/, "%s", dir); - - _e_fm_selections_clear(sd); - - _e_fm_redraw_new (sd); + if ((!sd) || (!dir)) return; + if ((sd->dir) && (!strcmp(sd->dir, dir))) return; + + if (sd->dir) free (sd->dir); + sd->dir = strdup(dir); + + _e_fm_selections_clear(sd); + _e_fm_redraw_new(sd); } static void -_e_fm_files_free (E_Fileman_Smart_Data *sd) +_e_fm_files_free(E_Fileman_Smart_Data *sd) { E_Fileman_File *file; Evas_List *l; - + if (!sd->files) return; - - l = sd->files; - while (l) - { - file = l->data; - evas_object_del (file->icon_img); - evas_object_del (file->icon); - evas_object_del (file->entry); - evas_object_del (file->title); - evas_object_del (file->event); - file->sd = NULL; - - E_FREE (file->dir_entry); - if (file->menu) - e_object_del (E_OBJECT (file->menu)); - E_FREE (l->data); - l = l->next; - } - - l = NULL; - evas_list_free (sd->files); + for (l = sd->files; l; l = l->next) + { + file = l->data; + evas_object_del(file->icon_img); + evas_object_del(file->icon); + evas_object_del(file->entry); + evas_object_del(file->title); + evas_object_del(file->event); + file->sd = NULL; + + E_FREE(file->dir_entry); + if (file->menu) + e_object_del(E_OBJECT(file->menu)); + free(file); + } + evas_list_free(sd->files); -// this is segfaulting E - //if (sd->monitor) - // ecore_file_monitor_del (sd->monitor); - sd->monitor = NULL; - sd->files = NULL; sd->drag.file = NULL; - + _e_fm_selections_clear(sd); } -static void -_e_fm_dir_monitor_cb (void *data, Ecore_File_Monitor *ecore_file_monitor, Ecore_File_Event event, const char *path) +static void +_e_fm_dir_monitor_cb(void *data, Ecore_File_Monitor *ecore_file_monitor, + Ecore_File_Event event, const char *path) { E_Fileman_Smart_Data *sd; - + sd = data; - + + /* FIXME! */ + return; + if (event == ECORE_FILE_EVENT_DELETED_SELF) - { - char *dir; - - dir = _e_fm_dir_pop(sd->dir); - /* we need to fix this, uber hack alert */ - if(sd->win) - e_win_title_set (sd->win, dir); - _e_fm_dir_set (sd, dir); - return; - } - + { + char *dir; + + dir = _e_fm_dir_pop(sd->dir); + /* FIXME: we need to fix this, uber hack alert */ + if (sd->win) + e_win_title_set(sd->win, dir); + _e_fm_dir_set(sd, dir); + free(dir); + return; + } + // OPTIMIZE !! - _e_fm_redraw_new (sd); + _e_fm_redraw_new(sd); } -Evas_List * -_e_fm_dir_files_get (char *dirname, E_Fileman_File_Type type) +static Evas_List * +_e_fm_dir_files_get(char *dirname, E_Fileman_File_Type type) { DIR *dir; struct dirent *dir_entry; Evas_List *files; - - files = NULL; - - if((dir = opendir(dirname)) == NULL) - return NULL; - - - while((dir_entry = readdir(dir)) != NULL) - { - if ((strcmp (dir_entry->d_name, ".") && strcmp (dir_entry->d_name, ".."))) - { - if (!strncmp (dir_entry->d_name, ".", 1) && type != E_FILEMAN_FILETYPE_HIDDEN) - continue; - else - { - - struct dirent *dir_entry2; - - dir_entry2 = calloc( 1, sizeof(struct dirent)); - dir_entry2->d_ino = dir_entry->d_ino; - // dir_entry2->d_off = dir_entry->d_off; // not portable - // dir_entry2->d_reclen = dir_entry->d_reclen; // note portable - dir_entry2->d_type = dir_entry->d_type; - snprintf (dir_entry2->d_name, NAME_MAX+1, dir_entry->d_name); - - files = evas_list_append (files, dir_entry2); - } - } - } - closedir (dir); - - files = evas_list_sort (files, evas_list_count (files), _e_fm_dir_files_sort_name_cb); - + files = NULL; + + if ((dir = opendir(dirname)) == NULL) + return NULL; + + while ((dir_entry = readdir(dir)) != NULL) + { + struct dirent *dir_entry2; + + if ((!strcmp(dir_entry->d_name, ".") || (!strcmp (dir_entry->d_name, "..")))) continue; + if ((dir_entry->d_name[0] == '.') && (type != E_FILEMAN_FILETYPE_HIDDEN)) continue; + + dir_entry2 = E_NEW(struct dirent, 1); + dir_entry2->d_ino = dir_entry->d_ino; + // dir_entry2->d_off = dir_entry->d_off; // not portable + // dir_entry2->d_reclen = dir_entry->d_reclen; // note portable + dir_entry2->d_type = dir_entry->d_type; + memcpy(dir_entry2->d_name, dir_entry->d_name, NAME_MAX); + dir_entry2->d_name[NAME_MAX] = 0; + + files = evas_list_append(files, dir_entry2); + } + + closedir(dir); + + files = evas_list_sort(files, evas_list_count(files), _e_fm_dir_files_sort_name_cb); + return files; } static char * -_e_fm_dir_pop(const char *path) { - char *ptr, *start, *end, *dir; +_e_fm_dir_pop(const char *path) +{ + char *start, *end, *dir; int i; - - i = 0; - start = strchr (path, '/'); - end = strrchr (path ,'/'); - - if (start == end) - { - char *ret; - ret = calloc (2, sizeof (char)); - snprintf (ret, 2, "%s", "/\n"); - return ret; - } - if (!start || !end) - { - char *ret; - ret = calloc (1, sizeof (char)); - snprintf (ret, 1, "%s", "\n"); - return ret; - } - - dir = malloc(strlen(path)); - - while(start != end) - { - dir[i] = *start; - start++; - i++; - } - - dir[i] = '\0'; + i = 0; + start = strchr(path, '/'); + end = strrchr(path ,'/'); + + if (start == end) + { + dir = strdup("/");; + } + else if ((!start) || (!end)) + { + dir = strdup(""); + } + else + { + dir = malloc((end - start + 1)); + if (dir) + { + memcpy(dir, start, end - start); + dir[end - start] = 0; + } + } return dir; } -/* strip extention from a file */ -char * -_e_fm_file_stripext(char *path) +static Evas_Bool +_e_fm_file_can_preview(E_Fileman_File *file) { - char *ptr; - char *c; - char *file; - int i; - - i = 0; - ptr = path; - c = strrchr(ptr,'.'); - - if (!c) - { - char *ret; - ret = calloc (1, sizeof (char)); - snprintf (ret, 1, "%s", "\n"); - return ret; - } - - file = malloc(strlen(path)); - - while(ptr != c) { - file[i] = *ptr; - ptr++; - i++; - } - - file[i] = '\0'; - return file; + if (!file) return 0; + + if (file->dir_entry->d_type == 8) + { + char *ext; + + ext = strrchr(file->dir_entry->d_name, '.'); + if (!ext) return 0; + return (!strcasecmp(ext, ".jpg")) || (!strcasecmp(ext, ".png")); + } + return 0; } -Evas_Bool -_e_fm_file_can_preview (E_Fileman_File *file) -{ - if(!file) return 0; - - if(file->dir_entry->d_type == 8) - if (strcmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 4, ".jpg") == 0 || - strcmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 4, ".png") == 0) - return 1; - return 0; -} - -static void -_e_fm_file_rename (E_Fileman_File *file, const char* name) +static void +_e_fm_file_rename(E_Fileman_File *file, const char* name) { char old_name[PATH_MAX], new_name[PATH_MAX]; - - if (!name || strlen(name) == 0) + + if (!name || !name[0]) return; - - edje_object_part_text_set (file->icon, "icon_title", name); - snprintf (old_name, PATH_MAX, "%s/%s", file->sd->dir, file->dir_entry->d_name); - snprintf (new_name, PATH_MAX, "%s/%s", file->sd->dir, name); - ecore_file_mv (old_name, new_name); + + edje_object_part_text_set(file->icon, "icon_title", name); + snprintf(old_name, PATH_MAX, "%s/%s", file->sd->dir, file->dir_entry->d_name); + snprintf(new_name, PATH_MAX, "%s/%s", file->sd->dir, name); + ecore_file_mv(old_name, new_name); } // todo: check if the deletion was ok, if not, pop up dialog -static void -_e_fm_file_delete (E_Fileman_File *file) +static void +_e_fm_file_delete(E_Fileman_File *file) { char full_name[PATH_MAX]; - + if (!file) return; - - snprintf (full_name, PATH_MAX, "%s/%s", file->sd->dir, file->dir_entry->d_name); - if (!ecore_file_unlink (full_name)) - { - E_Dialog *dia; - E_Fileman *fileman; - char *text; - - fileman = file->data; - dia = e_dialog_new (fileman->con); - e_dialog_button_add (dia, "Ok", NULL, _e_fm_file_delete_no_cb, file); - e_dialog_button_focus_num (dia, 1); - e_dialog_title_set (dia, "Error"); - text = calloc (PATH_MAX + 256, sizeof (char)); - snprintf (text, PATH_MAX + 256, "Could not delete
%s ?", file->dir_entry->d_name); - e_dialog_text_set (dia, text); - - e_dialog_show (dia); - } -} -Evas_Object * -_e_fm_file_preview_get (E_Fileman_File *file) -{ - Evas_Object *icon_img; - char preview[PATH_MAX]; - int size; + snprintf(full_name, PATH_MAX, "%s/%s", file->sd->dir, file->dir_entry->d_name); + if (!ecore_file_unlink(full_name)) + { + E_Dialog *dia; + E_Fileman *fileman; + char *text; - //size = strlen (file->sd->dir) + strlen (file->dir_entry->d_name) + 4; - //preview = calloc (size, sizeof (char)); - snprintf (preview, PATH_MAX, "%s%s%s",file->sd->dir, "/", file->dir_entry->d_name); - icon_img = e_icon_add (file->sd->evas); + fileman = file->data; + dia = e_dialog_new(fileman->con); + e_dialog_button_add(dia, "Ok", NULL, _e_fm_file_delete_no_cb, file); + e_dialog_button_focus_num(dia, 1); + e_dialog_title_set(dia, "Error"); + text = E_NEW(char, PATH_MAX + 256); + snprintf(text, PATH_MAX + 256, "Could not delete
%s ?", file->dir_entry->d_name); + e_dialog_text_set(dia, text); - if (!icon_img) - return NULL; - - e_icon_file_set (icon_img, preview); - return icon_img; + e_dialog_show(dia); + } } // TODO: overhaul -Evas_Object * -_e_fm_file_icon_mime_get (E_Fileman_File *file) +static Evas_Object * +_e_fm_file_icon_mime_get(E_Fileman_File *file) { Evas_Object *icon_img; - + if (!file) return NULL; - - icon_img = edje_object_add (file->sd->evas); - - if (file->dir_entry->d_type == 4) - e_theme_edje_object_set(icon_img, "base/theme/fileman", - "fileman/icons/folder"); - else if (strcasecmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 4, ".pdf") == 0) - e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/pdf"); - else if (strcasecmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 2, ".c") == 0) - e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/c"); - else if (strcasecmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 2, ".h") == 0) - e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/h"); - else if (strcasecmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 4, ".jpg") == 0) - e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/jpg"); - else if (strcasecmp(file->dir_entry->d_name + strlen(file->dir_entry->d_name) - 4, ".png") == 0) - e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/png"); - else - e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/file"); - + + icon_img = edje_object_add(file->sd->evas); + + if (file->dir_entry->d_type == 4) + { + e_theme_edje_object_set(icon_img, "base/theme/fileman", + "fileman/icons/folder"); + } + else + { + char *ext; + + ext = strrchr(file->dir_entry->d_name, '.'); + if (ext) + { + if (!strcasecmp(ext, ".pdf")) + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/pdf"); + else if (!strcasecmp(ext, ".c")) + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/c"); + else if (!strcasecmp(ext, ".h")) + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/h"); + else if (!strcasecmp(ext, ".jpg")) + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/jpg"); + else if (!strcasecmp(ext, ".png")) + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/png"); + else + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/file"); + } + else + e_theme_edje_object_set(icon_img, "base/theme/fileman", "fileman/icons/file"); + } + return icon_img; } @@ -1416,197 +1272,211 @@ _e_fm_thumbnailer_exit(void *data, int type, void *event) Ecore_Event_Exe_Exit *ev; E_Fileman_Smart_Data *sd; Evas_List *l; - + ev = event; - sd = data; - + sd = data; + for (l = sd->pending_thumbs; l; l = l->next) - { - E_Fileman_Thumb_Pending *pthumb; - Evas_Object *thumb; - void *data; - int w, h; - - pthumb = l->data; - if(pthumb->pid != ev->pid) - continue; - - thumb = _e_fm_file_thumb_get(pthumb->file); - - edje_object_part_unswallow(pthumb->file->icon, pthumb->file->icon_img); - evas_object_del(pthumb->file->icon_img); - - pthumb->file->icon_img = thumb; - edje_object_part_swallow (pthumb->file->icon, "icon_swallow", pthumb->file->icon_img); - - sd->pending_thumbs = evas_list_remove(sd->pending_thumbs, pthumb); - break; - } - + { + E_Fileman_Thumb_Pending *pthumb; + Evas_Object *thumb; + + pthumb = l->data; + if (pthumb->pid != ev->pid) continue; + + if (pthumb->file->icon_img) + { + edje_object_part_unswallow(pthumb->file->icon, pthumb->file->icon_img); + evas_object_del(pthumb->file->icon_img); + pthumb->file->icon_img = NULL; + } + + thumb = _e_fm_file_thumb_get(pthumb->file); + if (thumb) + { + pthumb->file->icon_img = thumb; + edje_object_part_swallow(pthumb->file->icon, "icon_swallow", pthumb->file->icon_img); + } + + sd->pending_thumbs = evas_list_remove(sd->pending_thumbs, pthumb); + break; + } + return 1; } - static void _e_fm_file_thumb_generate_job(void *data) { E_Fileman_Thumb_Pending *pthumb; - pid_t pid; + pid_t pid; E_Fileman_File *file; - + file = data; - if(!file) + if (!file) return; pthumb = E_NEW(E_Fileman_Thumb_Pending, 1); - pthumb->file = file; - + pthumb->file = file; + pid = fork(); - - if(pid == 0) - { - /* child */ - char *fullname; - - fullname = _e_fm_file_fullname(file); - - if(!_e_fm_file_thumb_exists(fullname)) - _e_fm_file_thumb_create(fullname); - exit(0); - } - else if(pid > 0) - { - /* parent */ - pthumb->pid = pid; - file->sd->pending_thumbs = evas_list_append(file->sd->pending_thumbs, pthumb); - } + + if (pid == 0) + { + /* child */ + char *fullname; + + fullname = _e_fm_file_fullname(file); + if (fullname) + { + if (!_e_fm_file_thumb_exists(fullname)) + _e_fm_file_thumb_create(fullname); + free(fullname); + } + exit(0); + } + else if (pid > 0) + { + /* parent */ + pthumb->pid = pid; + file->sd->pending_thumbs = evas_list_append(file->sd->pending_thumbs, pthumb); + } } static Evas_Object * -_e_fm_file_icon_get (E_Fileman_File *file) +_e_fm_file_icon_get(E_Fileman_File *file) { char *fullname; - + if (!file) return NULL; - - if(!_e_fm_file_can_preview (file)) - return _e_fm_file_icon_mime_get (file); - + + if (!_e_fm_file_can_preview(file)) + return _e_fm_file_icon_mime_get(file); + fullname = _e_fm_file_fullname(file); - - if(_e_fm_file_thumb_exists(fullname)) - return _e_fm_file_thumb_get(file); - + if (fullname) + { + Evas_Object *o = NULL; + if (_e_fm_file_thumb_exists(fullname)) + o = _e_fm_file_thumb_get(file); + free(fullname); + if (o) return o; + } + ecore_job_add(_e_fm_file_thumb_generate_job, file); - return _e_fm_file_icon_mime_get (file); + return _e_fm_file_icon_mime_get(file); } static void -_e_fm_file_menu_open (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_open(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; - char *fullname; - + char *fullname; + file = data; - - switch(_e_fm_file_type(file)) - { - case E_FILEMAN_FILETYPE_DIRECTORY: - fullname = _e_fm_file_fullname(file); - _e_fm_dir_set(file->sd, fullname); - free(fullname); - break; - case E_FILEMAN_FILETYPE_FILE: - fullname = _e_fm_file_fullname(file); - break; - } + + switch (_e_fm_file_type(file)) + { + case E_FILEMAN_FILETYPE_DIRECTORY: + fullname = _e_fm_file_fullname(file); + _e_fm_dir_set(file->sd, fullname); + free(fullname); + break; + case E_FILEMAN_FILETYPE_FILE: + case E_FILEMAN_FILETYPE_ALL: + case E_FILEMAN_FILETYPE_NORMAL: + case E_FILEMAN_FILETYPE_HIDDEN: + case E_FILEMAN_FILETYPE_UNKNOWN: + break; + } } static void -_e_fm_file_menu_copy (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_copy(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; - + file = data; } static void -_e_fm_file_menu_cut (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_cut(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; - + file = data; } static void -_e_fm_file_menu_paste (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_paste(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; - + file = data; } // TODO: This needs to capture the mouse and end // the entry when we click anywhere. static void -_e_fm_file_menu_rename (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_rename(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; file = data; - file->entry = e_entry_add (file->sd->evas); - edje_object_part_swallow (file->icon, "icon_title_edit_swallow", file->entry); - edje_object_part_text_set (file->icon, "icon_title", ""); - evas_object_focus_set (file->entry, 1); - evas_object_show (file->entry); - e_entry_cursor_show (file->entry); + file->entry = e_entry_add(file->sd->evas); + edje_object_part_swallow(file->icon, "icon_title_edit_swallow", file->entry); + edje_object_part_text_set(file->icon, "icon_title", ""); + evas_object_focus_set(file->entry, 1); + evas_object_show(file->entry); + e_entry_cursor_show(file->entry); e_entry_text_set(file->entry, file->dir_entry->d_name); - e_entry_cursor_move_at_end (file->entry); - e_entry_cursor_move_at_start (file->entry); - - _e_fileman_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, _e_fm_grabbed_mouse_up_cb, file); - e_grabinput_get(ecore_evas_software_x11_window_get (file->sd->win->ecore_evas), - 1, ecore_evas_software_x11_window_get (file->sd->win->ecore_evas)); - - _e_fileman_grab_time = ecore_time_get (); + e_entry_cursor_move_at_end(file->entry); + e_entry_cursor_move_at_start(file->entry); + + _e_fm_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, + _e_fm_grabbed_mouse_up_cb, file); + e_grabinput_get(file->sd->win->evas_win, + 1, file->sd->win->evas_win); + + _e_fm_grab_time = ecore_time_get(); } static void -_e_fm_file_menu_delete (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; E_Dialog *dia; char *text; - + file = data; - dia = e_dialog_new (file->sd->win->container); - e_dialog_button_add (dia, "Yes", NULL, _e_fm_file_delete_yes_cb, file); - e_dialog_button_add (dia, "No", NULL, _e_fm_file_delete_no_cb, file); - e_dialog_button_focus_num (dia, 1); - e_dialog_title_set (dia, "Confirm"); - text = calloc (PATH_MAX + 256, sizeof (char)); - snprintf (text, PATH_MAX + 256, " Are you sure you want to delete
%s ?", file->dir_entry->d_name); - e_dialog_text_set (dia, text); - e_dialog_show (dia); + dia = e_dialog_new(file->sd->win->container); + e_dialog_button_add(dia, "Yes", NULL, _e_fm_file_delete_yes_cb, file); + e_dialog_button_add(dia, "No", NULL, _e_fm_file_delete_no_cb, file); + e_dialog_button_focus_num(dia, 1); + e_dialog_title_set(dia, "Confirm"); + text = E_NEW(char, PATH_MAX + 256); + snprintf(text, PATH_MAX + 256, " Are you sure you want to delete
%s ?", file->dir_entry->d_name); + e_dialog_text_set(dia, text); + e_dialog_show(dia); } static void -_e_fm_file_delete_yes_cb (void *data, E_Dialog *dia) +_e_fm_file_delete_yes_cb(void *data, E_Dialog *dia) { E_Fileman_File *file; - + file = data; - - _e_fm_file_delete (file); + + _e_fm_file_delete(file); e_object_del(E_OBJECT(dia)); - _e_fm_redraw_new (file->sd); // no_new + _e_fm_redraw_new(file->sd); // no_new } static void -_e_fm_file_delete_no_cb (void *data, E_Dialog *dia) +_e_fm_file_delete_no_cb(void *data, E_Dialog *dia) { - e_object_del(E_OBJECT(dia)); + e_object_del(E_OBJECT(dia)); } static void @@ -1614,15 +1484,15 @@ _e_fm_file_menu_properties_del_cb(E_Win *win) { E_Fileman_File *file; Evas_List *l; - + file = win->data; evas_object_del(file->prop.table); - + for (l = file->prop.objects; l; l = l->next) evas_object_del(l->data); - + evas_object_del(file->prop.bg); - + e_object_del(E_OBJECT(win)); } @@ -1630,1142 +1500,1123 @@ static void _e_fm_file_menu_properties_resize_cb(E_Win *win) { E_Fileman_File *file; - + file = win->data; evas_object_resize(file->prop.bg, win->w, win->h); } static void -_e_fm_file_menu_properties (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_file_menu_properties(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_File *file; E_Win *win; - Evas_Object *table, *hbox, *vbox; - Evas_Object *name, *value; + Evas_Object *table; + Evas_Object *name; Evas_Object *bg; Evas_Coord w, h; struct stat st; struct group *grp; struct passwd *usr; struct tm *t; - char *fullname, *tstring; + char *fullname; char *size, *username, *groupname, *lastaccess, *lastmod, *permissions; - + file = data; - + fullname = _e_fm_file_fullname(file); stat(fullname, &st); - //free(fullname); - - size = calloc(64, sizeof(char)); - snprintf(size, 64, "%d KB", st.st_size / 1024); - - username = calloc(128, sizeof(char)); // max length of username? + free(fullname); + + size = E_NEW(char, 64); + snprintf(size, 64, "%ld KB", st.st_size / 1024); + + username = E_NEW(char, 128); // max length of username? usr = getpwuid(st.st_uid); snprintf(username, 128, "%s", usr->pw_name); - //free(usr); - - groupname = calloc(128, sizeof(char)); // max length of group? + //free(usr); + + groupname = E_NEW(char, 128); // max length of group? grp = getgrgid(st.st_gid); snprintf(groupname, 128, "%s", grp->gr_name); //free(grp); - + t = gmtime(&st.st_atime); - lastaccess = calloc(128, sizeof(char)); + lastaccess = E_NEW(char, 128); strftime(lastaccess, 128, "%a %b %d %T %Y", t); - + t = gmtime(&st.st_mtime); - lastmod = calloc(128, sizeof(char)); - strftime(lastmod, 128, "%a %b %d %T %Y", t); - - permissions = calloc(128, sizeof(char)); // todo + lastmod = E_NEW(char, 128); + strftime(lastmod, 128, "%a %b %d %T %Y", t); + + permissions = E_NEW(char, 128); // todo snprintf(permissions, 128, "%s", ""); - + win = e_win_new(file->sd->win->container); e_win_delete_callback_set(win, _e_fm_file_menu_properties_del_cb); e_win_resize_callback_set(win, _e_fm_file_menu_properties_resize_cb); win->data = file; - bg = edje_object_add (win->evas); + bg = edje_object_add(win->evas); e_theme_edje_object_set(bg, "base/theme/fileman/properties", "fileman/properties"); - edje_object_part_text_set(bg, "title", file->dir_entry->d_name); + edje_object_part_text_set(bg, "title", file->dir_entry->d_name); evas_object_move(bg, 0, 0); - evas_object_show(bg); + evas_object_show(bg); table = e_table_add(win->evas); e_table_homogenous_set(table, 1); - - name = evas_object_text_add(win->evas); + + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); - evas_object_text_text_set(name, "Name"); + evas_object_text_text_set(name, "Name"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 0, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); - evas_object_text_text_set(name, "Owner"); + evas_object_text_text_set(name, "Owner"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 1, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); - evas_object_text_text_set(name, "Group"); + evas_object_text_text_set(name, "Group"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 2, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, "Size"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 3, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); - evas_object_text_text_set(name, "Last Accessed"); + evas_object_text_text_set(name, "Last Accessed"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 4, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, "Last Modified"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 5, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, "Permissions"); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 0, 6, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); - evas_object_text_text_set(name, file->dir_entry->d_name); + evas_object_text_text_set(name, file->dir_entry->d_name); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 0, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, username); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 1, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, groupname); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 2, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, size); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 3, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, lastaccess); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 4, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, lastmod); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 5, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ w, h); /* max w, h */ - + name = evas_object_text_add(win->evas); evas_object_text_font_set(name, "Vera", 10); evas_object_text_text_set(name, permissions); evas_object_color_set(name, 0, 0, 0, 255); evas_object_geometry_get(name, NULL, NULL, &w, &h); evas_object_show(name); - file->prop.objects = evas_list_append(file->prop.objects, name); + file->prop.objects = evas_list_append(file->prop.objects, name); e_table_pack(table, name, 1, 6, 1, 1); - e_table_pack_options_set(name, + e_table_pack_options_set(name, 1, 1, 1, 1, /* fill */ 0, 0.5, /* align */ w, h, /* min w, h */ - w, h); /* max w, h */ - + w, h); /* max w, h */ + file->prop.table = table;; file->prop.win = win; file->prop.bg = bg; edje_object_part_swallow(file->prop.bg, "content_swallow", file->prop.table); - + evas_object_show(table); - + e_box_min_size_get(table, &w, &h); evas_object_resize(table, w, h); - + // do proper calculation w += 20; h += 50; - + if (w < 223) w = 223; if (h < 209) h = 209; - + e_win_title_set(win, "Properties"); e_win_resize(win, w, h); e_win_size_min_set(win, w, h); e_win_size_base_set(win, w, h); - e_win_size_max_set(win, w, h); - e_win_show(win); + e_win_size_max_set(win, w, h); + e_win_show(win); } static void -_e_fm_fake_mouse_up_cb (void *data) +_e_fm_fake_mouse_up_cb(void *data) { E_Fileman_Fake_Mouse_Up_Info *info; - + info = data; + if (!info) return; - if (info) - { - evas_event_feed_mouse_up(info->canvas, info->button, EVAS_BUTTON_NONE, ecore_x_current_time_get(), NULL); - free(info); - } + evas_event_feed_mouse_up(info->canvas, info->button, EVAS_BUTTON_NONE, ecore_x_current_time_get(), NULL); + free(info); } - static void -_e_fm_fake_mouse_up_later (Evas *evas, int button) +_e_fm_fake_mouse_up_later(Evas *evas, int button) { E_Fileman_Fake_Mouse_Up_Info *info; - - info = calloc(1, sizeof(E_Fileman_Fake_Mouse_Up_Info)); - - if (info) - { - info->canvas = evas; - info->button = button; - ecore_job_add(_e_fm_fake_mouse_up_cb, info); - } + + info = E_NEW(E_Fileman_Fake_Mouse_Up_Info, 1); + if (!info) return; + + info->canvas = evas; + info->button = button; + ecore_job_add(_e_fm_fake_mouse_up_cb, info); } static void -_e_fileman_fake_mouse_up_all_later (Evas *evas) +_e_fm_fake_mouse_up_all_later(Evas *evas) { - _e_fm_fake_mouse_up_later (evas, 1); - _e_fm_fake_mouse_up_later (evas, 2); - _e_fm_fake_mouse_up_later (evas, 3); + _e_fm_fake_mouse_up_later(evas, 1); + _e_fm_fake_mouse_up_later(evas, 2); + _e_fm_fake_mouse_up_later(evas, 3); } -int -_e_fm_dir_files_sort_name_cb (void *d1, void *d2) +static int +_e_fm_dir_files_sort_name_cb(void *d1, void *d2) { struct dirent *de1, *de2; - - de1 = (struct dirent*) d1; - de2 = (struct dirent*) d2; - - return (strcmp (de1->d_name, de2->d_name)); + + de1 = (struct dirent*)d1; + de2 = (struct dirent*)d2; + + return (strcmp(de1->d_name, de2->d_name)); } -int -_e_fm_dir_files_sort_modtime_cb (void *d1, void *d2) +static int +_e_fm_dir_files_sort_modtime_cb(void *d1, void *d2) { struct dirent *de1, *de2; - - de1 = (struct dirent*) d1; - de2 = (struct dirent*) d2; - - return (strcmp (de1->d_name, de2->d_name)); + + /* FIXME! */ + + de1 = (struct dirent*)d1; + de2 = (struct dirent*)d2; + + return (strcmp(de1->d_name, de2->d_name)); } -static void -_e_fm_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +static void +_e_fm_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { E_Fileman_Smart_Data *sd; Evas_Event_Mouse_Up *ev; sd = data; ev = event_info; - - if(sd->selection.band.enabled) - { - if(!sd->selection.band.obj) - return; - - sd->selection.band.enabled = 0; - evas_object_resize(sd->selection.band.obj, 1, 1); - evas_object_hide(sd->selection.band.obj); - } + + if (!sd->selection.band.obj) + return; + + if (sd->selection.band.enabled) + { + sd->selection.band.enabled = 0; + evas_object_resize(sd->selection.band.obj, 1, 1); + evas_object_hide(sd->selection.band.obj); + } } static void -_e_fm_mouse_move_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +_e_fm_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { E_Fileman_Smart_Data *sd; Evas_Event_Mouse_Move *ev; - + ev = event_info; sd = data; - - if(sd->selection.band.enabled) - { - Evas_Coord x, y, w, h; - Evas_List *objects; - - printf("enabled!!\n"); - - if(!sd->selection.band.obj) - return; - - evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h); - - if(ev->cur.canvas.x > sd->selection.band.x && - ev->cur.canvas.y < sd->selection.band.y) - { - /* growing towards top right */ - evas_object_move(sd->selection.band.obj, - sd->selection.band.x, - ev->cur.canvas.y); - evas_object_resize(sd->selection.band.obj, - ev->cur.canvas.x - sd->selection.band.x, - sd->selection.band.y - ev->cur.canvas.y); - } - else if(ev->cur.canvas.x > sd->selection.band.x && - ev->cur.canvas.y > sd->selection.band.y) - { - /* growing towards bottom right */ - w = ev->cur.canvas.x - sd->selection.band.x; - h = ev->cur.canvas.y - sd->selection.band.y; - - evas_object_resize(sd->selection.band.obj, w, h); - } - else if(ev->cur.canvas.x < sd->selection.band.x && - ev->cur.canvas.y < sd->selection.band.y) - { - /* growing towards top left */ - evas_object_move(sd->selection.band.obj, - ev->cur.canvas.x, - ev->cur.canvas.y); - evas_object_resize(sd->selection.band.obj, - sd->selection.band.x - ev->cur.canvas.x, - sd->selection.band.y - ev->cur.canvas.y); - } - else if(ev->cur.canvas.x < sd->selection.band.x && - ev->cur.canvas.y > sd->selection.band.y) - { - /* growing towards button left */ - evas_object_move(sd->selection.band.obj, - ev->cur.canvas.x, - sd->selection.band.y); - evas_object_resize(sd->selection.band.obj, - sd->selection.band.x - ev->cur.canvas.x, - ev->cur.canvas.y - sd->selection.band.y); - } - - evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h); - _e_fm_selections_add_rect(sd, x, y, w, h); - } + + if (!sd->selection.band.obj) + return; + + if (sd->selection.band.enabled) + { + Evas_Coord x, y, w, h; + + printf("enabled!!\n"); + + evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h); + + if ((ev->cur.canvas.x > sd->selection.band.x) && + (ev->cur.canvas.y < sd->selection.band.y)) + { + /* growing towards top right */ + evas_object_move(sd->selection.band.obj, + sd->selection.band.x, + ev->cur.canvas.y); + evas_object_resize(sd->selection.band.obj, + ev->cur.canvas.x - sd->selection.band.x, + sd->selection.band.y - ev->cur.canvas.y); + } + else if ((ev->cur.canvas.x > sd->selection.band.x) && + (ev->cur.canvas.y > sd->selection.band.y)) + { + /* growing towards bottom right */ + w = ev->cur.canvas.x - sd->selection.band.x; + h = ev->cur.canvas.y - sd->selection.band.y; + + evas_object_resize(sd->selection.band.obj, w, h); + } + else if ((ev->cur.canvas.x < sd->selection.band.x) && + (ev->cur.canvas.y < sd->selection.band.y)) + { + /* growing towards top left */ + evas_object_move(sd->selection.band.obj, + ev->cur.canvas.x, + ev->cur.canvas.y); + evas_object_resize(sd->selection.band.obj, + sd->selection.band.x - ev->cur.canvas.x, + sd->selection.band.y - ev->cur.canvas.y); + } + else if ((ev->cur.canvas.x < sd->selection.band.x) && + (ev->cur.canvas.y > sd->selection.band.y)) + { + /* growing towards button left */ + evas_object_move(sd->selection.band.obj, + ev->cur.canvas.x, + sd->selection.band.y); + evas_object_resize(sd->selection.band.obj, + sd->selection.band.x - ev->cur.canvas.x, + ev->cur.canvas.y - sd->selection.band.y); + } + + evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h); + _e_fm_selections_add_rect(sd, x, y, w, h); + } } -static void -_e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +static void +_e_fm_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { E_Fileman_Smart_Data *sd; Evas_Event_Mouse_Down *ev; E_Menu *mn; E_Menu_Item *mi; int x, y, w, h; - - - ev = (Evas_Event_Mouse_Down *)event_info; + + ev = event_info; sd = data; - - printf("mouse down!!\n"); - - switch(ev->button) - { - case 1: - if(evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control")) - { - - } - else - { - _e_fm_selections_clear(sd); - sd->selection.band.enabled = 1; - evas_object_move(sd->selection.band.obj, ev->canvas.x, ev->canvas.y); - evas_object_resize(sd->selection.band.obj, 1, 1); - evas_object_show(sd->selection.band.obj); - sd->selection.band.x = ev->canvas.x; - sd->selection.band.y = ev->canvas.y; - } - break; - - case 3: - if (!sd->win) return; - - mn = e_menu_new (); - - sd->menu = mn; - - 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(sd->menu); - e_menu_item_label_set(mi, "View"); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/view"), - "fileman/button/view"); - - mn = e_menu_new (); - e_menu_item_submenu_set (mi, mn); - - mi = e_menu_item_new (mn); - e_menu_item_label_set (mi, "Name Only"); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 2); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/view_name"), - "fileman/button/view_name"); - - mi = e_menu_item_new (mn); - e_menu_item_label_set (mi, "Details"); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 2); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/view_details"), - "fileman/button/view_details"); - - - - mi = e_menu_item_new(sd->menu); - e_menu_item_label_set(mi, "Refresh"); - e_menu_item_callback_set (mi, _e_fm_menu_refresh_cb, sd); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/refresh"), - "fileman/button/refresh"); - - mi = e_menu_item_new(sd->menu); - e_menu_item_label_set(mi, "Properties"); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/properties"), - "fileman/button/properties"); - - ecore_evas_geometry_get (sd->win->ecore_evas, &x, &y, &w, &h); - - e_menu_activate_mouse(sd->menu, sd->win->border->zone, - ev->output.x + x, ev->output.y + y, 1, 1, - E_MENU_POP_DIRECTION_DOWN,ev->timestamp); - _e_fileman_fake_mouse_up_all_later (sd->win->evas); - break; - } + + printf("mouse down!!\n"); + + switch (ev->button) + { + case 1: + if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control")) + { + + } + else + { + _e_fm_selections_clear(sd); + sd->selection.band.enabled = 1; + evas_object_move(sd->selection.band.obj, ev->canvas.x, ev->canvas.y); + evas_object_resize(sd->selection.band.obj, 1, 1); + evas_object_show(sd->selection.band.obj); + sd->selection.band.x = ev->canvas.x; + sd->selection.band.y = ev->canvas.y; + } + break; + + case 3: + if (!sd->win) break; + + mn = e_menu_new(); + + sd->menu = mn; + + 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(sd->menu); + e_menu_item_label_set(mi, "View"); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/view"), + "fileman/button/view"); + + mn = e_menu_new(); + e_menu_item_submenu_set(mi, mn); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Name Only"); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/view_name"), + "fileman/button/view_name"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Details"); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 2); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/view_details"), + "fileman/button/view_details"); + + mi = e_menu_item_new(sd->menu); + e_menu_item_label_set(mi, "Refresh"); + e_menu_item_callback_set(mi, _e_fm_menu_refresh_cb, sd); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/refresh"), + "fileman/button/refresh"); + + mi = e_menu_item_new(sd->menu); + e_menu_item_label_set(mi, "Properties"); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/properties"), + "fileman/button/properties"); + + ecore_evas_geometry_get(sd->win->ecore_evas, &x, &y, &w, &h); + + e_menu_activate_mouse(sd->menu, sd->win->border->zone, + ev->output.x + x, ev->output.y + y, 1, 1, + E_MENU_POP_DIRECTION_DOWN, ev->timestamp); + _e_fm_fake_mouse_up_all_later(sd->win->evas); + break; + } } - - static void -_e_fm_file_icon_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +_e_fm_file_icon_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { - E_Fileman *fileman; E_Fileman_File *file; Evas_Event_Mouse_Move *ev; - - ev = (Evas_Event_Mouse_Move *)event_info; + + ev = event_info; file = data; - + file->sd->drag.start = 0; } -// TODO: +// TODO: // - send signals to edje for animations etc... // - look at case where we have // and no / static void -_e_fm_file_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +_e_fm_file_icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { - E_Fileman *fileman; E_Fileman_File *file; Evas_Event_Mouse_Down *ev; - - ev = (Evas_Event_Mouse_Down *)event_info; + + ev = event_info; file = data; - + if (ev->button == 1) - { - if (file->dir_entry->d_type == 4 && ev->flags == EVAS_BUTTON_DOUBLE_CLICK) - { - char *fullname; - int size; - - if (!strcmp (file->dir_entry->d_name, ".")) - return; - - if (!strcmp (file->dir_entry->d_name, "..")) - { - fullname = _e_fm_dir_pop (file->sd->dir); - } else { - - size = strlen (file->sd->dir) + strlen (file->dir_entry->d_name) + 4; - fullname = calloc (size, sizeof (char)); - if (strcmp (file->sd->dir, "/")) - snprintf (fullname, size, "%s/%s", file->sd->dir, file->dir_entry->d_name); - else - snprintf (fullname, size - 3, "%s%s", file->sd->dir, file->dir_entry->d_name); - } - - /* we need to fix this, uber hack alert */ - if(file->sd->win) - e_win_title_set (file->sd->win, fullname); - _e_fm_dir_set(file->sd, fullname); - free(fullname); - } else if (file->dir_entry->d_type == 8 && ev->flags == EVAS_BUTTON_DOUBLE_CLICK) - { - char *fullname; - int size; - - fullname = _e_fm_file_fullname(file); - if (ecore_file_can_exec (fullname)) - _e_fm_file_exec(file); - free(fullname); - } + { + if ((file->dir_entry->d_type == 4) && (ev->flags == EVAS_BUTTON_DOUBLE_CLICK)) + { + char *fullname; + + file->sd->drag.start = 0; + + if (!strcmp(file->dir_entry->d_name, ".")) return; + + if (!strcmp(file->dir_entry->d_name, "..")) + { + fullname = _e_fm_dir_pop(file->sd->dir); + } + else + { + char path[PATH_MAX]; + if (!strcmp(file->sd->dir, "/")) + snprintf(fullname, sizeof(path), "/%s", file->dir_entry->d_name); + else + snprintf(fullname, sizeof(path), "%s/%s", file->sd->dir, file->dir_entry->d_name); + fullname = strdup(path); + } + + /* FIXME: we need to fix this, uber hack alert */ + if (fullname) + { + if (file->sd->win) + e_win_title_set(file->sd->win, fullname); + _e_fm_dir_set(file->sd, fullname); + free(fullname); + } + } + else if ((file->dir_entry->d_type == 8) && (ev->flags == EVAS_BUTTON_DOUBLE_CLICK)) + { + char *fullname; + + file->sd->drag.start = 0; + + fullname = _e_fm_file_fullname(file); + if (ecore_file_can_exec(fullname)) + _e_fm_file_exec(file); + free(fullname); + } else - { - file->sd->drag.start = 1; - file->sd->drag.y = -1; - file->sd->drag.x = -1; - file->sd->drag.file = file; - printf("drag file: %s\n", file->dir_entry->d_name); - - if(!file->state.clicked) - { - if(evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control")) - file->sd->selection.files = evas_list_append(file->sd->selection.files, - file); - else - _e_fm_selections_clear(file->sd); - - _e_fm_selections_add(file); - } - else - { - if(evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control")) - _e_fm_selections_del(file); - else - { + { + file->sd->drag.start = 1; + file->sd->drag.y = -1; + file->sd->drag.x = -1; + file->sd->drag.file = file; + printf("drag file: %s\n", file->dir_entry->d_name); + +#if 0 + if (!file->state.clicked) + { + if (evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control")) + file->sd->selection.files = + evas_list_append(file->sd->selection.files, file); + else _e_fm_selections_clear(file->sd); - _e_fm_selections_add(file); - } - } - } + + _e_fm_selections_add(file); + } + else + { + if (evas_key_modifier_is_set(evas_key_modifier_get(file->sd->evas), "Control")) + _e_fm_selections_del(file); + else + { + _e_fm_selections_clear(file->sd); + _e_fm_selections_add(file); + } + } +#endif + } } - else if (ev->button == 3) { - { - E_Menu *mn; - E_Menu_Item *mi; - int x, y, w, h; - - mn = e_menu_new (); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Open"); - e_menu_item_callback_set (mi, _e_fm_file_menu_open, file); - 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_separator_set(mi, 1); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Copy"); - e_menu_item_callback_set (mi, _e_fm_file_menu_copy, file); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/copy"), - "fileman/button/copy"); - - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Cut"); - e_menu_item_callback_set (mi, _e_fm_file_menu_cut, file); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/cut"), - "fileman/button/cut"); - - mi = e_menu_item_new(mn); - e_menu_item_separator_set(mi, 1); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Rename"); - e_menu_item_callback_set (mi, _e_fm_file_menu_rename, file); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/rename"), - "fileman/button/rename"); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Delete"); - e_menu_item_callback_set (mi, _e_fm_file_menu_delete, file); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/delete"), - "fileman/button/delete"); - - mi = e_menu_item_new(mn); - e_menu_item_separator_set(mi, 1); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Properties"); - e_menu_item_callback_set (mi, _e_fm_file_menu_properties, file); - e_menu_item_icon_edje_set(mi, - (char *)e_theme_edje_file_get("base/theme/fileman", - "fileman/button/properties"), - "fileman/button/properties"); - - file->menu = mn; - - if(!file->sd->win) return; - - ecore_evas_geometry_get (file->sd->win->ecore_evas, &x, &y, &w, &h); - - e_menu_activate_mouse(file->menu, file->sd->win->border->zone, - ev->output.x + x, ev->output.y + y, 1, 1, - E_MENU_POP_DIRECTION_DOWN,ev->timestamp); - _e_fileman_fake_mouse_up_all_later (file->sd->win->evas); - } - } + else if (ev->button == 3) + { + E_Menu *mn; + E_Menu_Item *mi; + int x, y, w, h; + + mn = e_menu_new(); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Open"); + e_menu_item_callback_set(mi, _e_fm_file_menu_open, file); + 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_separator_set(mi, 1); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Copy"); + e_menu_item_callback_set(mi, _e_fm_file_menu_copy, file); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/copy"), + "fileman/button/copy"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Cut"); + e_menu_item_callback_set(mi, _e_fm_file_menu_cut, file); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/cut"), + "fileman/button/cut"); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Rename"); + e_menu_item_callback_set(mi, _e_fm_file_menu_rename, file); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/rename"), + "fileman/button/rename"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Delete"); + e_menu_item_callback_set(mi, _e_fm_file_menu_delete, file); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/delete"), + "fileman/button/delete"); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, "Properties"); + e_menu_item_callback_set(mi, _e_fm_file_menu_properties, file); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/properties"), + "fileman/button/properties"); + + file->menu = mn; + + if (!file->sd->win) return; + + ecore_evas_geometry_get(file->sd->win->ecore_evas, &x, &y, &w, &h); + + e_menu_activate_mouse(file->menu, file->sd->win->border->zone, + ev->output.x + x, ev->output.y + y, 1, 1, + E_MENU_POP_DIRECTION_DOWN, ev->timestamp); + _e_fm_fake_mouse_up_all_later(file->sd->win->evas); + } } static void -_e_fm_file_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +_e_fm_file_icon_mouse_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { E_Fileman_File *file; Evas_Event_Mouse_In *ev; - - ev = (Evas_Event_Mouse_In *)event_info; + + ev = event_info; file = data; - + edje_object_signal_emit(file->icon, "hilight", ""); - edje_object_signal_emit(file->icon_img, "hilight", ""); + edje_object_signal_emit(file->icon_img, "hilight", ""); } static void -_e_fm_file_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info) +_e_fm_file_icon_mouse_out_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { E_Fileman_File *file; Evas_Event_Mouse_Out *ev; - - ev = (Evas_Event_Mouse_Out *)event_info; + + ev = event_info; file = data; - + edje_object_signal_emit(file->icon, "default", ""); - edje_object_signal_emit(file->icon_img, "default", ""); + edje_object_signal_emit(file->icon_img, "default", ""); } static void -_e_fm_menu_arrange_cb (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_menu_arrange_cb(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_Smart_Data *sd; - + sd = data; - - 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_dir_files_sort_name_cb); - sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME; - _e_fm_redraw_new (sd); // no_new - break; - - case E_FILEMAN_CANVAS_ARRANGE_MODTIME: - sd->files = evas_list_sort (sd->files, evas_list_count (sd->files), _e_fm_dir_files_sort_modtime_cb); - sd->arrange = E_FILEMAN_CANVAS_ARRANGE_MODTIME; - _e_fm_redraw_new (sd); // no new - break; - } + + 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_dir_files_sort_name_cb); + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME; + _e_fm_redraw_new(sd); // no_new + break; + + case E_FILEMAN_CANVAS_ARRANGE_MODTIME: + sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_dir_files_sort_modtime_cb); + sd->arrange = E_FILEMAN_CANVAS_ARRANGE_MODTIME; + _e_fm_redraw_new(sd); // no new + break; + } } - + static void - _e_fileman_drop_cb(E_Drag *drag, int dropped) -{ +_e_fm_drop_cb(E_Drag *drag, int dropped) +{ /* FIXME: If someone takes this internal drop, we might want to not free it */ free(drag->data); } - - // TODO: add images for icons with image thumb and not edje part static int -_e_fm_win_mouse_move_cb (void *data, int type, void *event) +_e_fm_win_mouse_move_cb(void *data, int type, void *event) { E_Fileman_Smart_Data *sd; E_Fileman_File *file; Ecore_X_Event_Mouse_Move *ev; - + ev = event; sd = data; file = sd->drag.file; - + if (!file) return 1; - + if (sd->drag.start) - { - if ((sd->drag.x == -1) && (sd->drag.y == -1)) - { - sd->drag.x = ev->root.x; - sd->drag.y = ev->root.y; - } - else - { - int dx, dy; - - dx = sd->drag.x - ev->root.x; - dy = sd->drag.y - ev->root.y; - - if (((dx * dx) + (dy * dy)) > (100)) - { - E_Drag *drag; - Evas_Object *o = NULL, *o2 = NULL; - Evas_Coord x, y, w, h; - int cx, cy; - char data[PATH_MAX]; - const char *path = NULL, *part = NULL; - const char *drop_types[] = { "text/uri-list" }; - - snprintf(data, sizeof(data), "file://%s/%s", sd->dir, file->dir_entry->d_name); - - ecore_evas_geometry_get(sd->win->ecore_evas, &cx, &cy, NULL, NULL); - evas_object_geometry_get(file->icon_img, &x, &y, &w, &h); - drag = e_drag_new(sd->win->container, cx + x, cy + y, - drop_types, 1, strdup(data), strlen(data), - _e_fileman_drop_cb); - - edje_object_file_get(file->icon_img, &path, &part); - if ((path) && (part)) - { - o = edje_object_add(drag->evas); - edje_object_file_set(o, path, part); - } - else - { - int iw, ih; - void *data; - Evas *evas; - - o = evas_object_image_add (drag->evas); - evas_object_image_size_get(file->icon_img, &iw, &ih); - evas_object_image_size_set(o, iw, ih); - evas_object_image_data_copy_set(o, evas_object_image_data_get(file->icon_img, 0)); - evas_object_image_data_update_add(o, 0, 0, iw, ih); - evas_object_image_fill_set(o, 0, 0, iw, ih); - evas_object_resize(o, iw, ih); - } - if (!o) - { - /* FIXME: fallback icon for drag */ - o = evas_object_rectangle_add(drag->evas); - evas_object_color_set(o, 255, 255, 255, 255); - } - e_drag_object_set(drag, o); - - e_drag_resize(drag, w, h); - e_drag_xdnd_start(drag, sd->drag.x, sd->drag.y); - evas_event_feed_mouse_up(sd->evas, 1, EVAS_BUTTON_NONE,ev->time, - NULL); - sd->drag.start = 0; - } - } - } - + { + if ((sd->drag.x == -1) && (sd->drag.y == -1)) + { + sd->drag.x = ev->root.x; + sd->drag.y = ev->root.y; + } + else + { + int dx, dy; + + dx = sd->drag.x - ev->root.x; + dy = sd->drag.y - ev->root.y; + + if (((dx * dx) + (dy * dy)) > (100)) + { + E_Drag *drag; + Evas_Object *o = NULL; + Evas_Coord x, y, w, h; + int cx, cy; + char data[PATH_MAX]; + const char *path = NULL, *part = NULL; + const char *drop_types[] = { "text/uri-list" }; + + snprintf(data, sizeof(data), "file://%s/%s", sd->dir, file->dir_entry->d_name); + + ecore_evas_geometry_get(sd->win->ecore_evas, &cx, &cy, NULL, NULL); + evas_object_geometry_get(file->icon_img, &x, &y, &w, &h); + drag = e_drag_new(sd->win->container, cx + x, cy + y, + drop_types, 1, strdup(data), strlen(data), + _e_fm_drop_cb); + + edje_object_file_get(file->icon_img, &path, &part); + if ((path) && (part)) + { + o = edje_object_add(drag->evas); + edje_object_file_set(o, path, part); + } + else + { + int iw, ih; + + o = evas_object_image_add(drag->evas); + evas_object_image_size_get(file->icon_img, &iw, &ih); + evas_object_image_size_set(o, iw, ih); + evas_object_image_data_copy_set(o, evas_object_image_data_get(file->icon_img, 0)); + evas_object_image_data_update_add(o, 0, 0, iw, ih); + evas_object_image_fill_set(o, 0, 0, iw, ih); + evas_object_resize(o, iw, ih); + } + if (!o) + { + /* FIXME: fallback icon for drag */ + o = evas_object_rectangle_add(drag->evas); + evas_object_color_set(o, 255, 255, 255, 255); + } + e_drag_object_set(drag, o); + + e_drag_resize(drag, w, h); + e_drag_xdnd_start(drag, sd->drag.x, sd->drag.y); + evas_event_feed_mouse_up(sd->evas, 1, EVAS_BUTTON_NONE, ev->time, NULL); + sd->drag.start = 0; + } + } + } + return 1; } static int -_e_fm_drop_enter_cb (void *data, int type, void *event) +_e_fm_drop_enter_cb(void *data, int type, void *event) { Ecore_X_Event_Xdnd_Enter *ev; E_Fileman_Smart_Data *sd; - /* TODO Only accept on our win! */ - ev = event; sd = data; + if (ev->win != sd->win->evas_win) return 1; return 1; } static int -_e_fm_drop_move_cb (void *data, int type, void *event) -{ - return 1; -} - -static int -_e_fm_drop_leave_cb (void *data, int type, void *event) +_e_fm_drop_leave_cb(void *data, int type, void *event) { Ecore_X_Event_Xdnd_Leave *ev; E_Fileman_Smart_Data *sd; - - /* TODO Only accept on our win! */ - - ev = event; - sd = data; - + + ev = event; + sd = data; + if (ev->win != sd->win->evas_win) return 1; + return 1; } static int -_e_fm_drop_position_cb (void *data, int type, void *event) +_e_fm_drop_position_cb(void *data, int type, void *event) { + Ecore_X_Event_Xdnd_Position *ev; + E_Fileman_Smart_Data *sd; Ecore_X_Rectangle rect; - + + ev = event; + sd = data; + if (ev->win != sd->win->evas_win) return 1; + rect.x = 0; rect.y = 0; rect.width = 0; rect.height = 0; - - ecore_x_dnd_send_status(1, 0, rect, ECORE_X_DND_ACTION_PRIVATE); - + + ecore_x_dnd_send_status(1, 0, rect, ECORE_X_DND_ACTION_PRIVATE); + return 1; } static int -_e_fm_drop_selection_cb (void *data, int type, void *event) +_e_fm_drop_drop_cb(void *data, int type, void *event) { - - Ecore_X_Event_Selection_Notify *ev; + Ecore_X_Event_Xdnd_Drop *ev; E_Fileman_Smart_Data *sd; - Ecore_X_Selection_Data_Files *files; - int i; - - /* TODO Only accept on our win! */ - + ev = event; sd = data; - - files = ev->data; - - for (i = 0; i < files->num_files; i++) - { - char new_file[PATH_MAX]; - - snprintf (new_file, PATH_MAX, "%s/%s", sd->dir, - ecore_file_get_file (files->files[i])); - ecore_file_cp (strstr (files->files[i],"/"), new_file); - } - - ecore_x_dnd_send_finished(); - _e_fm_redraw_new (sd); - - return 1; -} + if (ev->win != sd->win->evas_win) return 1; -static int -_e_fm_drop_drop_cb (void *data, int type, void *event) -{ - Ecore_X_Event_Xdnd_Enter *ev; - E_Fileman_Smart_Data *sd; - - /* TODO Only accept on our win! */ - - ev = event; - sd = data; - ecore_x_selection_xdnd_request(sd->win->evas_win, "text/uri-list"); return 1; } +static int +_e_fm_drop_selection_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Selection_Notify *ev; + E_Fileman_Smart_Data *sd; + Ecore_X_Selection_Data_Files *files; + int i; + + ev = event; + sd = data; + if (ev->win != sd->win->evas_win) return 1; + + files = ev->data; + + for (i = 0; i < files->num_files; i++) + { + char new_file[PATH_MAX]; + + snprintf(new_file, PATH_MAX, "%s/%s", sd->dir, + ecore_file_get_file(files->files[i])); + ecore_file_cp(strstr(files->files[i], "/"), new_file); + } + + ecore_x_dnd_send_finished(); + _e_fm_redraw_new(sd); + + return 1; +} + static void -_e_fm_menu_refresh_cb (void *data, E_Menu *m, E_Menu_Item *mi) +_e_fm_menu_refresh_cb(void *data, E_Menu *m, E_Menu_Item *mi) { E_Fileman_Smart_Data *sd; - + sd = data; // optimize!! - _e_fm_redraw_new (sd); + _e_fm_redraw_new(sd); } static int -_e_fm_grabbed_mouse_up_cb (void *data, int type, void *event) +_e_fm_grabbed_mouse_up_cb(void *data, int type, void *event) { Ecore_X_Event_Mouse_Button_Up *ev; double t; E_Fileman_File *file; const char *name; - - ev = (Ecore_X_Event_Mouse_Button_Up*)event; + + ev = event; file = data; - - t = ecore_time_get() - _e_fileman_grab_time; - + + t = ecore_time_get() - _e_fm_grab_time; + if (t < 1.0) return 1; - - name = e_entry_text_get (file->entry); - edje_object_part_unswallow (file->icon, file->entry); - evas_object_focus_set (file->entry, 0); - evas_object_del (file->entry); + + name = e_entry_text_get(file->entry); + edje_object_part_unswallow(file->icon, file->entry); + evas_object_focus_set(file->entry, 0); + evas_object_del(file->entry); file->entry = NULL; - - _e_fm_file_rename (file, name); - - ecore_event_handler_del (_e_fileman_mouse_up_handler); - - e_grabinput_release(ecore_evas_software_x11_window_get (file->sd->win->ecore_evas), - ecore_evas_software_x11_window_get (file->sd->win->ecore_evas)); + + _e_fm_file_rename(file, name); + + ecore_event_handler_del(_e_fm_mouse_up_handler); + + e_grabinput_release(file->sd->win->evas_win, file->sd->win->evas_win); return 0; } -const char * +static char * _e_fm_file_thumb_path_get(char *file) { - char* id; - char *thumb; - thumb = calloc(PATH_MAX, sizeof(char)); + char *id; + char thumb[PATH_MAX]; id = _e_fm_file_id(file); - snprintf(thumb, PATH_MAX, "%s/%s", thumb_path, id); + snprintf(thumb, sizeof(thumb), "%s/%s", thumb_path, id); free(id); - return thumb; + return strdup(thumb); } -Evas_Bool +static Evas_Bool _e_fm_file_thumb_exists(char *file) { char *thumb; Evas_Bool ret; - + thumb = _e_fm_file_thumb_path_get(file); ret = ecore_file_exists(thumb); free(thumb); - + return ret; } -Evas_Bool +static Evas_Bool _e_fm_file_thumb_create(char *file) { Eet_File *ef; - char *thumbpath, *fullname; + char *thumbpath; Evas_Object *im; - void *data; - Evas_Coord w, h; + const int *data; int size; Ecore_Evas *buf; Evas *evasbuf; - + + ef = eet_open(thumbpath, EET_FILE_MODE_WRITE); + if (!ef) return -1; + // we need to remove the hardcode somehow. //buf = ecore_evas_buffer_new(file->sd->icon_info.w,file->sd->icon_info.h); buf = ecore_evas_buffer_new(48, 48); - evasbuf = ecore_evas_get(buf); + evasbuf = ecore_evas_get(buf); im = evas_object_image_add(evasbuf); evas_object_image_file_set(im, file, NULL); evas_object_image_fill_set(im, 0, 0, 48, 48); evas_object_resize(im, 48, 48); evas_object_show(im); data = ecore_evas_buffer_pixels_get(buf); - + thumbpath = _e_fm_file_thumb_path_get(file); - ef = eet_open(thumbpath, EET_FILE_MODE_WRITE); - if(!ef) return -1; - - if((size = eet_data_image_write(ef, "/thumbnail/data", data, 48, 48, 1, 0, 70, 1))<0) - return FALSE; - + if ((size = eet_data_image_write(ef, "/thumbnail/data", (void *)data, 48, 48, 1, 0, 70, 1)) < 0) + { + printf("BUG: Couldn't write thumb db\n"); + } + free(thumbpath); + eet_close(ef); - - //free(thumbpath); - - ecore_evas_free(buf); - return TRUE; + + ecore_evas_free(buf); + return 1; } -Evas_Object * -_e_fm_file_thumb_get (E_Fileman_File *file) +static Evas_Object * +_e_fm_file_thumb_get(E_Fileman_File *file) { Eet_File *ef; char *thumb, *fullname; - Evas_Object *im; - int num, size; + Evas_Object *im = NULL; void *data; unsigned int w, h; - int a, c, q, l; - - im = NULL; - - fullname = _e_fm_file_fullname(file); - - if(!_e_fm_file_thumb_exists(fullname)) - _e_fm_file_thumb_create(fullname); - - thumb = _e_fm_file_thumb_path_get(fullname); + int a, c, q, l; + ef = eet_open(thumb, EET_FILE_MODE_READ); - if (!ef) return NULL; - + + fullname = _e_fm_file_fullname(file); + if (!_e_fm_file_thumb_exists(fullname)) + _e_fm_file_thumb_create(fullname); + + thumb = _e_fm_file_thumb_path_get(fullname); + data = eet_data_image_read(ef, "/thumbnail/data", &w, &h, &a, &c, &q, &l); - if(data) + if (data) { im = evas_object_image_add(file->sd->evas); evas_object_image_alpha_set(im, 0); evas_object_image_size_set(im, w, h); - evas_object_image_smooth_scale_set(im, 0); + evas_object_image_smooth_scale_set(im, 0); evas_object_image_data_copy_set(im, data); - evas_object_image_data_update_add(im, 0, 0, w, h); + evas_object_image_data_update_add(im, 0, 0, w, h); evas_object_image_fill_set(im, 0, 0, w, h); evas_object_resize(im, w, h); + free(data); } eet_close(ef); - free(thumb); + free(fullname); + free(thumb); return im; } -static E_Fileman_File_Type +static E_Fileman_File_Type _e_fm_file_type(E_Fileman_File *file) { - switch(file->dir_entry->d_type) - { - case 8: - return E_FILEMAN_FILETYPE_DIRECTORY; - case 4: - return E_FILEMAN_FILETYPE_FILE; - default: - return E_FILEMAN_FILETYPE_UNKNOWN; - } + switch (file->dir_entry->d_type) + { + case 8: + return E_FILEMAN_FILETYPE_DIRECTORY; + case 4: + return E_FILEMAN_FILETYPE_FILE; + default: + return E_FILEMAN_FILETYPE_UNKNOWN; + } } static void @@ -2773,51 +2624,50 @@ _e_fm_file_exec(E_Fileman_File *file) { Ecore_Exe *exe; char *fullname; - + fullname = _e_fm_file_fullname(file); exe = ecore_exe_run(fullname, NULL); if (!exe) - { - e_error_dialog_show(_("Run Error"), - _("Enlightenment was unable fork a child process:\n" - "\n" - "%s\n" - "\n"), - fullname); - free(fullname); - return; - } + { + e_error_dialog_show(_("Run Error"), + _("Enlightenment was unable fork a child process:\n" + "\n" + "%s\n" + "\n"), + fullname); + free(fullname); + return; + } ecore_exe_tag_set(exe, "E/app"); free(fullname); } - - + static char * _e_fm_file_fullname(E_Fileman_File *file) { - char *fullname; - + char *fullname; + fullname = E_NEW(char, PATH_MAX); - snprintf(fullname, PATH_MAX, "%s/%s", file->sd->dir, file->dir_entry->d_name); - + if (fullname) + snprintf(fullname, PATH_MAX, "%s/%s", file->sd->dir, file->dir_entry->d_name); + return fullname; } - + static char * _e_fm_file_id(char *file) { - char s[256]; const char *chmap = "0123456789abcdefghijklmnopqrstuvwxyz-_"; int id[2]; - struct stat st; - + struct stat st; + if (stat(file, &st) < 0) return NULL; id[0] = (int)st.st_ino; id[1] = (int)st.st_dev; - + sprintf(s, "%c%c%c%c%c%c" "%c%c%c%c%c%c", @@ -2832,6 +2682,6 @@ _e_fm_file_id(char *file) chmap[(id[1] >> 12) & 0x3f], chmap[(id[1] >> 18) & 0x3f], chmap[(id[1] >> 24) & 0x3f], chmap[(id[1] >> 28) & 0x3f]); - + return strdup(s); } diff --git a/src/bin/e_fileman_smart.h b/src/bin/e_fileman_smart.h index 88d756685..b08204f5f 100644 --- a/src/bin/e_fileman_smart.h +++ b/src/bin/e_fileman_smart.h @@ -8,13 +8,14 @@ #define E_FM_SMART_H EAPI Evas_Object *e_fm_add(Evas *evas); -EAPI char *e_fm_dir_get(Evas_Object *object); EAPI void e_fm_dir_set(Evas_Object *object, const char *dir); +EAPI char *e_fm_dir_get(Evas_Object *object); EAPI void e_fm_e_win_set(Evas_Object *object, E_Win *win); EAPI E_Win *e_fm_e_win_get(Evas_Object *object); EAPI void e_fm_menu_set(Evas_Object *object, E_Menu *menu); EAPI E_Menu *e_fm_menu_get(Evas_Object *object); EAPI void e_fm_scroll_horizontal(Evas_Object *object, double percent); EAPI void e_fm_scroll_vertical(Evas_Object *object, double percent); + #endif #endif diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index df654bb42..7e7f2a95b 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -144,10 +144,12 @@ e_int_menus_main_new(void) e_menu_item_callback_set(mi, _e_int_menus_main_run, NULL); } +#if 0 mi = e_menu_item_new(m); e_menu_item_label_set(mi, _("File Manager")); e_util_menu_item_edje_icon_set(mi, "enlightenment/fileman"); e_menu_item_callback_set(mi, _e_int_menus_main_fm, NULL); +#endif subm = e_int_menus_config_new(); dat->config = subm;