Cleanup, and disable. Seems to be some weird things going on.
authorsebastid <sebastid>
Mon, 10 Oct 2005 19:27:22 +0000 (19:27 +0000)
committersebastid <sebastid@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 10 Oct 2005 19:27:22 +0000 (19:27 +0000)
SVN revision: 17398

src/bin/e_fileman_smart.c
src/bin/e_fileman_smart.h
src/bin/e_int_menus.c

index 7aec0d9..1540233 100644 (file)
@@ -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;
-   
-   return strdup(sd->dir);
+
+   _e_fm_dir_set(sd, dir);
 }
 
-void
-e_fm_dir_set (Evas_Object *object, const char *dir)
+char *
+e_fm_dir_get(Evas_Object *object)
 {
    E_Fileman_Smart_Data *sd;
-   
+
    if ((!object) || !(sd = evas_object_smart_data_get(object)))
-     return;   
-   
-   _e_fm_dir_set(sd, dir);
+     return NULL;
+
+   return strdup(sd->dir);
 }
 
 void
-e_fm_e_win_set (Evas_Object *object, E_Win *win)
+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);
-   
+   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;
-
-      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;
-   }   
+     {
+       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;
+
+       file = l->data;
+       evas_object_stack_above(file->icon, sd->bg);
+     }
+}
 
 static void
-_e_fm_smart_move (Evas_Object *object, Evas_Coord x, Evas_Coord y)
+_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
+
+   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_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);
+
+   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'");
-
-         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);
-       }
+     {
+       struct dirent *dir_entry;
+       int icon_w, icon_h;
+       Evas_Object *icon;
+
+       if (y > (yo + h)) break;
+
+       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)
+static void
+_e_fm_size_calc(E_Fileman_Smart_Data *sd)
 {
    Evas_List *dirs = NULL;
-   Evas_Coord x, y, w, h;   
+   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);
-   
+
+   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 = 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);
+
    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;      
-   }      
-   
+     {
+       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)
-{
-   Evas_List *dirs = NULL;
-   Evas_Coord x, y, w, h;
-   Evas_Coord xo, yo;
-   
-   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;
-      
-   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;
-   }   
-}
-
-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);
-       
-    }
+     {
+       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)   
+
+   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);
-   
+   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';
+   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;
-}
-
-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)
+   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;
+}
+
+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  <br><b>%s</b> ?", 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;   
-
-   //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);
-
-   if (!icon_img)         
-     return NULL;      
-   
-   e_icon_file_set (icon_img, preview);
-   return icon_img;
+   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 = E_NEW(char, PATH_MAX + 256);
+       snprintf(text, PATH_MAX + 256, "Could not delete  <br><b>%s</b> ?", file->dir_entry->d_name);
+       e_dialog_text_set(dia, text);
+
+       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 <br><b>%s</b> ?", 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 <br><b>%s</b> ?", 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);
-    }      
-}
-
-static void 
-_e_fm_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
+
+   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)
 {
    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;
+
+   ev = event;
+   sd = data;
+   if (ev->win != sd->win->evas_win) return 1;
+
+   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;
-   
-   /* TODO Only accept on our win! */   
-   
+
    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);
+
+       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 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");
+   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;
-   
+   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))
+   if (!_e_fm_file_thumb_exists(fullname))
      _e_fm_file_thumb_create(fullname);
-   
+
    thumb = _e_fm_file_thumb_path_get(fullname);
-   ef = eet_open(thumb, EET_FILE_MODE_READ);
-   
-   if (!ef) return NULL;
-      
+
    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\80\81\82\83\84\85\86\87\88\8a\8b\8c\8d\8e\8f\90\91\92\93\9d-_";
    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);
 }
index 88d7566..b08204f 100644 (file)
@@ -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
index df654bb..7e7f2a9 100644 (file)
@@ -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;