2005-10-09 17:55:07 -07:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
#include "e.h"
|
|
|
|
#include <sys/types.h>
|
2005-10-12 06:31:20 -07:00
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <time.h>
|
2005-10-09 18:38:47 -07:00
|
|
|
#include <dirent.h>
|
2005-10-09 17:55:07 -07:00
|
|
|
#include <pwd.h>
|
|
|
|
#include <grp.h>
|
2005-11-07 16:00:30 -08:00
|
|
|
#include <regex.h>
|
2005-10-09 17:55:07 -07:00
|
|
|
|
|
|
|
/* TODO:
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-18 09:14:45 -07:00
|
|
|
* - add ability to have icons on desktop (this works, but we need some fixes)
|
|
|
|
* files should go on ~/.e/e/desktop for example.
|
|
|
|
*
|
2005-10-11 06:23:54 -07:00
|
|
|
* - when we select multiple items, the right click menu on the icons needs
|
|
|
|
* to display some group related things and its actions need to work
|
|
|
|
* on the group.
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
* - 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.
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
* - add typebuffer like in evidence.
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
* - keyboard shortcuts for directory and file navigation.
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
* - allow for icon movement inside the canvas
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
* - add metadata system which allows us to save icon positions and will
|
|
|
|
* eventually allow us to have custom icon sizes, custom bgs per dir...
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
* - 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.
|
2005-10-10 12:27:22 -07:00
|
|
|
*
|
2005-10-09 17:55:07 -07:00
|
|
|
*/
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* BUGS:
|
2005-10-23 08:18:47 -07:00
|
|
|
*
|
2005-10-21 19:07:39 -07:00
|
|
|
* - we need to look at the deletion / free'ing routines.
|
2005-10-23 08:18:47 -07:00
|
|
|
*
|
2005-10-20 15:29:57 -07:00
|
|
|
* - Closing Efm window while its thumbnailing causes a segv
|
2005-10-23 08:18:47 -07:00
|
|
|
*
|
2005-10-20 06:08:51 -07:00
|
|
|
* - Deleting a dir causes a segv
|
2005-10-23 08:18:47 -07:00
|
|
|
*
|
2005-10-23 06:08:51 -07:00
|
|
|
* - redo monitor code (incremental changes)
|
2005-10-20 06:08:51 -07:00
|
|
|
*/
|
|
|
|
|
2005-10-19 04:37:30 -07:00
|
|
|
int E_EVENT_FM_RECONFIGURE;
|
2005-10-20 06:08:51 -07:00
|
|
|
int E_EVENT_FM_DIRECTORY_CHANGE;
|
2005-10-19 04:37:30 -07:00
|
|
|
|
2005-10-12 06:31:20 -07:00
|
|
|
#ifdef EFM_DEBUG
|
|
|
|
# define D(x) do {printf(__FILE__ ":%d: ", __LINE__); printf x; fflush(stdout);} while (0)
|
|
|
|
#else
|
|
|
|
# define D(x) ((void) 0)
|
|
|
|
#endif
|
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
typedef struct _E_Fm_Smart_Data E_Fm_Smart_Data;
|
2005-10-20 06:08:51 -07:00
|
|
|
typedef struct _E_Fm_Icon E_Fm_Icon;
|
2005-10-18 09:14:45 -07:00
|
|
|
typedef struct _E_Fm_Icon_CFData E_Fm_Icon_CFData;
|
|
|
|
typedef struct _E_Fm_Config E_Fm_Config;
|
|
|
|
typedef struct _E_Fm_Fake_Mouse_Up_Info E_Fm_Fake_Mouse_Up_Info;
|
|
|
|
typedef enum _E_Fm_Arrange E_Fm_Arrange;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
2005-10-12 10:01:27 -07:00
|
|
|
struct _E_Fm_Config
|
|
|
|
{
|
|
|
|
int width;
|
|
|
|
int height;
|
|
|
|
};
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
struct _E_Fm_Icon
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_File *file;
|
|
|
|
Evas_Object *icon_object;
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
struct {
|
|
|
|
unsigned char selected : 1;
|
|
|
|
} state;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Menu *menu;
|
2005-10-09 17:55:07 -07:00
|
|
|
};
|
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
struct _E_Fm_Icon_CFData
|
|
|
|
{
|
|
|
|
/*- BASIC -*/
|
|
|
|
int protect;
|
|
|
|
int readwrite;
|
|
|
|
/*- ADVANCED -*/
|
|
|
|
struct {
|
|
|
|
int r;
|
|
|
|
int w;
|
|
|
|
int x;
|
|
|
|
} user, group, world;
|
|
|
|
/*- common -*/
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
};
|
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
enum _E_Fm_Arrange
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
E_FILEMAN_CANVAS_ARRANGE_NAME = 0,
|
|
|
|
E_FILEMAN_CANVAS_ARRANGE_MODTIME = 1,
|
|
|
|
E_FILEMAN_CANVAS_ARRANGE_SIZE = 2,
|
2005-10-09 17:55:07 -07:00
|
|
|
};
|
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
struct _E_Fm_Fake_Mouse_Up_Info
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
Evas *canvas;
|
|
|
|
int button;
|
2005-10-09 17:55:07 -07:00
|
|
|
};
|
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
struct _E_Fm_Smart_Data
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Menu *menu;
|
|
|
|
E_Win *win;
|
|
|
|
Evas *evas;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
Evas_Object *edje_obj;
|
|
|
|
Evas_Object *event_obj;
|
|
|
|
Evas_Object *clip_obj;
|
2005-10-14 04:55:49 -07:00
|
|
|
Evas_Object *layout;
|
2005-10-19 04:37:30 -07:00
|
|
|
Evas_Object *object;
|
2005-10-23 08:18:47 -07:00
|
|
|
Evas_Object *entry_object;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
char *dir;
|
2005-11-06 05:09:54 -08:00
|
|
|
DIR *dir2;
|
|
|
|
|
|
|
|
double timer_int;
|
|
|
|
Ecore_Timer *timer;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
Evas_List *event_handlers;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
Evas_List *files;
|
|
|
|
Ecore_File_Monitor *monitor;
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Arrange arrange;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
int frozen;
|
2005-10-09 17:55:07 -07:00
|
|
|
double position;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-25 17:19:52 -07:00
|
|
|
int is_selector;
|
|
|
|
void (*selector_func) (Evas_Object *object, char *file, void *data);
|
|
|
|
void *selector_data;
|
|
|
|
|
2005-10-19 04:37:30 -07:00
|
|
|
Evas_Coord x, y, w, h;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
struct {
|
2005-10-20 06:08:51 -07:00
|
|
|
unsigned char start : 1;
|
|
|
|
int x, y;
|
|
|
|
Ecore_Evas *ecore_evas;
|
|
|
|
Evas *evas;
|
|
|
|
Ecore_X_Window win;
|
2005-10-21 19:07:39 -07:00
|
|
|
E_Fm_Icon *icon_object;
|
2005-10-20 06:08:51 -07:00
|
|
|
Evas_Object *image_object;
|
2005-10-09 17:55:07 -07:00
|
|
|
} drag;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
struct {
|
2005-10-20 06:08:51 -07:00
|
|
|
Evas_Coord x_space, y_space, w, h;
|
2005-10-23 08:18:47 -07:00
|
|
|
} icon_info;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
|
|
|
struct {
|
2005-10-30 01:40:37 -07:00
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
} child;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-10 03:14:49 -07:00
|
|
|
struct {
|
2005-11-02 08:08:21 -08:00
|
|
|
Evas_List *files;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
E_Fm_Icon *file;
|
|
|
|
Evas_List *ptr;
|
|
|
|
} current;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
unsigned char enabled : 1;
|
|
|
|
Evas_Coord x, y;
|
|
|
|
Evas_Object *obj;
|
|
|
|
Evas_List *files;
|
|
|
|
} band;
|
|
|
|
|
2005-10-10 03:14:49 -07:00
|
|
|
} selection;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-12 10:01:27 -07:00
|
|
|
struct {
|
|
|
|
E_Config_DD *main_edd;
|
2005-10-23 08:18:47 -07:00
|
|
|
E_Fm_Config *main;
|
2005-10-12 10:01:27 -07:00
|
|
|
} conf;
|
2005-10-09 17:55:07 -07:00
|
|
|
};
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static void _e_fm_smart_add(Evas_Object *object);
|
|
|
|
static void _e_fm_smart_del(Evas_Object *object);
|
|
|
|
static void _e_fm_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y);
|
|
|
|
static void _e_fm_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h);
|
2005-11-01 22:07:33 -08:00
|
|
|
static void _e_fm_smart_show(Evas_Object *object);
|
|
|
|
static void _e_fm_smart_hide(Evas_Object *object);
|
|
|
|
static void _e_fm_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
|
|
|
|
static void _e_fm_smart_clip_set(Evas_Object *obj, Evas_Object * clip);
|
|
|
|
static void _e_fm_smart_clip_unset(Evas_Object *obj);
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
static void _e_fm_redraw(E_Fm_Smart_Data *sd);
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
static void _e_fm_menu_new_dir_cb(void *data, E_Menu *m, E_Menu_Item *mi);
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-18 16:03:36 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static void _e_fm_file_rename (E_Fm_Icon *icon, const char *name);
|
|
|
|
static void _e_fm_file_delete (E_Fm_Icon *icon);
|
|
|
|
|
2005-11-02 08:08:21 -08:00
|
|
|
static void _e_fm_dir_set (E_Fm_Smart_Data *sd, const char *dir);
|
2005-11-06 05:09:54 -08:00
|
|
|
static int _e_fm_dir_files_get (void *data);
|
2005-11-02 08:08:21 -08:00
|
|
|
static char *_e_fm_dir_pop (const char *path);
|
|
|
|
static void _e_fm_file_free (E_Fm_Icon *icon);
|
|
|
|
static void _e_fm_dir_monitor_cb (void *data, Ecore_File_Monitor *ecore_file_monitor, Ecore_File_Event event, const char *path);
|
|
|
|
static void _e_fm_selections_clear (E_Fm_Smart_Data *sd);
|
|
|
|
static void _e_fm_selections_add (E_Fm_Icon *icon, Evas_List *icon_ptr);
|
|
|
|
static void _e_fm_selections_current_set (E_Fm_Icon *icon, Evas_List *icon_ptr);
|
|
|
|
static void _e_fm_selections_rect_add (E_Fm_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
|
|
|
|
static void _e_fm_selections_del (E_Fm_Icon *icon);
|
2005-10-20 06:08:51 -07:00
|
|
|
|
|
|
|
static void _e_fm_fake_mouse_up_later (Evas *evas, int button);
|
|
|
|
static void _e_fm_fake_mouse_up_all_later (Evas *evas);
|
|
|
|
static void _e_fm_fake_mouse_up_cb (void *data);
|
|
|
|
|
2005-11-05 03:13:13 -08:00
|
|
|
static void _e_fm_key_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
2005-10-20 06:08:51 -07:00
|
|
|
static void _e_fm_mouse_down_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 void _e_fm_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
|
|
|
static void _e_fm_icon_mouse_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
|
|
|
static void _e_fm_icon_mouse_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
|
|
|
static void _e_fm_icon_mouse_in_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
|
|
|
static void _e_fm_icon_mouse_out_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
2005-11-06 05:38:46 -08:00
|
|
|
static void _e_fm_icon_mouse_move_cb (void *data, Evas *e, Evas_Object *obj, void *event_info);
|
2005-10-20 06:08:51 -07:00
|
|
|
static int _e_fm_win_mouse_up_cb (void *data, int type, void *event);
|
|
|
|
|
2005-11-07 16:00:30 -08:00
|
|
|
static void _e_fm_icon_select_regex(E_Fm_Smart_Data *sd, char *glob);
|
2005-11-06 06:40:58 -08:00
|
|
|
static void _e_fm_icon_select_up(E_Fm_Smart_Data *sd);
|
|
|
|
static void _e_fm_icon_select_down(E_Fm_Smart_Data *sd);
|
|
|
|
static void _e_fm_icon_select_left(E_Fm_Smart_Data *sd);
|
|
|
|
static void _e_fm_icon_select_right(E_Fm_Smart_Data *sd);
|
2005-11-06 07:35:06 -08:00
|
|
|
static void _e_fm_icon_run(E_Fm_Smart_Data *sd);
|
2005-11-06 06:40:58 -08:00
|
|
|
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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_drop_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_done_cb (E_Drag *drag, int dropped);
|
|
|
|
|
|
|
|
static int _e_fm_files_sort_name_cb (void *d1, void *d2);
|
|
|
|
static int _e_fm_files_sort_modtime_cb (void *d1, void *d2);
|
2005-11-07 07:31:08 -08:00
|
|
|
static int _e_fm_files_sort_layout_name_cb (void *d1, void *d2);
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-25 17:19:52 -07:00
|
|
|
static void _e_fm_selector_send_file (E_Fm_Icon *icon);
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static Ecore_Event_Handler *e_fm_mouse_up_handler = NULL;
|
|
|
|
static double e_fm_grab_time = 0;
|
|
|
|
static Evas_Smart *e_fm_smart = NULL;
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
/* externally accessible functions */
|
2005-10-19 04:37:30 -07:00
|
|
|
int
|
|
|
|
e_fm_init(void)
|
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_smart = evas_smart_new("e_fm",
|
|
|
|
_e_fm_smart_add, /* add */
|
|
|
|
_e_fm_smart_del, /* del */
|
2005-10-26 19:44:36 -07:00
|
|
|
NULL, NULL, NULL, NULL, NULL,
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_smart_move, /* move */
|
|
|
|
_e_fm_smart_resize, /* resize */
|
2005-10-28 16:37:14 -07:00
|
|
|
_e_fm_smart_show,/* show */
|
|
|
|
_e_fm_smart_hide,/* hide */
|
2005-11-01 22:07:33 -08:00
|
|
|
_e_fm_smart_color_set, /* color_set */
|
|
|
|
_e_fm_smart_clip_set, /* clip_set */
|
|
|
|
_e_fm_smart_clip_unset, /* clip_unset */
|
2005-10-20 06:08:51 -07:00
|
|
|
NULL); /* data*/
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-19 04:37:30 -07:00
|
|
|
E_EVENT_FM_RECONFIGURE = ecore_event_type_new();
|
2005-10-23 08:18:47 -07:00
|
|
|
E_EVENT_FM_DIRECTORY_CHANGE = ecore_event_type_new();
|
|
|
|
return 1;
|
2005-10-19 04:37:30 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
e_fm_shutdown(void)
|
|
|
|
{
|
|
|
|
evas_smart_free(e_fm_smart);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
Evas_Object *
|
|
|
|
e_fm_add(Evas *evas)
|
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
return evas_object_smart_add(evas, e_fm_smart);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
void
|
|
|
|
e_fm_dir_set(Evas_Object *object, const char *dir)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = evas_object_smart_data_get(object);
|
|
|
|
if (!sd) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_dir_set(sd, dir);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
char *
|
|
|
|
e_fm_dir_get(Evas_Object *object)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = evas_object_smart_data_get(object);
|
|
|
|
if (!sd) return NULL;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
return strdup(sd->dir);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2005-10-10 12:27:22 -07:00
|
|
|
e_fm_e_win_set(Evas_Object *object, E_Win *win)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = evas_object_smart_data_get(object);
|
|
|
|
if (!sd) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
sd->win = win;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
E_Win *
|
2005-10-10 12:27:22 -07:00
|
|
|
e_fm_e_win_get(Evas_Object *object)
|
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = evas_object_smart_data_get(object);
|
|
|
|
if (!sd) return NULL;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
return sd->win;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2005-10-30 01:40:37 -07:00
|
|
|
e_fm_scroll_set(Evas_Object *object, Evas_Coord x, Evas_Coord y)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-30 01:40:37 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(object);
|
2005-10-31 01:31:05 -08:00
|
|
|
if (!sd) return;
|
2005-10-30 01:40:37 -07:00
|
|
|
|
|
|
|
if (x > (sd->child.w - sd->w)) x = sd->child.w - sd->w;
|
|
|
|
if (y > (sd->child.h - sd->h)) y = sd->child.h - sd->h;
|
|
|
|
if (x < 0) x = 0;
|
|
|
|
if (y < 0) y = 0;
|
|
|
|
if ((x == sd->child.x) && (y == sd->child.y)) return;
|
|
|
|
sd->child.x = x;
|
|
|
|
sd->child.y = y;
|
|
|
|
|
|
|
|
e_icon_layout_clip_freeze(sd->layout);
|
|
|
|
evas_object_move(sd->layout, sd->x - sd->child.x, sd->y - sd->child.y);
|
|
|
|
e_icon_layout_clip_thaw(sd->layout);
|
|
|
|
|
|
|
|
evas_object_smart_callback_call(sd->object, "changed", NULL);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2005-10-30 01:40:37 -07:00
|
|
|
e_fm_scroll_max_get(Evas_Object *object, Evas_Coord *x, Evas_Coord *y)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 13:45:34 -07:00
|
|
|
|
2005-10-30 01:40:37 -07:00
|
|
|
sd = evas_object_smart_data_get(object);
|
2005-10-31 01:31:05 -08:00
|
|
|
if (!sd) return;
|
2005-10-23 13:45:34 -07:00
|
|
|
|
2005-10-30 01:40:37 -07:00
|
|
|
if (x)
|
|
|
|
{
|
|
|
|
if (sd->w < sd->child.w) *x = sd->child.w - sd->w;
|
|
|
|
else *x = 0;
|
|
|
|
}
|
|
|
|
if (y)
|
|
|
|
{
|
|
|
|
if (sd->h < sd->child.h) *y = sd->child.h - sd->h;
|
|
|
|
else *y = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-30 01:40:37 -07:00
|
|
|
void
|
|
|
|
e_fm_scroll_get(Evas_Object *object, Evas_Coord *x, Evas_Coord *y)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
sd = evas_object_smart_data_get(object);
|
2005-10-31 01:31:05 -08:00
|
|
|
if (!sd) return;
|
2005-10-30 01:40:37 -07:00
|
|
|
|
|
|
|
if (x) *x = sd->child.x;
|
|
|
|
if (y) *y = sd->child.y;
|
2005-10-19 08:04:19 -07:00
|
|
|
}
|
|
|
|
|
2005-10-30 01:40:37 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
void
|
|
|
|
e_fm_geometry_virtual_get(Evas_Object *object, Evas_Coord *w, Evas_Coord *h)
|
2005-10-23 08:18:47 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if(w)
|
2005-10-30 01:40:37 -07:00
|
|
|
*w = sd->child.w;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if(h)
|
2005-10-30 01:40:37 -07:00
|
|
|
*h = sd->child.h;
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
e_fm_menu_set(Evas_Object *object, E_Menu *menu)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (menu)
|
|
|
|
sd->menu = menu;
|
|
|
|
}
|
|
|
|
|
|
|
|
E_Menu *
|
|
|
|
e_fm_menu_get(Evas_Object *object)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return sd->menu;
|
|
|
|
}
|
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
int
|
|
|
|
e_fm_freeze(Evas_Object *object)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
2005-10-23 08:18:47 -07:00
|
|
|
return -1;
|
2005-10-19 08:41:23 -07:00
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
sd->frozen++;
|
2005-10-20 06:08:51 -07:00
|
|
|
evas_event_freeze(sd->evas);
|
|
|
|
D(("e_fm_freeze: %d\n", sd->frozen));
|
2005-10-19 08:04:19 -07:00
|
|
|
return sd->frozen;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
e_fm_thaw(Evas_Object *object)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
2005-10-23 08:18:47 -07:00
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (!sd->frozen) return 0;
|
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
sd->frozen--;
|
|
|
|
evas_event_thaw(sd->evas);
|
2005-10-20 06:08:51 -07:00
|
|
|
D(("e_fm_thaw: %d\n", sd->frozen));
|
2005-10-19 08:04:19 -07:00
|
|
|
return sd->frozen;
|
2005-10-14 04:55:49 -07:00
|
|
|
}
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-25 17:19:52 -07:00
|
|
|
void
|
|
|
|
e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char *file, void *data), void *data)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
|
|
|
sd->is_selector = 1;
|
|
|
|
sd->selector_func = func;
|
|
|
|
sd->selector_data = data;
|
|
|
|
}
|
|
|
|
|
2005-10-29 02:53:19 -07:00
|
|
|
/* This isnt working yet */
|
2005-10-27 03:19:43 -07:00
|
|
|
void
|
|
|
|
e_fm_background_set(Evas_Object *object, Evas_Object *bg)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-11-07 07:31:08 -08:00
|
|
|
Evas_Object *swallow;
|
2005-10-27 03:19:43 -07:00
|
|
|
|
2005-10-29 02:53:19 -07:00
|
|
|
return;
|
|
|
|
|
2005-10-27 03:19:43 -07:00
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
swallow = NULL;
|
|
|
|
swallow = edje_object_part_swallow_get(sd->edje_obj, "background");
|
|
|
|
if(swallow)
|
|
|
|
edje_object_part_unswallow(sd->edje_obj, swallow);
|
|
|
|
edje_object_part_swallow(sd->edje_obj, "background", bg);
|
2005-10-27 03:19:43 -07:00
|
|
|
}
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
/* local subsystem functions */
|
|
|
|
static void
|
|
|
|
_e_fm_smart_add(Evas_Object *object)
|
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
char dir[PATH_MAX];
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
sd = E_NEW(E_Fm_Smart_Data, 1);
|
2005-10-09 17:55:07 -07:00
|
|
|
if (!sd) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
sd->object = object;
|
2005-10-19 08:04:19 -07:00
|
|
|
|
2005-11-04 06:58:03 -08:00
|
|
|
sd->icon_info.w = 64;
|
|
|
|
sd->icon_info.h = 64;
|
2005-11-01 17:37:11 -08:00
|
|
|
sd->icon_info.x_space = 12;
|
|
|
|
sd->icon_info.y_space = 10;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
sd->timer_int = 0.001;
|
|
|
|
sd->timer = NULL;
|
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
sd->evas = evas_object_evas_get(object);
|
2005-10-19 08:04:19 -07:00
|
|
|
sd->frozen = 0;
|
2005-10-25 17:19:52 -07:00
|
|
|
sd->is_selector = 0;
|
2005-11-07 07:31:08 -08:00
|
|
|
sd->edje_obj = edje_object_add(sd->evas);
|
|
|
|
evas_object_repeat_events_set(sd->edje_obj, 1);
|
|
|
|
e_theme_edje_object_set(sd->edje_obj,
|
|
|
|
"base/theme/fileman",
|
|
|
|
"fileman/smart");
|
|
|
|
evas_object_smart_member_add(sd->edje_obj, object);
|
|
|
|
evas_object_show(sd->edje_obj);
|
|
|
|
|
|
|
|
sd->event_obj = evas_object_rectangle_add(sd->evas);
|
|
|
|
evas_object_smart_member_add(sd->event_obj, object);
|
|
|
|
evas_object_color_set(sd->event_obj, 0, 0, 0, 0);
|
|
|
|
evas_object_stack_below(sd->event_obj, sd->edje_obj);
|
|
|
|
evas_object_show(sd->event_obj);
|
|
|
|
evas_object_event_callback_add(sd->event_obj, EVAS_CALLBACK_MOUSE_DOWN,
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_mouse_down_cb, sd);
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_event_callback_add(sd->event_obj, EVAS_CALLBACK_MOUSE_UP,
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_mouse_up_cb, sd);
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_event_callback_add(sd->event_obj, EVAS_CALLBACK_MOUSE_MOVE,
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_mouse_move_cb, sd);
|
2005-10-27 03:19:43 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->layout = e_icon_layout_add(sd->evas);
|
|
|
|
e_icon_layout_spacing_set(sd->layout, sd->icon_info.x_space, sd->icon_info.y_space);
|
2005-10-23 08:18:47 -07:00
|
|
|
evas_object_show(sd->layout);
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
sd->clip_obj = evas_object_rectangle_add(sd->evas);
|
|
|
|
evas_object_smart_member_add(sd->clip_obj, object);
|
|
|
|
evas_object_show(sd->clip_obj);
|
|
|
|
evas_object_move(sd->clip_obj, -100003, -100003);
|
|
|
|
evas_object_resize(sd->clip_obj, 200006, 200006);
|
|
|
|
evas_object_color_set(sd->clip_obj, 255, 255, 255, 255);
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_clip_set(sd->edje_obj, sd->clip_obj);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
edje_object_part_swallow(sd->edje_obj, "icons", sd->layout);
|
|
|
|
|
2005-10-10 08:17:29 -07:00
|
|
|
sd->selection.band.obj = edje_object_add(sd->evas);
|
2005-10-27 03:19:43 -07:00
|
|
|
evas_object_smart_member_add(sd->selection.band.obj, object);
|
2005-10-10 12:27:22 -07:00
|
|
|
e_theme_edje_object_set(sd->selection.band.obj,
|
2005-10-10 08:17:29 -07:00
|
|
|
"base/theme/fileman/rubberband",
|
2005-10-10 12:27:22 -07:00
|
|
|
"fileman/rubberband");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-05 03:13:13 -08:00
|
|
|
evas_object_focus_set(sd->object, 1);
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_event_callback_add(sd->object, EVAS_CALLBACK_KEY_DOWN, _e_fm_key_down_cb, sd);
|
|
|
|
|
2005-11-05 03:13:13 -08:00
|
|
|
|
|
|
|
|
2005-10-23 04:25:35 -07:00
|
|
|
sd->event_handlers = NULL;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
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,
|
2005-11-06 05:38:46 -08:00
|
|
|
sd));
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->monitor = NULL;
|
|
|
|
sd->position = 0.0;
|
|
|
|
|
2005-10-12 10:01:27 -07:00
|
|
|
sd->conf.main_edd = E_CONFIG_DD_NEW("E_Fm_Config", E_Fm_Config);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-12 10:01:27 -07:00
|
|
|
#undef T
|
|
|
|
#undef DD
|
|
|
|
#define T E_Fm_Config
|
|
|
|
#define DD sd->conf.main_edd
|
|
|
|
E_CONFIG_VAL(DD, T, width, INT);
|
|
|
|
E_CONFIG_VAL(DD, T, height, INT);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-12 10:01:27 -07:00
|
|
|
sd->conf.main = e_config_domain_load("efm", sd->conf.main_edd);
|
2005-10-23 08:18:47 -07:00
|
|
|
if (!sd->conf.main)
|
|
|
|
{
|
|
|
|
/* no saved config */
|
|
|
|
sd->conf.main = E_NEW(E_Fm_Config, 1);
|
|
|
|
sd->conf.main->width = 640;
|
|
|
|
sd->conf.main->height = 480;
|
|
|
|
}
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
evas_object_smart_data_set(object, sd);
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
if (getcwd(dir, sizeof(dir)))
|
|
|
|
_e_fm_dir_set(sd, dir);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_smart_del(Evas_Object *object)
|
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
2005-10-10 12:27:22 -07:00
|
|
|
return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-12 10:01:27 -07:00
|
|
|
e_config_domain_save("efm", sd->conf.main_edd, sd->conf.main);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
if(sd->timer)
|
|
|
|
{
|
|
|
|
if(sd->dir2)
|
|
|
|
closedir(sd->dir2);
|
|
|
|
ecore_timer_del(sd->timer);
|
|
|
|
sd->timer = NULL;
|
|
|
|
}
|
|
|
|
|
2005-10-23 07:57:51 -07:00
|
|
|
if (sd->monitor) ecore_file_monitor_del(sd->monitor);
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->monitor = NULL;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
while (sd->event_handlers)
|
|
|
|
{
|
|
|
|
ecore_event_handler_del(sd->event_handlers->data);
|
|
|
|
sd->event_handlers = evas_list_remove_list(sd->event_handlers, sd->event_handlers);
|
2005-10-23 08:18:47 -07:00
|
|
|
}
|
|
|
|
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_event_freeze(evas_object_evas_get(object));
|
2005-10-21 19:07:39 -07:00
|
|
|
while (sd->files)
|
|
|
|
{
|
|
|
|
_e_fm_file_free(sd->files->data);
|
|
|
|
sd->files = evas_list_remove_list(sd->files, sd->files);
|
2005-10-23 08:18:47 -07:00
|
|
|
}
|
2005-11-06 05:09:54 -08:00
|
|
|
|
2005-10-10 08:17:29 -07:00
|
|
|
evas_object_del(sd->selection.band.obj);
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_del(sd->clip_obj);
|
|
|
|
evas_object_del(sd->edje_obj);
|
2005-10-20 06:08:51 -07:00
|
|
|
evas_object_del(sd->layout);
|
|
|
|
if (sd->entry_object) evas_object_del(sd->entry_object);
|
|
|
|
if (sd->menu) e_object_del(E_OBJECT(sd->menu));
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-04 09:02:42 -08:00
|
|
|
evas_event_thaw(evas_object_evas_get(object));
|
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
free(sd->dir);
|
2005-10-23 08:18:47 -07:00
|
|
|
free(sd);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = evas_object_smart_data_get(object);
|
|
|
|
if (!sd) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-19 04:37:30 -07:00
|
|
|
sd->x = x;
|
2005-10-30 01:40:37 -07:00
|
|
|
sd->y = y;
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_move(sd->edje_obj, x, y);
|
|
|
|
evas_object_move(sd->clip_obj, x, y);
|
|
|
|
evas_object_move(sd->event_obj, x, y);
|
|
|
|
// evas_object_move(sd->layout, sd->x - sd->child.x, sd->y - sd->child.y);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-19 04:37:30 -07:00
|
|
|
E_Event_Fm_Reconfigure *ev;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_resize(sd->edje_obj, w, h);
|
|
|
|
evas_object_resize(sd->clip_obj, w, h);
|
|
|
|
evas_object_resize(sd->event_obj, w, h);
|
|
|
|
// evas_object_resize(sd->layout, w, h);
|
2005-10-19 04:37:30 -07:00
|
|
|
e_icon_layout_width_fix(sd->layout, w);
|
2005-10-30 01:40:37 -07:00
|
|
|
e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h);
|
2005-10-12 10:01:27 -07:00
|
|
|
sd->conf.main->width = w;
|
|
|
|
sd->conf.main->height = h;
|
2005-10-19 04:37:30 -07:00
|
|
|
|
|
|
|
sd->w = w;
|
|
|
|
sd->h = h;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-30 01:40:37 -07:00
|
|
|
evas_object_smart_callback_call(sd->object, "changed", NULL);
|
|
|
|
|
2005-10-19 08:04:19 -07:00
|
|
|
if(sd->frozen)
|
2005-10-23 08:18:47 -07:00
|
|
|
return;
|
|
|
|
|
2005-10-19 04:37:30 -07:00
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
Evas_Coord w, h;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-19 04:37:30 -07:00
|
|
|
evas_object_geometry_get(sd->layout, NULL, NULL, &w, &h);
|
|
|
|
ev->object = sd->object;
|
2005-10-30 01:40:37 -07:00
|
|
|
ev->w = sd->child.w;
|
|
|
|
ev->h = sd->child.h;
|
2005-11-04 17:01:26 -08:00
|
|
|
//ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
2005-10-19 08:04:19 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-11-01 22:07:33 -08:00
|
|
|
static void
|
|
|
|
_e_fm_smart_show(Evas_Object *object)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_show(sd->edje_obj);
|
|
|
|
// evas_object_show(sd->layout);
|
|
|
|
evas_object_show(sd->clip_obj);
|
2005-11-01 22:07:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_smart_hide(Evas_Object *object)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_hide(sd->clip_obj);
|
2005-11-01 22:07:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_smart_color_set(Evas_Object *object, int r, int g, int b, int a)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_color_set(sd->clip_obj, r, g, b, a);
|
2005-11-01 22:07:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_smart_clip_set(Evas_Object *object, Evas_Object *clip)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_clip_set(sd->clip_obj, clip);
|
2005-11-01 22:07:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_smart_clip_unset(Evas_Object *object)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
|
|
|
if ((!object) || !(sd = evas_object_smart_data_get(object)))
|
|
|
|
return;
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
evas_object_clip_unset(sd->clip_obj);
|
2005-11-01 22:07:33 -08:00
|
|
|
}
|
|
|
|
|
2005-10-14 04:55:49 -07:00
|
|
|
static void
|
2005-10-18 09:14:45 -07:00
|
|
|
_e_fm_redraw(E_Fm_Smart_Data *sd)
|
2005-10-14 04:55:49 -07:00
|
|
|
{
|
2005-10-19 04:37:30 -07:00
|
|
|
E_Event_Fm_Reconfigure *ev;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-14 04:55:49 -07:00
|
|
|
e_icon_layout_redraw_force(sd->layout);
|
2005-10-19 08:04:19 -07:00
|
|
|
|
|
|
|
if(sd->frozen)
|
|
|
|
return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
Evas_Coord w, h;
|
|
|
|
evas_object_geometry_get(sd->layout, NULL, NULL, &w, &h);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ev->object = sd->object;
|
2005-10-30 01:40:37 -07:00
|
|
|
ev->w = sd->child.w;
|
|
|
|
ev->h = sd->child.h;
|
2005-11-04 17:01:26 -08:00
|
|
|
//ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
2005-10-23 08:18:47 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_file_rename(E_Fm_Icon *icon, const char* name)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!name || !name[0])
|
|
|
|
return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (e_fm_file_rename(icon->file, name))
|
2005-10-18 16:03:36 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_icon_title_set(icon->icon_object, name);
|
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static void
|
|
|
|
_e_fm_file_delete(E_Fm_Icon *icon)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!e_fm_file_delete(icon->file))
|
|
|
|
{
|
|
|
|
E_Dialog *dia;
|
2005-11-04 13:09:38 -08:00
|
|
|
char text[PATH_MAX + 256];
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 16:21:47 -07:00
|
|
|
dia = e_dialog_new(icon->sd->win->container);
|
2005-10-20 06:08:51 -07:00
|
|
|
e_dialog_button_add(dia, "Ok", NULL, NULL, NULL);
|
|
|
|
e_dialog_button_focus_num(dia, 1);
|
|
|
|
e_dialog_title_set(dia, "Error");
|
2005-10-24 09:25:09 -07:00
|
|
|
snprintf(text, PATH_MAX + 256, "Could not delete <br><b>%s</b>", icon->file->path);
|
2005-10-20 06:08:51 -07:00
|
|
|
e_dialog_text_set(dia, text);
|
2005-10-23 16:21:47 -07:00
|
|
|
e_dialog_show(dia);
|
2005-10-24 09:25:09 -07:00
|
|
|
return;
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
2005-10-23 16:21:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon->sd->files = evas_list_remove(icon->sd->files, icon);
|
2005-10-23 16:21:47 -07:00
|
|
|
e_icon_layout_freeze(icon->sd->layout);
|
2005-10-31 01:31:05 -08:00
|
|
|
e_icon_layout_unpack(icon->icon_object);
|
2005-10-23 16:21:47 -07:00
|
|
|
e_icon_layout_thaw(icon->sd->layout);
|
|
|
|
_e_fm_redraw(icon->sd);
|
|
|
|
_e_fm_file_free(icon);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_open(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
switch (icon->file->type)
|
|
|
|
{
|
|
|
|
case E_FM_FILE_TYPE_DIRECTORY:
|
|
|
|
_e_fm_dir_set(icon->sd, icon->file->path);
|
|
|
|
break;
|
|
|
|
case E_FM_FILE_TYPE_FILE:
|
2005-10-23 08:18:47 -07:00
|
|
|
if ((!e_fm_file_assoc_exec(icon->file) && (e_fm_file_can_exec(icon->file))))
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_file_exec(icon->file);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_copy(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_cut(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_paste(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_rename(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon->sd->entry_object = e_entry_add(icon->sd->evas);
|
|
|
|
evas_object_focus_set(icon->sd->entry_object, 1);
|
|
|
|
evas_object_show(icon->sd->entry_object);
|
|
|
|
e_entry_cursor_show(icon->sd->entry_object);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_icon_edit_entry_set(icon->icon_object, icon->sd->entry_object);
|
|
|
|
e_fm_icon_title_set(icon->icon_object, "");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,
|
|
|
|
_e_fm_win_mouse_up_cb, icon);
|
|
|
|
e_grabinput_get(icon->sd->win->evas_win, 1, icon->sd->win->evas_win);
|
2005-10-25 15:01:50 -07:00
|
|
|
e_entry_cursor_move_at_start(icon->sd->entry_object);
|
|
|
|
e_entry_text_set(icon->sd->entry_object, icon->file->name);
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_grab_time = ecore_time_get();
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_delete(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-09 17:55:07 -07:00
|
|
|
E_Dialog *dia;
|
2005-11-04 13:09:38 -08:00
|
|
|
char text[PATH_MAX + 256];
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
dia = e_dialog_new(icon->sd->win->container);
|
|
|
|
e_dialog_button_add(dia, "Yes", NULL, _e_fm_file_delete_yes_cb, icon);
|
|
|
|
e_dialog_button_add(dia, "No", NULL, NULL, NULL);
|
2005-10-10 12:27:22 -07:00
|
|
|
e_dialog_button_focus_num(dia, 1);
|
2005-10-20 06:08:51 -07:00
|
|
|
e_dialog_title_set(dia, "Confirm");
|
2005-10-23 16:21:47 -07:00
|
|
|
snprintf(text, PATH_MAX + 256, " Are you sure you want to delete <br><b>%s</b> ?", icon->file->name);
|
2005-10-10 12:27:22 -07:00
|
|
|
e_dialog_text_set(dia, text);
|
|
|
|
e_dialog_show(dia);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_delete_yes_cb(void *data, E_Dialog *dia)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 16:21:47 -07:00
|
|
|
|
|
|
|
_e_fm_file_delete(icon);
|
|
|
|
e_object_del(E_OBJECT(dia));
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
static void
|
2005-10-21 19:07:39 -07:00
|
|
|
_e_fm_icon_prop_fill_data(E_Fm_Icon_CFData *cfdata)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-22 10:02:37 -07:00
|
|
|
/*- BASIC -*/
|
2005-10-21 19:07:39 -07:00
|
|
|
if((cfdata->icon->file->mode & (S_IWUSR|S_IWGRP|S_IWOTH)))
|
|
|
|
cfdata->protect = 0;
|
|
|
|
else
|
|
|
|
cfdata->protect = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode&S_IRGRP) &&
|
|
|
|
(cfdata->icon->file->mode&S_IROTH) &&
|
|
|
|
!(cfdata->icon->file->mode&S_IWGRP) &&
|
|
|
|
!(cfdata->icon->file->mode&S_IWOTH))
|
2005-10-21 19:07:39 -07:00
|
|
|
cfdata->readwrite = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
else if((cfdata->icon->file->mode&S_IWGRP) &&
|
|
|
|
(cfdata->icon->file->mode&S_IWOTH))
|
2005-10-21 19:07:39 -07:00
|
|
|
cfdata->readwrite = 1;
|
2005-10-22 17:30:22 -07:00
|
|
|
else if(!(cfdata->icon->file->mode & (S_IROTH|S_IWOTH|S_IRGRP|S_IWGRP)))
|
2005-10-21 19:07:39 -07:00
|
|
|
cfdata->readwrite = 2;
|
2005-10-22 17:30:22 -07:00
|
|
|
else
|
|
|
|
cfdata->readwrite = 3;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 10:02:37 -07:00
|
|
|
/*- ADVANCED -*/
|
2005-10-22 17:30:22 -07:00
|
|
|
/*- user -*/
|
|
|
|
if((cfdata->icon->file->mode & S_IRUSR))
|
|
|
|
cfdata->user.r = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->user.r = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode & S_IWUSR))
|
|
|
|
cfdata->user.w = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->user.w = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode & S_IXUSR))
|
|
|
|
cfdata->user.x = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
2005-10-22 17:30:22 -07:00
|
|
|
cfdata->user.x = 0;
|
|
|
|
/*- group -*/
|
|
|
|
if((cfdata->icon->file->mode & S_IRGRP))
|
|
|
|
cfdata->group.r = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->group.r = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode & S_IWGRP))
|
|
|
|
cfdata->group.w = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->group.w = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode & S_IXGRP))
|
|
|
|
cfdata->group.x = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->group.x = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
/*- world -*/
|
|
|
|
if((cfdata->icon->file->mode & S_IROTH))
|
|
|
|
cfdata->world.r = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->world.r = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode & S_IWOTH))
|
|
|
|
cfdata->world.w = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->world.w = 0;
|
2005-10-22 17:30:22 -07:00
|
|
|
if((cfdata->icon->file->mode & S_IXOTH))
|
|
|
|
cfdata->world.x = 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
else
|
|
|
|
cfdata->world.x = 0;
|
2005-10-18 09:14:45 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void *
|
|
|
|
_e_fm_icon_prop_create_data(E_Config_Dialog *cfd)
|
|
|
|
{
|
|
|
|
E_Fm_Icon_CFData *cfdata;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
cfdata = E_NEW(E_Fm_Icon_CFData, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
if (!cfdata) return NULL;
|
2005-10-21 19:07:39 -07:00
|
|
|
cfdata->icon = cfd->data;
|
|
|
|
_e_fm_icon_prop_fill_data(cfdata);
|
|
|
|
return cfdata;
|
2005-10-18 09:14:45 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-23 08:18:47 -07:00
|
|
|
_e_fm_icon_prop_free_data(E_Config_Dialog *cfd, void *data)
|
2005-10-21 19:07:39 -07:00
|
|
|
{
|
2005-10-23 08:18:47 -07:00
|
|
|
free(data);
|
2005-10-18 09:14:45 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2005-10-23 08:18:47 -07:00
|
|
|
_e_fm_icon_prop_basic_apply_data(E_Config_Dialog *cfd, void *data)
|
2005-10-18 09:14:45 -07:00
|
|
|
{
|
2005-10-21 19:07:39 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
E_Fm_Icon_CFData *cfdata;
|
|
|
|
|
|
|
|
cfdata = data;
|
2005-10-21 19:07:39 -07:00
|
|
|
icon = cfdata->icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
switch (cfdata->readwrite)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
D(("_e_fm_icon_prop_basic_apply_data: read (%s)\n", icon->file->name));
|
|
|
|
icon->file->mode |= (S_IRGRP | S_IROTH);
|
|
|
|
icon->file->mode &= (~S_IWGRP & ~S_IWOTH);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
D(("_e_fm_icon_prop_basic_apply_data: write (%s)\n", icon->file->name));
|
|
|
|
icon->file->mode |= (S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
D(("_e_fm_icon_prop_basic_apply_data: hide (%s)\n", icon->file->name));
|
|
|
|
icon->file->mode &= (~S_IRGRP & ~S_IROTH & ~S_IWGRP & ~S_IWOTH);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (cfdata->protect)
|
|
|
|
{
|
|
|
|
D(("_e_fm_icon_prop_basic_apply_data: protect (%s)\n", icon->file->name));
|
|
|
|
icon->file->mode &= (~S_IWUSR & ~S_IWGRP & ~S_IWOTH);
|
|
|
|
}
|
2005-10-21 19:07:39 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
D(("_e_fm_icon_prop_basic_apply_data: unprotect (%s)\n", icon->file->name));
|
|
|
|
icon->file->mode |= S_IWUSR;
|
2005-10-23 08:18:47 -07:00
|
|
|
}
|
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
chmod(icon->file->path, icon->file->mode);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
return 1;
|
|
|
|
}
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
static int
|
2005-10-23 08:18:47 -07:00
|
|
|
_e_fm_icon_prop_advanced_apply_data(E_Config_Dialog *cfd, void *data)
|
2005-10-18 09:14:45 -07:00
|
|
|
{
|
2005-10-22 17:30:22 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
E_Fm_Icon_CFData *cfdata;
|
|
|
|
|
|
|
|
cfdata = data;
|
2005-10-22 17:30:22 -07:00
|
|
|
icon = cfdata->icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 17:30:22 -07:00
|
|
|
if(cfdata->user.r)
|
|
|
|
icon->file->mode |= S_IRUSR;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IRUSR;
|
|
|
|
if(cfdata->user.w)
|
|
|
|
icon->file->mode |= S_IWUSR;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IWUSR;
|
|
|
|
if(cfdata->user.x)
|
|
|
|
icon->file->mode |= S_IXUSR;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IXUSR;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 17:30:22 -07:00
|
|
|
if(cfdata->group.r)
|
|
|
|
icon->file->mode |= S_IRGRP;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IRGRP;
|
|
|
|
if(cfdata->group.w)
|
|
|
|
icon->file->mode |= S_IWGRP;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IWGRP;
|
|
|
|
if(cfdata->group.x)
|
|
|
|
icon->file->mode |= S_IXGRP;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IXGRP;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 17:30:22 -07:00
|
|
|
if(cfdata->world.r)
|
|
|
|
icon->file->mode |= S_IROTH;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IROTH;
|
|
|
|
if(cfdata->world.w)
|
|
|
|
icon->file->mode |= S_IWOTH;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IWOTH;
|
|
|
|
if(cfdata->world.x)
|
|
|
|
icon->file->mode |= S_IXOTH;
|
|
|
|
else
|
|
|
|
icon->file->mode &= ~S_IXOTH;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 17:30:22 -07:00
|
|
|
chmod(icon->file->path, icon->file->mode);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
2005-10-23 08:18:47 -07:00
|
|
|
_e_fm_icon_prop_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
|
2005-10-18 09:14:45 -07:00
|
|
|
{
|
2005-10-21 19:07:39 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
E_Fm_Icon_CFData *cfdata;
|
2005-11-04 13:09:38 -08:00
|
|
|
char size[64];
|
2005-10-18 09:14:45 -07:00
|
|
|
char text[512];
|
2005-10-23 08:18:47 -07:00
|
|
|
Evas_Object *o, *ol;
|
|
|
|
E_Radio_Group *rg;
|
2005-10-25 18:05:56 -07:00
|
|
|
Evas_Object *img;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
cfdata = data;
|
2005-10-21 19:07:39 -07:00
|
|
|
icon = cfdata->icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
_e_fm_icon_prop_fill_data(cfdata);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
snprintf(size, 64, "%ld", icon->file->size / 1024);
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
ol = e_widget_list_add(evas, 0, 0);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
o = e_widget_frametable_add(evas, _("General"), 0);
|
2005-10-25 18:05:56 -07:00
|
|
|
|
|
|
|
img = e_fm_icon_add(evas);
|
|
|
|
e_fm_icon_file_set(img, e_fm_file_new(icon->file->path));
|
|
|
|
e_fm_icon_title_set(img, "");
|
|
|
|
e_widget_frametable_object_append(o, e_widget_image_add_from_object(evas, img, 48, 48),
|
|
|
|
2, 1, 2, 2,
|
|
|
|
0, 0, 0, 0);
|
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
snprintf(text, 512, _("File:"));
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_label_add(evas, text),
|
2005-10-18 09:14:45 -07:00
|
|
|
0, 0, 1, 1,
|
|
|
|
1, 1, 1, 1);
|
2005-10-21 19:07:39 -07:00
|
|
|
snprintf(text, 512, "%s", icon->file->name);
|
|
|
|
e_widget_frametable_object_append(o, e_widget_label_add(evas, text),
|
|
|
|
1, 0, 1, 1,
|
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
snprintf(text, 512, _("Size:"));
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_label_add(evas, text),
|
2005-10-18 09:14:45 -07:00
|
|
|
0, 1, 1, 1,
|
|
|
|
1, 1, 1, 1);
|
|
|
|
snprintf(text, 512, "%s Kb", size);
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_label_add(evas, text),
|
|
|
|
1, 1, 1, 1,
|
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
snprintf(text, 512, _("Type:"));
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_label_add(evas, text),
|
2005-10-18 09:14:45 -07:00
|
|
|
0, 2, 1, 1,
|
|
|
|
1, 1, 1, 1);
|
|
|
|
snprintf(text, 512, "%s", "An Image");
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_label_add(evas, text),
|
|
|
|
1, 2, 1, 1,
|
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_check_add(evas, _("Protect this file"), &(cfdata->protect)),
|
|
|
|
0, 3, 2, 1,
|
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
rg = e_widget_radio_group_new(&(cfdata->readwrite));
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_radio_add(evas, _("Let others see this file"), 0, rg),
|
2005-10-25 18:05:56 -07:00
|
|
|
0, 4, 3, 1,
|
2005-10-18 09:14:45 -07:00
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_radio_add(evas, _("Let others modify this file"), 1, rg),
|
2005-10-25 18:05:56 -07:00
|
|
|
0, 5, 3, 1,
|
2005-10-18 09:14:45 -07:00
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_radio_add(evas, _("Dont let others see or modify this file"), 2, rg),
|
2005-10-25 18:05:56 -07:00
|
|
|
0, 6, 3, 1,
|
2005-10-22 17:30:22 -07:00
|
|
|
1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-22 17:30:22 -07:00
|
|
|
e_widget_frametable_object_append(o, e_widget_radio_add(evas, _("Custom settings"), 3, rg),
|
2005-10-25 18:05:56 -07:00
|
|
|
0, 7, 3, 1,
|
2005-10-23 08:18:47 -07:00
|
|
|
1, 1, 1, 1);
|
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_list_object_append(ol, o, 1, 1, 0.5);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
return ol;
|
|
|
|
}
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
static Evas_Object *
|
2005-10-23 08:18:47 -07:00
|
|
|
_e_fm_icon_prop_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data)
|
2005-10-18 09:14:45 -07:00
|
|
|
{
|
2005-10-21 19:07:39 -07:00
|
|
|
Evas_Object *o, *ob, *of;
|
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
E_Fm_Icon_CFData *cfdata;
|
2005-10-21 19:07:39 -07:00
|
|
|
struct group *grp;
|
|
|
|
struct passwd *usr;
|
|
|
|
struct tm *t;
|
2005-11-04 13:09:38 -08:00
|
|
|
char lastaccess[128], lastmod[128];
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
cfdata = data;
|
2005-10-21 19:07:39 -07:00
|
|
|
icon = cfdata->icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
_e_fm_icon_prop_fill_data(cfdata);
|
|
|
|
|
|
|
|
usr = getpwuid(icon->file->owner);
|
|
|
|
|
|
|
|
grp = getgrgid(icon->file->group);
|
|
|
|
|
|
|
|
t = gmtime(&icon->file->atime);
|
|
|
|
strftime(lastaccess, 128, "%a %b %d %T %Y", t);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
t = gmtime(&icon->file->mtime);
|
2005-10-23 08:18:47 -07:00
|
|
|
strftime(lastmod, 128, "%a %b %d %T %Y", t);
|
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
o = e_widget_list_add(evas, 0, 0);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
of = e_widget_frametable_add(evas, _("File Info:"), 0);
|
|
|
|
ob = e_widget_label_add(evas, "Owner:");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_label_add(evas, strdup(usr->pw_name));
|
|
|
|
e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
ob = e_widget_label_add(evas, "Group:");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_label_add(evas, strdup(grp->gr_name));
|
|
|
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
ob = e_widget_label_add(evas, "Last Access:");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_label_add(evas, lastaccess);
|
|
|
|
e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
ob = e_widget_label_add(evas, "Last Modified:");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_label_add(evas, lastmod);
|
2005-10-23 08:18:47 -07:00
|
|
|
e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
|
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
of = e_widget_frametable_add(evas, _("Permissions:"), 0);
|
2005-10-21 19:07:39 -07:00
|
|
|
ob = e_widget_label_add(evas, "Me");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 0, 3, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("r"), &(cfdata->user.r));
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("w"), &(cfdata->user.w));
|
|
|
|
e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("x"), &(cfdata->user.x));
|
|
|
|
e_widget_frametable_object_append(of, ob, 2, 1, 1, 1, 1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
ob = e_widget_label_add(evas, "My Group");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 2, 3, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("r"), &(cfdata->group.r));
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("w"), &(cfdata->group.w));
|
|
|
|
e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("x"), &(cfdata->group.x));
|
|
|
|
e_widget_frametable_object_append(of, ob, 2, 3, 1, 1, 1, 1, 1, 1);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
ob = e_widget_label_add(evas, "Everyone");
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 4, 3, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("r"), &(cfdata->world.r));
|
|
|
|
e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("w"), &(cfdata->world.w));
|
|
|
|
e_widget_frametable_object_append(of, ob, 1, 5, 1, 1, 1, 1, 1, 1);
|
|
|
|
ob = e_widget_check_add(evas, _("x"), &(cfdata->world.x));
|
2005-10-23 08:18:47 -07:00
|
|
|
e_widget_frametable_object_append(of, ob, 2, 5, 1, 1, 1, 1, 1, 1);
|
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
return o;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_file_menu_properties(void *data, E_Menu *m, E_Menu_Item *mi)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-23 08:18:47 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Config_Dialog *cfd;
|
|
|
|
E_Config_Dialog_View v;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 19:07:39 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
/* methods */
|
|
|
|
v.create_cfdata = _e_fm_icon_prop_create_data;
|
|
|
|
v.free_cfdata = _e_fm_icon_prop_free_data;
|
|
|
|
v.basic.apply_cfdata = _e_fm_icon_prop_basic_apply_data;
|
|
|
|
v.basic.create_widgets = _e_fm_icon_prop_basic_create_widgets;
|
|
|
|
v.advanced.apply_cfdata = _e_fm_icon_prop_advanced_apply_data;
|
|
|
|
v.advanced.create_widgets = _e_fm_icon_prop_advanced_create_widgets;
|
|
|
|
/* create config diaolg for NULL object/data */
|
2005-10-23 08:18:47 -07:00
|
|
|
cfd = e_config_dialog_new(icon->sd->win->container, _("Properties"), NULL, 0, &v, icon);
|
2005-10-18 09:14:45 -07:00
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
static void
|
|
|
|
_e_fm_menu_new_dir_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
sd = data;
|
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static void
|
|
|
|
_e_fm_menu_arrange_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
switch (e_menu_item_num_get(mi))
|
|
|
|
{
|
|
|
|
case E_FILEMAN_CANVAS_ARRANGE_NAME:
|
|
|
|
sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_files_sort_name_cb);
|
|
|
|
sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME;
|
2005-10-30 01:40:37 -07:00
|
|
|
_e_fm_redraw(sd);
|
2005-10-20 06:08:51 -07:00
|
|
|
break;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
case E_FILEMAN_CANVAS_ARRANGE_MODTIME:
|
|
|
|
sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_files_sort_modtime_cb);
|
|
|
|
sd->arrange = E_FILEMAN_CANVAS_ARRANGE_MODTIME;
|
2005-10-30 01:40:37 -07:00
|
|
|
_e_fm_redraw(sd);
|
2005-10-20 06:08:51 -07:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_menu_refresh_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = data;
|
|
|
|
/* TODO: Update files */
|
|
|
|
_e_fm_redraw(sd);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_dir_set(E_Fm_Smart_Data *sd, const char *dir)
|
|
|
|
{
|
|
|
|
Evas_List *l;
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
2005-10-31 01:31:05 -08:00
|
|
|
E_Event_Fm_Directory_Change *ev2;
|
2005-11-06 05:09:54 -08:00
|
|
|
DIR *dir2;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!dir) return;
|
|
|
|
if ((sd->dir) && (!strcmp(sd->dir, dir))) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
if (!(dir2 = opendir(dir))) return;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (sd->dir) free (sd->dir);
|
|
|
|
sd->dir = strdup(dir);
|
|
|
|
|
|
|
|
/* Reset position */
|
|
|
|
sd->position = 0.0;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* Clear old selection */
|
|
|
|
_e_fm_selections_clear(sd);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* Remove old files */
|
|
|
|
while (sd->files)
|
|
|
|
{
|
|
|
|
_e_fm_file_free(sd->files->data);
|
|
|
|
sd->files = evas_list_remove_list(sd->files, sd->files);
|
|
|
|
}
|
2005-11-06 05:09:54 -08:00
|
|
|
e_icon_layout_reset(sd->layout);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* Get new files */
|
2005-10-23 07:57:51 -07:00
|
|
|
if (sd->monitor) ecore_file_monitor_del(sd->monitor);
|
|
|
|
sd->monitor = ecore_file_monitor_add(sd->dir, _e_fm_dir_monitor_cb, sd);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* Get special prev dir */
|
|
|
|
if (strcmp(sd->dir, "/"))
|
2005-10-23 08:18:47 -07:00
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
2005-11-06 05:09:54 -08:00
|
|
|
char path[PATH_MAX];
|
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
icon = E_NEW(E_Fm_Icon, 1);
|
|
|
|
if (icon)
|
|
|
|
{
|
|
|
|
snprintf(path, sizeof(path), "%s/..", sd->dir);
|
|
|
|
icon->file = e_fm_file_new(path);
|
|
|
|
icon->file->mode = 0040000;
|
|
|
|
icon->file->type = E_FM_FILE_TYPE_DIRECTORY;
|
|
|
|
icon->icon_object = e_fm_icon_add(sd->evas);
|
|
|
|
icon->sd = sd;
|
2005-11-06 05:09:54 -08:00
|
|
|
e_fm_icon_file_set(icon->icon_object, icon->file);
|
2005-10-23 08:18:47 -07:00
|
|
|
sd->files = evas_list_prepend(sd->files, icon);
|
2005-11-06 05:09:54 -08:00
|
|
|
e_icon_layout_pack(sd->layout, icon->icon_object);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
|
2005-11-06 05:38:46 -08:00
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
|
2005-10-23 08:18:47 -07:00
|
|
|
}
|
2005-11-06 05:09:54 -08:00
|
|
|
}
|
2005-10-30 01:40:37 -07:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
sd->dir2 = dir2;
|
|
|
|
if(sd->timer)
|
|
|
|
ecore_timer_del(sd->timer);
|
|
|
|
sd->timer = ecore_timer_add(sd->timer_int, _e_fm_dir_files_get, sd);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
static int
|
|
|
|
_e_fm_dir_files_get(void *data)
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
2005-11-06 05:09:54 -08:00
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
Evas_List *l;
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
struct dirent *dir_entry;
|
|
|
|
char path[PATH_MAX];
|
|
|
|
int i;
|
|
|
|
int type;
|
|
|
|
|
|
|
|
/* FIXME: This needs to be passed in to decide what file types to show */
|
|
|
|
type = E_FM_FILE_TYPE_NORMAL;
|
|
|
|
i = 0;
|
|
|
|
sd = data;
|
|
|
|
|
|
|
|
e_icon_layout_freeze(sd->layout);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
while (i < 2)
|
|
|
|
{
|
|
|
|
dir_entry = readdir(sd->dir2);
|
|
|
|
if(!dir_entry)
|
|
|
|
break;
|
2005-10-20 06:08:51 -07:00
|
|
|
if ((!strcmp(dir_entry->d_name, ".") || (!strcmp (dir_entry->d_name, "..")))) continue;
|
|
|
|
if ((dir_entry->d_name[0] == '.') && (!(type & E_FM_FILE_TYPE_HIDDEN))) continue;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = E_NEW(E_Fm_Icon, 1);
|
|
|
|
if (!icon) continue;
|
|
|
|
snprintf(path, sizeof(path), "%s/%s", sd->dir, dir_entry->d_name);
|
|
|
|
icon->file = e_fm_file_new(path);
|
2005-10-23 18:17:01 -07:00
|
|
|
if (!icon->file)
|
|
|
|
{
|
|
|
|
E_FREE(icon);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
icon->icon_object = e_fm_icon_add(sd->evas);
|
|
|
|
icon->sd = sd;
|
|
|
|
e_fm_icon_file_set(icon->icon_object, icon->file);
|
2005-11-06 05:09:54 -08:00
|
|
|
sd->files = evas_list_append(sd->files, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
|
2005-11-06 05:38:46 -08:00
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_MOVE, _e_fm_icon_mouse_move_cb, sd);
|
2005-11-06 05:09:54 -08:00
|
|
|
evas_object_show(icon->icon_object);
|
|
|
|
e_icon_layout_pack(sd->layout, icon->icon_object);
|
2005-10-23 18:17:01 -07:00
|
|
|
}
|
2005-11-06 05:09:54 -08:00
|
|
|
i++;
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
e_icon_layout_thaw(sd->layout);
|
|
|
|
|
|
|
|
e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h);
|
|
|
|
evas_object_smart_callback_call(sd->object, "changed", NULL);
|
|
|
|
|
|
|
|
if(!dir_entry) {
|
2005-11-07 07:31:08 -08:00
|
|
|
closedir(sd->dir2);
|
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
sd->files = evas_list_sort(sd->files,
|
|
|
|
evas_list_count(sd->files),
|
|
|
|
_e_fm_files_sort_name_cb);
|
2005-11-07 16:00:30 -08:00
|
|
|
// e_icon_layout_sort(sd->layout, _e_fm_files_sort_layout_name_cb);
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
e_icon_layout_freeze(sd->layout);
|
|
|
|
e_icon_layout_reset(sd->layout);
|
|
|
|
|
|
|
|
for(l = sd->files; l; l = l->next)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
e_icon_layout_pack(sd->layout, icon->icon_object);
|
|
|
|
}
|
|
|
|
e_icon_layout_thaw(sd->layout);
|
2005-11-07 16:00:30 -08:00
|
|
|
|
2005-11-06 05:09:54 -08:00
|
|
|
sd->timer = NULL;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sd->timer = ecore_timer_add(sd->timer_int, _e_fm_dir_files_get, sd);
|
|
|
|
return 0;
|
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static char *
|
|
|
|
_e_fm_dir_pop(const char *path)
|
|
|
|
{
|
|
|
|
char *start, *end, *dir;
|
|
|
|
int i;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
i = 0;
|
|
|
|
start = strchr(path, '/');
|
|
|
|
end = strrchr(path ,'/');
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_dir_monitor_cb(void *data, Ecore_File_Monitor *ecore_file_monitor,
|
|
|
|
Ecore_File_Event event, const char *path)
|
|
|
|
{
|
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-23 09:12:35 -07:00
|
|
|
char *dir;
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_List *l;
|
2005-11-04 13:09:38 -08:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = data;
|
2005-10-23 09:12:35 -07:00
|
|
|
|
2005-11-04 13:09:38 -08:00
|
|
|
switch (event)
|
|
|
|
{
|
|
|
|
case ECORE_FILE_EVENT_DELETED_SELF:
|
|
|
|
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);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ECORE_FILE_EVENT_CREATED_FILE:
|
|
|
|
case ECORE_FILE_EVENT_CREATED_DIRECTORY:
|
|
|
|
icon = E_NEW(E_Fm_Icon, 1);
|
|
|
|
if (!icon) break;
|
|
|
|
icon->file = e_fm_file_new(path);
|
|
|
|
if (!icon->file)
|
|
|
|
{
|
|
|
|
free(icon);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
icon->icon_object = e_fm_icon_add(sd->evas);
|
|
|
|
icon->sd = sd;
|
|
|
|
e_icon_layout_freeze(sd->layout);
|
|
|
|
e_fm_icon_file_set(icon->icon_object, icon->file);
|
|
|
|
//evas_object_resize(icon->icon_object, sd->icon_info.w, sd->icon_info.h);
|
|
|
|
evas_object_show(icon->icon_object);
|
|
|
|
e_icon_layout_pack(sd->layout, icon->icon_object);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
|
|
|
|
evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
|
|
|
|
e_icon_layout_thaw(sd->layout);
|
|
|
|
sd->files = evas_list_prepend(sd->files, icon);
|
|
|
|
_e_fm_redraw(sd);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ECORE_FILE_EVENT_DELETED_FILE:
|
|
|
|
case ECORE_FILE_EVENT_DELETED_DIRECTORY:
|
|
|
|
for (l = sd->files; l; l = l->next)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
if (!strcmp(icon->file->path, path))
|
|
|
|
{
|
|
|
|
sd->files = evas_list_remove_list(sd->files, l);
|
|
|
|
e_icon_layout_freeze(sd->layout);
|
|
|
|
e_icon_layout_unpack(icon->icon_object);
|
|
|
|
e_icon_layout_thaw(sd->layout);
|
|
|
|
_e_fm_file_free(icon);
|
|
|
|
_e_fm_redraw(sd);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_file_free(E_Fm_Icon *icon)
|
|
|
|
{
|
|
|
|
e_icon_layout_unpack(icon->icon_object);
|
|
|
|
evas_object_del(icon->icon_object);
|
|
|
|
e_object_del(E_OBJECT(icon->file));
|
|
|
|
/*
|
|
|
|
if (file->menu)
|
|
|
|
e_object_del(E_OBJECT(file->menu));
|
|
|
|
*/
|
|
|
|
free(icon);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_selections_clear(E_Fm_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Evas_List *l;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 15:29:57 -07:00
|
|
|
D(("_e_fm_selections_clear:\n"));
|
2005-10-20 06:08:51 -07:00
|
|
|
for (l = sd->selection.files; l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = l->data;
|
|
|
|
e_fm_icon_signal_emit(icon->icon_object, "unclicked", "");
|
|
|
|
icon->state.selected = 0;
|
|
|
|
}
|
|
|
|
sd->selection.files = evas_list_free(sd->selection.files);
|
2005-10-20 15:29:57 -07:00
|
|
|
sd->selection.band.files = evas_list_free(sd->selection.band.files);
|
2005-11-02 08:08:21 -08:00
|
|
|
sd->selection.current.file = NULL;
|
|
|
|
sd->selection.current.ptr = NULL;
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_selections_add(E_Fm_Icon *icon, Evas_List *icon_ptr)
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
2005-11-02 08:08:21 -08:00
|
|
|
icon->sd->selection.current.file = icon;
|
|
|
|
icon->sd->selection.current.ptr = icon_ptr;
|
2005-10-20 06:08:51 -07:00
|
|
|
if (icon->state.selected) return;
|
|
|
|
e_fm_icon_signal_emit(icon->icon_object, "clicked", "");
|
|
|
|
icon->sd->selection.files = evas_list_append(icon->sd->selection.files, icon);
|
|
|
|
icon->state.selected = 1;
|
|
|
|
}
|
|
|
|
|
2005-11-02 08:08:21 -08:00
|
|
|
static void
|
|
|
|
_e_fm_selections_current_set(E_Fm_Icon *icon, Evas_List *icon_ptr)
|
|
|
|
{
|
|
|
|
icon->sd->selection.current.file = icon;
|
|
|
|
icon->sd->selection.current.ptr = icon_ptr;
|
|
|
|
if (icon->state.selected) return;
|
|
|
|
e_fm_icon_signal_emit(icon->icon_object, "hilight", "");
|
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static void
|
2005-10-20 15:29:57 -07:00
|
|
|
_e_fm_selections_rect_add(E_Fm_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
|
|
|
Evas_List *l;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
for (l = sd->files; l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord xx, yy, ww, hh;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = l->data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
evas_object_geometry_get(icon->icon_object, &xx, &yy, &ww, &hh);
|
|
|
|
if (E_INTERSECTS(x, y, w, h, xx, yy, ww, hh))
|
|
|
|
{
|
2005-10-20 15:29:57 -07:00
|
|
|
if (!evas_list_find(icon->sd->selection.band.files, icon))
|
|
|
|
{
|
|
|
|
if (icon->state.selected)
|
|
|
|
_e_fm_selections_del(icon);
|
|
|
|
else
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_selections_add(icon, l);
|
2005-10-20 15:29:57 -07:00
|
|
|
icon->sd->selection.band.files = evas_list_append(icon->sd->selection.band.files, icon);
|
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-10-20 15:29:57 -07:00
|
|
|
if (evas_list_find(icon->sd->selection.band.files, icon))
|
|
|
|
{
|
|
|
|
if (icon->state.selected)
|
|
|
|
_e_fm_selections_del(icon);
|
|
|
|
else
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_selections_add(icon, l);
|
2005-10-20 15:29:57 -07:00
|
|
|
icon->sd->selection.band.files = evas_list_remove(icon->sd->selection.band.files, icon);
|
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
2005-10-23 08:18:47 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_selections_del(E_Fm_Icon *icon)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!icon->state.selected) return;
|
|
|
|
e_fm_icon_signal_emit(icon->icon_object, "unclicked", "");
|
|
|
|
icon->sd->selection.files = evas_list_remove(icon->sd->selection.files, icon);
|
2005-11-02 08:08:21 -08:00
|
|
|
if (icon->sd->selection.current.file == icon)
|
2005-10-20 06:08:51 -07:00
|
|
|
{
|
2005-11-02 08:08:21 -08:00
|
|
|
icon->sd->selection.current.file = NULL;
|
2005-10-20 06:08:51 -07:00
|
|
|
if (icon->sd->selection.files)
|
2005-11-02 08:08:21 -08:00
|
|
|
icon->sd->selection.current.file = icon->sd->selection.files->data;
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
|
|
|
icon->state.selected = 0;
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* fake mouse up */
|
2005-10-09 17:55:07 -07:00
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_fake_mouse_up_later(Evas *evas, int button)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Fake_Mouse_Up_Info *info;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-18 09:14:45 -07:00
|
|
|
info = E_NEW(E_Fm_Fake_Mouse_Up_Info, 1);
|
2005-10-10 12:27:22 -07:00
|
|
|
if (!info) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
info->canvas = evas;
|
|
|
|
info->button = button;
|
|
|
|
ecore_job_add(_e_fm_fake_mouse_up_cb, info);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_fake_mouse_up_all_later(Evas *evas)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_fake_mouse_up_later(evas, 1);
|
|
|
|
_e_fm_fake_mouse_up_later(evas, 2);
|
|
|
|
_e_fm_fake_mouse_up_later(evas, 3);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static void
|
|
|
|
_e_fm_fake_mouse_up_cb(void *data)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Fake_Mouse_Up_Info *info;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
info = data;
|
|
|
|
if (!info) return;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
evas_event_feed_mouse_up(info->canvas, info->button, EVAS_BUTTON_NONE, ecore_x_current_time_get(), NULL);
|
|
|
|
free(info);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* mouse events on the bg and on the icons */
|
2005-10-10 12:27:22 -07:00
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-10 08:17:29 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-20 06:08:51 -07:00
|
|
|
Evas_Event_Mouse_Down *ev;
|
|
|
|
E_Menu *mn;
|
|
|
|
E_Menu_Item *mi;
|
|
|
|
int x, y, w, h;
|
2005-10-28 16:37:14 -07:00
|
|
|
|
2005-10-10 08:17:29 -07:00
|
|
|
ev = event_info;
|
2005-10-20 06:08:51 -07:00
|
|
|
sd = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
switch (ev->button)
|
|
|
|
{
|
|
|
|
case 1:
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
_e_fm_selections_clear(sd);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
case 3:
|
|
|
|
if (!sd->win) break;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
mn = e_menu_new();
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
sd->menu = mn;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
/*- Arrange -*/
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
mn = e_menu_new();
|
|
|
|
e_menu_item_submenu_set(mi, mn);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-23 06:08:51 -07:00
|
|
|
/*- New -*/
|
|
|
|
mi = e_menu_item_new(sd->menu);
|
|
|
|
e_menu_item_label_set(mi, "New");
|
|
|
|
e_menu_item_icon_edje_set(mi,
|
|
|
|
(char *)e_theme_edje_file_get("base/theme/fileman",
|
|
|
|
"fileman/button/new"),
|
|
|
|
"fileman/button/new");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
mn = e_menu_new();
|
|
|
|
e_menu_item_submenu_set(mi, mn);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
mi = e_menu_item_new(mn);
|
|
|
|
e_menu_item_label_set(mi, "Directory");
|
|
|
|
e_menu_item_callback_set(mi, _e_fm_menu_new_dir_cb, sd);
|
|
|
|
e_menu_item_icon_edje_set(mi,
|
|
|
|
(char *)e_theme_edje_file_get("base/theme/fileman",
|
|
|
|
"fileman/button/new_dir"),
|
|
|
|
"fileman/button/new_dir");
|
|
|
|
/*- View -*/
|
2005-10-20 06:08:51 -07:00
|
|
|
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"),
|
2005-10-23 08:18:47 -07:00
|
|
|
"fileman/button/view");
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
mn = e_menu_new();
|
|
|
|
e_menu_item_submenu_set(mi, mn);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:08:51 -07:00
|
|
|
/*- Refresh -*/
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-23 06:08:51 -07:00
|
|
|
/*- Properties -*/
|
2005-10-20 06:08:51 -07:00
|
|
|
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");
|
2005-10-21 19:07:39 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ecore_evas_geometry_get(sd->win->ecore_evas, &x, &y, &w, &h);
|
2005-11-03 07:26:46 -08:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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;
|
|
|
|
}
|
2005-10-10 08:17:29 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-10 08:17:29 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 08:17:29 -07:00
|
|
|
Evas_Event_Mouse_Move *ev;
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 08:17:29 -07:00
|
|
|
ev = event_info;
|
|
|
|
sd = data;
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
if (!sd->selection.band.obj)
|
|
|
|
return;
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
if (sd->selection.band.enabled)
|
|
|
|
{
|
|
|
|
Evas_Coord x, y, w, h;
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h);
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
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;
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
|
|
|
}
|
2005-11-06 05:38:46 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
evas_object_geometry_get(sd->selection.band.obj, &x, &y, &w, &h);
|
2005-10-20 15:29:57 -07:00
|
|
|
_e_fm_selections_rect_add(sd, x, y, w, h);
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-20 06:08:51 -07:00
|
|
|
Evas_Event_Mouse_Up *ev;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
sd = data;
|
2005-10-10 12:27:22 -07:00
|
|
|
ev = event_info;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
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);
|
2005-10-20 15:29:57 -07:00
|
|
|
sd->selection.band.files = evas_list_free(sd->selection.band.files);
|
2005-10-20 06:08:51 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
// TODO:
|
2005-10-09 17:55:07 -07:00
|
|
|
// - send signals to edje for animations etc...
|
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-10-09 17:55:07 -07:00
|
|
|
Evas_Event_Mouse_Down *ev;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
ev = event_info;
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
if (ev->button == 1)
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (icon->file->type == E_FM_FILE_TYPE_DIRECTORY && (ev->flags == EVAS_BUTTON_DOUBLE_CLICK))
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
char *fullname;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
if(icon->sd->win)
|
|
|
|
icon->sd->drag.start = 0;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!strcmp(icon->file->name, ".")) return;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!strcmp(icon->file->name, ".."))
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
fullname = _e_fm_dir_pop(icon->sd->dir);
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
fullname = strdup(icon->file->path);
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/* FIXME: we need to fix this, uber hack alert */
|
|
|
|
if (fullname)
|
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (icon->sd->win)
|
|
|
|
e_win_title_set(icon->sd->win, fullname);
|
|
|
|
_e_fm_dir_set(icon->sd, fullname);
|
2005-10-10 12:27:22 -07:00
|
|
|
free(fullname);
|
|
|
|
}
|
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
else if (icon->file->type == E_FM_FILE_TYPE_FILE && (ev->flags == EVAS_BUTTON_DOUBLE_CLICK))
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-11-07 07:31:08 -08:00
|
|
|
if(icon->sd->win)
|
|
|
|
icon->sd->drag.start = 0;
|
2005-10-25 17:19:52 -07:00
|
|
|
|
|
|
|
if(icon->sd->is_selector)
|
|
|
|
{
|
|
|
|
_e_fm_selector_send_file(icon);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
if ((!e_fm_file_assoc_exec(icon->file)) &&
|
|
|
|
(e_fm_file_can_exec(icon->file)))
|
|
|
|
e_fm_file_exec(icon->file);
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
else
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-11-07 07:31:08 -08:00
|
|
|
if(icon->sd->win)
|
|
|
|
{
|
|
|
|
icon->sd->drag.start = 1;
|
|
|
|
icon->sd->drag.x = icon->sd->win->x + ev->canvas.x;
|
|
|
|
icon->sd->drag.y = icon->sd->win->y + ev->canvas.y;
|
|
|
|
icon->sd->drag.icon_object = icon;
|
|
|
|
}
|
2005-10-21 05:24:57 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!icon->state.selected)
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (evas_key_modifier_is_set(evas_key_modifier_get(icon->sd->evas), "Control"))
|
|
|
|
icon->sd->selection.files =
|
|
|
|
evas_list_append(icon->sd->selection.files, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
else
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_selections_clear(icon->sd);
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_selections_add(icon, evas_list_find_list(icon->sd->files, icon));
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
if (evas_key_modifier_is_set(evas_key_modifier_get(icon->sd->evas), "Control"))
|
|
|
|
_e_fm_selections_del(icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
else
|
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_selections_clear(icon->sd);
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_selections_add(icon, evas_list_find_list(icon->sd->files, icon));
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
|
|
|
}
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
2005-10-10 12:27:22 -07:00
|
|
|
else if (ev->button == 3)
|
|
|
|
{
|
|
|
|
E_Menu *mn;
|
|
|
|
E_Menu_Item *mi;
|
|
|
|
int x, y, w, h;
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_selections_clear(icon->sd);
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_selections_add(icon, evas_list_find_list(icon->sd->files, icon));
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
mn = e_menu_new();
|
|
|
|
mi = e_menu_item_new(mn);
|
2005-10-16 13:09:40 -07:00
|
|
|
e_menu_item_label_set(mi, _("Open"));
|
2005-10-20 06:08:51 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_fm_file_menu_open, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-16 13:09:40 -07:00
|
|
|
e_menu_item_label_set(mi, _("Copy"));
|
2005-10-20 06:08:51 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_fm_file_menu_copy, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-16 13:09:40 -07:00
|
|
|
e_menu_item_label_set(mi, _("Cut"));
|
2005-10-20 06:08:51 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_fm_file_menu_cut, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-16 13:09:40 -07:00
|
|
|
e_menu_item_label_set(mi, _("Rename"));
|
2005-10-20 06:08:51 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_fm_file_menu_rename, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-16 13:09:40 -07:00
|
|
|
e_menu_item_label_set(mi, _("Delete"));
|
2005-10-20 06:08:51 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_fm_file_menu_delete, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-16 13:09:40 -07:00
|
|
|
e_menu_item_label_set(mi, _("Properties"));
|
2005-10-21 19:07:39 -07:00
|
|
|
e_menu_item_callback_set(mi, _e_fm_file_menu_properties, icon);
|
2005-10-10 12:27:22 -07:00
|
|
|
e_menu_item_icon_edje_set(mi,
|
|
|
|
(char *)e_theme_edje_file_get("base/theme/fileman",
|
|
|
|
"fileman/button/properties"),
|
|
|
|
"fileman/button/properties");
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
icon->menu = mn;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
if (!icon->sd->win) return;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ecore_evas_geometry_get(icon->sd->win->ecore_evas, &x, &y, &w, &h);
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e_menu_activate_mouse(icon->menu, icon->sd->win->border->zone,
|
2005-10-10 12:27:22 -07:00
|
|
|
ev->output.x + x, ev->output.y + y, 1, 1,
|
|
|
|
E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_fake_mouse_up_all_later(icon->sd->win->evas);
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-10 03:14:49 -07:00
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_icon_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-10 03:14:49 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Event_Mouse_Move *ev;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
ev = event_info;
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
if(icon->sd->win)
|
|
|
|
icon->sd->drag.start = 0;
|
2005-10-10 03:14:49 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_icon_mouse_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-10 03:14:49 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Event_Mouse_In *ev;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
ev = event_info;
|
2005-10-20 06:08:51 -07:00
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e_fm_icon_signal_emit(icon->icon_object, "hilight", "");
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_icon_mouse_out_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Event_Mouse_Out *ev;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ev = event_info;
|
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
|
|
|
e_fm_icon_signal_emit(icon->icon_object, "default", "");
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-11-06 05:38:46 -08:00
|
|
|
static void
|
|
|
|
_e_fm_icon_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-21 05:24:57 -07:00
|
|
|
E_Fm_Icon *icon;
|
2005-11-06 05:38:46 -08:00
|
|
|
Evas_Event_Mouse_Move *ev;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-11-06 05:38:46 -08:00
|
|
|
ev = event_info;
|
2005-10-09 17:55:07 -07:00
|
|
|
sd = data;
|
2005-10-21 19:07:39 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
if(sd->win)
|
|
|
|
icon = sd->drag.icon_object;
|
2005-10-21 05:24:57 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
if (!icon) return;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
if (sd->drag.start && sd->win)
|
2005-10-10 12:27:22 -07:00
|
|
|
{
|
|
|
|
if ((sd->drag.x == -1) && (sd->drag.y == -1))
|
|
|
|
{
|
2005-11-06 05:38:46 -08:00
|
|
|
sd->drag.x = ev->cur.output.x;
|
|
|
|
sd->drag.y = ev->cur.output.y;
|
2005-10-10 12:27:22 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
int dx, dy;
|
|
|
|
|
2005-11-06 05:38:46 -08:00
|
|
|
dx = sd->drag.x - ev->cur.output.x;
|
|
|
|
dy = sd->drag.y - ev->cur.output.y;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
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 *drop_types[] = { "text/uri-list" };
|
|
|
|
|
2005-10-21 05:24:57 -07:00
|
|
|
snprintf(data, sizeof(data), "file://%s", icon->file->path);
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
ecore_evas_geometry_get(sd->win->ecore_evas, &cx, &cy, NULL, NULL);
|
2005-10-21 05:24:57 -07:00
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
2005-10-10 12:27:22 -07:00
|
|
|
drag = e_drag_new(sd->win->container, cx + x, cy + y,
|
|
|
|
drop_types, 1, strdup(data), strlen(data),
|
2005-10-21 05:24:57 -07:00
|
|
|
_e_fm_drop_done_cb);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-21 05:24:57 -07:00
|
|
|
o = e_fm_icon_add(drag->evas);
|
|
|
|
e_fm_icon_file_set(o, icon->file);
|
|
|
|
e_fm_icon_title_set(o, "");
|
2005-10-23 08:18:47 -07:00
|
|
|
evas_object_resize(o, w, h);
|
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
if (!o)
|
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
// FIXME: fallback icon for drag
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-11-07 07:31:08 -08:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
e_drag_xdnd_start(drag, sd->drag.x, sd->drag.y);
|
2005-11-06 05:38:46 -08:00
|
|
|
evas_event_feed_mouse_up(sd->evas, 1, EVAS_BUTTON_NONE, ev->timestamp, NULL);
|
2005-10-10 12:27:22 -07:00
|
|
|
sd->drag.start = 0;
|
|
|
|
}
|
|
|
|
}
|
2005-11-06 05:38:46 -08:00
|
|
|
}
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
static int
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_win_mouse_up_cb(void *data, int type, void *event)
|
|
|
|
{
|
|
|
|
Ecore_X_Event_Mouse_Button_Up *ev;
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
double t;
|
|
|
|
const char *name;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-11-04 17:51:20 -08:00
|
|
|
/* FIXME: DONT use ecore_x events for this. use evas callbacks! */
|
|
|
|
return 1;
|
2005-10-20 06:08:51 -07:00
|
|
|
ev = event;
|
|
|
|
icon = data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
t = ecore_time_get() - e_fm_grab_time;
|
|
|
|
if (t < 1.0) return 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
name = e_entry_text_get(icon->sd->entry_object);
|
|
|
|
e_fm_icon_edit_entry_set(icon->icon_object, NULL);
|
|
|
|
evas_object_focus_set(icon->sd->entry_object, 0);
|
|
|
|
evas_object_del(icon->sd->entry_object);
|
|
|
|
icon->sd->entry_object = NULL;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:39:57 -07:00
|
|
|
_e_fm_file_rename(icon, name);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
ecore_event_handler_del(e_fm_mouse_up_handler);
|
|
|
|
e_fm_mouse_up_handler = NULL;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-23 06:39:57 -07:00
|
|
|
e_grabinput_release(icon->sd->win->evas_win, icon->sd->win->evas_win);
|
2005-10-20 06:08:51 -07:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2005-11-07 16:00:30 -08:00
|
|
|
static void
|
|
|
|
_e_fm_string_replace(const char *src, const char *key, const char *replacement, char *result, size_t resultsize)
|
|
|
|
{
|
|
|
|
size_t resultlen;
|
|
|
|
size_t keylen;
|
|
|
|
|
|
|
|
if(resultsize < 0) return;
|
|
|
|
|
|
|
|
/* special case to prevent infinite loop if key==replacement=="" */
|
|
|
|
if(strcmp(key, replacement) == 0)
|
|
|
|
{
|
|
|
|
snprintf(result, resultsize, "%s", src);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
keylen = strlen(key);
|
|
|
|
|
|
|
|
resultlen = 0;
|
|
|
|
while(*src != '\0' && resultlen+1 < resultsize)
|
|
|
|
{
|
|
|
|
if(strncmp(src, key, keylen) == 0)
|
|
|
|
{
|
|
|
|
snprintf(result+resultlen, resultsize-resultlen, "%s", replacement);
|
|
|
|
resultlen += strlen(result+resultlen);
|
|
|
|
src += keylen;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result[resultlen++] = *src++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result[resultlen] = '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_select_regex(E_Fm_Smart_Data *sd, char *glob)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_List *l;
|
|
|
|
char *regex, *tregex;
|
|
|
|
regex_t reg, *creg;
|
|
|
|
int stars, i;
|
|
|
|
|
|
|
|
stars = 0;
|
|
|
|
for(i = 0; i < strlen(glob); i++)
|
|
|
|
if(glob[i] == '*')
|
|
|
|
stars++;
|
|
|
|
|
|
|
|
tregex = calloc(strlen(glob) + stars + 1, sizeof(char));
|
|
|
|
_e_fm_string_replace(glob, "*", ".*", tregex, (strlen(glob) + stars + 1)*sizeof(char));
|
|
|
|
regex = calloc(strlen(tregex) + 3, sizeof(char));
|
|
|
|
snprintf(regex, (strlen(tregex) + 3)*sizeof(char), "^%s$", tregex);
|
|
|
|
regcomp(®, regex, REG_NOSUB | REG_EXTENDED);
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
for (l = sd->files; l; l = l->next)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
creg = ®
|
|
|
|
if(!regexec(creg, icon->file->name, 0, NULL, 0))
|
|
|
|
{
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
#if 0
|
|
|
|
position:
|
|
|
|
{
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
|
|
|
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
|
|
|
|
{
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
|
|
|
|
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
ev->object = sd->object;
|
|
|
|
ev->x = sd->x;
|
|
|
|
ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
|
|
|
|
ev->w = sd->w;
|
|
|
|
ev->h = sd->h;
|
|
|
|
ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2005-11-06 06:40:58 -08:00
|
|
|
static void
|
2005-11-07 16:00:30 -08:00
|
|
|
__e_fm_icon_goto_key(E_Fm_Smart_Data *sd, char *c)
|
2005-11-06 06:40:58 -08:00
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_List *l;
|
2005-11-07 16:00:30 -08:00
|
|
|
|
|
|
|
return;
|
2005-11-06 06:40:58 -08:00
|
|
|
|
|
|
|
if(sd->selection.current.ptr)
|
|
|
|
{
|
|
|
|
l = sd->selection.current.ptr;
|
|
|
|
icon = sd->selection.current.file;
|
|
|
|
if(icon->file->name[0] == c[0] && l->next)
|
|
|
|
l = l->next;
|
|
|
|
else
|
|
|
|
l = sd->selection.current.ptr;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
l = sd->files;
|
|
|
|
|
|
|
|
for(l; l; l = l->next)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
if(icon->file->name[0] == c[0])
|
|
|
|
{
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
goto position;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(l = sd->files; l != sd->selection.current.ptr; l = l->next)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
if(icon->file->name[0] == c[0])
|
|
|
|
{
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
goto position;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
position:
|
|
|
|
{
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
|
|
|
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
|
|
|
|
{
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
|
|
|
|
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
ev->object = sd->object;
|
|
|
|
ev->x = sd->x;
|
|
|
|
ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
|
|
|
|
ev->w = sd->w;
|
|
|
|
ev->h = sd->h;
|
|
|
|
ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-11-02 08:08:21 -08:00
|
|
|
static void
|
|
|
|
_e_fm_icon_select_up(E_Fm_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Evas_List *l;
|
|
|
|
|
|
|
|
if(sd->selection.current.ptr)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord x, y, x2, y2;
|
|
|
|
|
|
|
|
l = sd->selection.current.ptr;
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, NULL, NULL);
|
|
|
|
x2 = x + 1;
|
|
|
|
l = l->prev;
|
|
|
|
while(l && x != x2)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x2, &y2, NULL, NULL);
|
|
|
|
if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
{
|
|
|
|
if(icon->state.selected)
|
|
|
|
{
|
|
|
|
_e_fm_selections_del(l->data);
|
|
|
|
_e_fm_selections_current_set(l->data, l);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
}
|
|
|
|
l = l->prev;
|
|
|
|
}
|
|
|
|
if(l && !evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
{
|
|
|
|
if(l->next) l = l->next;
|
|
|
|
if(!l) return;
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
}
|
2005-11-06 07:35:06 -08:00
|
|
|
else if(!l)
|
2005-11-04 17:31:05 -08:00
|
|
|
{
|
2005-11-06 07:35:06 -08:00
|
|
|
if(!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(sd->files->data, sd->files);
|
|
|
|
}
|
2005-11-04 17:01:26 -08:00
|
|
|
if(l)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
|
|
|
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
|
|
|
|
{
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
|
|
|
|
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
ev->object = sd->object;
|
|
|
|
ev->x = sd->x;
|
|
|
|
ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
|
|
|
|
ev->w = sd->w;
|
|
|
|
ev->h = sd->h;
|
|
|
|
ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
2005-11-06 06:40:58 -08:00
|
|
|
}
|
2005-11-02 08:08:21 -08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(sd->files->data, sd->files);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_select_down(E_Fm_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Evas_List *l;
|
2005-11-06 07:35:06 -08:00
|
|
|
|
2005-11-02 08:08:21 -08:00
|
|
|
if(sd->selection.current.ptr)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord x, y, x2, y2;
|
|
|
|
|
|
|
|
l = sd->selection.current.ptr;
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, NULL, NULL);
|
|
|
|
x2 = x + 1;
|
|
|
|
l = l->next;
|
|
|
|
while(l && x != x2)
|
|
|
|
{
|
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x2, &y2, NULL, NULL);
|
|
|
|
if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
{
|
|
|
|
if(icon->state.selected)
|
|
|
|
{
|
|
|
|
_e_fm_selections_del(l->data);
|
|
|
|
_e_fm_selections_current_set(l->data, l);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
}
|
|
|
|
l = l->next;
|
|
|
|
}
|
|
|
|
if(l && !evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
{
|
|
|
|
if(l->prev) l = l->prev;
|
|
|
|
if(!l) return;
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(l->data, l);
|
|
|
|
}
|
2005-11-06 07:35:06 -08:00
|
|
|
else if(!l)
|
2005-11-04 17:31:05 -08:00
|
|
|
{
|
2005-11-06 07:35:06 -08:00
|
|
|
if(!evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
_e_fm_selections_clear(sd);
|
2005-11-04 17:31:05 -08:00
|
|
|
_e_fm_selections_add((evas_list_last(sd->files))->data, evas_list_last(sd->files));
|
|
|
|
}
|
2005-11-04 17:01:26 -08:00
|
|
|
if(l)
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord x, y, w, h;
|
2005-11-06 16:21:12 -08:00
|
|
|
|
2005-11-04 17:01:26 -08:00
|
|
|
icon = l->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
|
|
|
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
|
|
|
|
{
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
ev->object = sd->object;
|
|
|
|
ev->x = sd->x;
|
|
|
|
ev->y = sd->child.y + y + h + sd->icon_info.y_space - (sd->y + sd->h);
|
|
|
|
ev->w = sd->w;
|
|
|
|
ev->h = sd->h;
|
|
|
|
ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2005-11-02 08:08:21 -08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(sd->files->data, sd->files);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_select_left(E_Fm_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Evas_List *prev;
|
|
|
|
|
|
|
|
if(sd->selection.current.ptr)
|
|
|
|
{
|
|
|
|
if(sd->selection.current.ptr->prev)
|
|
|
|
{
|
|
|
|
prev = sd->selection.current.ptr->prev;
|
|
|
|
if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
|
|
|
|
icon = prev->data;
|
|
|
|
if(icon->state.selected)
|
|
|
|
{
|
|
|
|
_e_fm_selections_del(prev->data);
|
|
|
|
_e_fm_selections_current_set(prev->data, prev);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(prev->data, prev);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(prev->data, prev);
|
|
|
|
}
|
2005-11-04 17:01:26 -08:00
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
icon = prev->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
|
|
|
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
|
|
|
|
{
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
|
|
|
|
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
ev->object = sd->object;
|
|
|
|
ev->x = sd->x;
|
|
|
|
ev->y = sd->child.y - (sd->y - (y - sd->icon_info.y_space));
|
|
|
|
ev->w = sd->w;
|
|
|
|
ev->h = sd->h;
|
|
|
|
ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2005-11-02 08:08:21 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(sd->files->data, sd->files);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_select_right(E_Fm_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Evas_List *next;
|
|
|
|
|
2005-11-05 04:42:59 -08:00
|
|
|
if (sd->selection.current.ptr)
|
2005-11-02 08:08:21 -08:00
|
|
|
{
|
2005-11-05 04:42:59 -08:00
|
|
|
if (sd->selection.current.ptr->next)
|
2005-11-02 08:08:21 -08:00
|
|
|
{
|
|
|
|
next = sd->selection.current.ptr->next;
|
|
|
|
if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
2005-11-05 04:42:59 -08:00
|
|
|
|
2005-11-02 08:08:21 -08:00
|
|
|
icon = next->data;
|
2005-11-05 04:42:59 -08:00
|
|
|
if (icon->state.selected)
|
2005-11-02 08:08:21 -08:00
|
|
|
{
|
|
|
|
_e_fm_selections_del(next->data);
|
|
|
|
_e_fm_selections_current_set(next->data, next);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(next->data, next);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_e_fm_selections_clear(sd);
|
|
|
|
_e_fm_selections_add(next->data, next);
|
2005-11-04 17:01:26 -08:00
|
|
|
}
|
|
|
|
{
|
|
|
|
E_Fm_Icon *icon;
|
|
|
|
Evas_Coord x, y, w, h;
|
|
|
|
icon = next->data;
|
|
|
|
evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
|
2005-11-05 04:42:59 -08:00
|
|
|
if (!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
|
2005-11-04 17:01:26 -08:00
|
|
|
{
|
|
|
|
E_Event_Fm_Reconfigure *ev;
|
2005-11-05 04:42:59 -08:00
|
|
|
|
2005-11-04 17:01:26 -08:00
|
|
|
ev = E_NEW(E_Event_Fm_Reconfigure, 1);
|
|
|
|
if (ev)
|
|
|
|
{
|
|
|
|
ev->object = sd->object;
|
|
|
|
ev->x = sd->x;
|
|
|
|
ev->y = sd->child.y + y + h + sd->icon_info.y_space - (sd->y + sd->h);
|
|
|
|
ev->w = sd->w;
|
|
|
|
ev->h = sd->h;
|
|
|
|
ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL);
|
|
|
|
}
|
|
|
|
}
|
2005-11-02 08:08:21 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_selections_add(sd->files->data, sd->files);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_icon_run(E_Fm_Smart_Data *sd)
|
|
|
|
{
|
2005-11-02 08:31:18 -08:00
|
|
|
E_Fm_Icon *icon;
|
2005-11-05 04:42:59 -08:00
|
|
|
|
|
|
|
if (sd->selection.current.ptr)
|
2005-11-02 08:31:18 -08:00
|
|
|
{
|
|
|
|
icon = sd->selection.current.file;
|
|
|
|
if (icon->file->type == E_FM_FILE_TYPE_DIRECTORY)
|
|
|
|
{
|
|
|
|
char *fullname;
|
2005-11-05 04:42:59 -08:00
|
|
|
|
2005-11-02 08:31:18 -08:00
|
|
|
if (!strcmp(icon->file->name, ".."))
|
|
|
|
{
|
|
|
|
fullname = _e_fm_dir_pop(icon->sd->dir);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
fullname = strdup(icon->file->path);
|
|
|
|
}
|
|
|
|
if (fullname)
|
|
|
|
{
|
|
|
|
if (icon->sd->win)
|
|
|
|
e_win_title_set(icon->sd->win, fullname);
|
|
|
|
_e_fm_dir_set(icon->sd, fullname);
|
|
|
|
free(fullname);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (icon->file->type == E_FM_FILE_TYPE_FILE)
|
|
|
|
{
|
2005-11-05 04:42:59 -08:00
|
|
|
if (icon->sd->is_selector)
|
2005-11-02 08:31:18 -08:00
|
|
|
{
|
|
|
|
_e_fm_selector_send_file(icon);
|
|
|
|
return;
|
|
|
|
}
|
2005-11-05 04:42:59 -08:00
|
|
|
|
2005-11-02 08:31:18 -08:00
|
|
|
if ((!e_fm_file_assoc_exec(icon->file)) &&
|
|
|
|
(e_fm_file_can_exec(icon->file)))
|
|
|
|
e_fm_file_exec(icon->file);
|
|
|
|
}
|
|
|
|
}
|
2005-11-02 08:08:21 -08:00
|
|
|
}
|
|
|
|
|
2005-11-05 03:13:13 -08:00
|
|
|
static void
|
|
|
|
_e_fm_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
2005-11-02 08:08:21 -08:00
|
|
|
{
|
2005-11-05 04:42:59 -08:00
|
|
|
Evas_Event_Key_Down *ev;
|
2005-11-02 08:08:21 -08:00
|
|
|
E_Fm_Smart_Data *sd;
|
|
|
|
|
2005-11-05 03:13:13 -08:00
|
|
|
ev = event_info;
|
2005-11-06 06:46:39 -08:00
|
|
|
sd = data;
|
2005-11-02 08:08:21 -08:00
|
|
|
|
2005-11-05 03:13:13 -08:00
|
|
|
if (!strcmp(ev->keyname, "Up"))
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_icon_select_up(sd);
|
2005-11-05 03:13:13 -08:00
|
|
|
else if (!strcmp(ev->keyname, "Down"))
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_icon_select_down(sd);
|
2005-11-05 03:13:13 -08:00
|
|
|
else if (!strcmp(ev->keyname, "Left"))
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_icon_select_left(sd);
|
2005-11-05 03:13:13 -08:00
|
|
|
else if (!strcmp(ev->keyname, "Right"))
|
2005-11-02 08:08:21 -08:00
|
|
|
_e_fm_icon_select_right(sd);
|
2005-11-07 16:00:30 -08:00
|
|
|
else if (!strcmp(ev->keyname, "Escape"))
|
|
|
|
{
|
|
|
|
if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
|
|
|
|
{
|
|
|
|
edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
|
|
|
|
edje_object_part_text_set(sd->edje_obj, "text", "");
|
|
|
|
}
|
|
|
|
}
|
2005-11-05 03:13:13 -08:00
|
|
|
else if (!strcmp(ev->keyname, "Return"))
|
2005-11-07 16:00:30 -08:00
|
|
|
{
|
|
|
|
if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
|
|
|
|
{
|
|
|
|
char *buf;
|
|
|
|
|
|
|
|
edje_object_signal_emit(sd->edje_obj, "typebuf_hide", "");
|
|
|
|
buf = strdup(edje_object_part_text_get(sd->edje_obj, "text"));
|
|
|
|
edje_object_part_text_set(sd->edje_obj, "text", "");
|
|
|
|
if(strcmp(buf, ""))
|
|
|
|
_e_fm_icon_select_regex(sd, buf);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_e_fm_icon_run(sd);
|
|
|
|
}
|
2005-11-06 06:46:39 -08:00
|
|
|
else if (!strcmp(ev->keyname, "BackSpace"))
|
|
|
|
{
|
2005-11-07 16:00:30 -08:00
|
|
|
if(!strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
|
2005-11-06 06:46:39 -08:00
|
|
|
{
|
2005-11-07 16:00:30 -08:00
|
|
|
char *str;
|
|
|
|
str = NULL;
|
|
|
|
str = edje_object_part_text_get(sd->edje_obj, "text");
|
|
|
|
if(str)
|
|
|
|
{
|
|
|
|
char *buf;
|
|
|
|
int size;
|
|
|
|
size = strlen(str);
|
|
|
|
buf = calloc(size , sizeof(char));
|
|
|
|
snprintf(buf, size, "%s", str);
|
|
|
|
edje_object_part_text_set(sd->edje_obj, "text", buf);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
char *fullname;
|
|
|
|
|
|
|
|
fullname = _e_fm_dir_pop(sd->dir);
|
|
|
|
if (fullname)
|
|
|
|
{
|
|
|
|
if (sd->win)
|
|
|
|
e_win_title_set(sd->win, fullname);
|
|
|
|
_e_fm_dir_set(sd, fullname);
|
|
|
|
free(fullname);
|
|
|
|
}
|
|
|
|
}
|
2005-11-06 06:46:39 -08:00
|
|
|
}
|
2005-11-06 06:40:58 -08:00
|
|
|
else if(strlen(ev->keyname) == 1)
|
2005-11-07 16:00:30 -08:00
|
|
|
{
|
|
|
|
char *str;
|
|
|
|
str = NULL;
|
|
|
|
str = edje_object_part_text_get(sd->edje_obj, "text");
|
|
|
|
if(str)
|
|
|
|
{
|
|
|
|
char *buf;
|
|
|
|
int size;
|
|
|
|
size = strlen(str) + strlen(ev->string) + 2;
|
|
|
|
buf = calloc(size, sizeof(char));
|
|
|
|
snprintf(buf, size, "%s%s", str, ev->string);
|
|
|
|
edje_object_part_text_set(sd->edje_obj, "text", buf);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edje_object_part_text_set(sd->edje_obj, "text", ev->key);
|
|
|
|
}
|
|
|
|
if(strcmp(edje_object_part_state_get(sd->edje_obj, "typebuffer", NULL), "shown"))
|
|
|
|
edje_object_signal_emit(sd->edje_obj, "typebuf_show", "");
|
|
|
|
}
|
2005-11-02 08:08:21 -08:00
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static int
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_drop_enter_cb(void *data, int type, void *event)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
|
|
|
Ecore_X_Event_Xdnd_Enter *ev;
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
|
|
|
ev = event;
|
|
|
|
sd = data;
|
2005-10-10 12:27:22 -07:00
|
|
|
if (ev->win != sd->win->evas_win) return 1;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_drop_leave_cb(void *data, int type, void *event)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
|
|
|
Ecore_X_Event_Xdnd_Leave *ev;
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
ev = event;
|
|
|
|
sd = data;
|
|
|
|
if (ev->win != sd->win->evas_win) return 1;
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_drop_position_cb(void *data, int type, void *event)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
Ecore_X_Event_Xdnd_Position *ev;
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-09 17:55:07 -07:00
|
|
|
Ecore_X_Rectangle rect;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
ev = event;
|
|
|
|
sd = data;
|
|
|
|
if (ev->win != sd->win->evas_win) return 1;
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
rect.x = 0;
|
|
|
|
rect.y = 0;
|
|
|
|
rect.width = 0;
|
|
|
|
rect.height = 0;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
ecore_x_dnd_send_status(1, 0, rect, ECORE_X_DND_ACTION_PRIVATE);
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_drop_drop_cb(void *data, int type, void *event)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
Ecore_X_Event_Xdnd_Drop *ev;
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-10 12:27:22 -07:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
static int
|
2005-10-10 12:27:22 -07:00
|
|
|
_e_fm_drop_selection_cb(void *data, int type, void *event)
|
2005-10-23 08:18:47 -07:00
|
|
|
{
|
2005-10-10 12:27:22 -07:00
|
|
|
Ecore_X_Event_Selection_Notify *ev;
|
2005-10-18 09:14:45 -07:00
|
|
|
E_Fm_Smart_Data *sd;
|
2005-10-09 17:55:07 -07:00
|
|
|
Ecore_X_Selection_Data_Files *files;
|
2005-10-23 08:18:47 -07:00
|
|
|
int i;
|
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
ev = event;
|
|
|
|
sd = data;
|
2005-10-10 12:27:22 -07:00
|
|
|
if (ev->win != sd->win->evas_win) return 1;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
files = ev->data;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* FIXME: Add this file to the current files */
|
2005-10-09 17:55:07 -07:00
|
|
|
for (i = 0; i < files->num_files; i++)
|
|
|
|
{
|
|
|
|
char new_file[PATH_MAX];
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
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);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-10 12:27:22 -07:00
|
|
|
ecore_x_dnd_send_finished();
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_redraw(sd);
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
|
2005-10-09 17:55:07 -07:00
|
|
|
static void
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_drop_done_cb(E_Drag *drag, int dropped)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
/* FIXME: If someone takes this internal drop, we might want to not free it */
|
|
|
|
free(drag->data);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
/* sort functions */
|
2005-10-09 17:55:07 -07:00
|
|
|
static int
|
2005-10-20 06:08:51 -07:00
|
|
|
_e_fm_files_sort_name_cb(void *d1, void *d2)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *e1, *e2;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e1 = d1;
|
|
|
|
e2 = d2;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
return (strcmp(e1->file->name, e2->file->name));
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
|
|
|
|
2005-11-07 07:31:08 -08:00
|
|
|
static int
|
|
|
|
_e_fm_files_sort_layout_name_cb(void *d1, void *d2)
|
|
|
|
{
|
|
|
|
Evas_Object *e1, *e2;
|
|
|
|
E_Fm_File *f1, *f2;
|
|
|
|
|
|
|
|
e1 = d1;
|
|
|
|
e2 = d2;
|
|
|
|
|
|
|
|
f1 = e_fm_icon_file_get(e1);
|
|
|
|
f2 = e_fm_icon_file_get(e2);
|
|
|
|
|
|
|
|
return (strcmp(f1->name, f2->name));
|
|
|
|
}
|
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
static int
|
|
|
|
_e_fm_files_sort_modtime_cb(void *d1, void *d2)
|
2005-10-09 17:55:07 -07:00
|
|
|
{
|
2005-10-20 06:08:51 -07:00
|
|
|
E_Fm_Icon *e1, *e2;
|
2005-10-23 08:18:47 -07:00
|
|
|
|
2005-10-20 06:08:51 -07:00
|
|
|
e1 = d1;
|
|
|
|
e2 = d2;
|
2005-10-09 17:55:07 -07:00
|
|
|
|
2005-10-23 08:18:47 -07:00
|
|
|
return (e1->file->mtime > e2->file->mtime);
|
2005-10-09 17:55:07 -07:00
|
|
|
}
|
2005-10-25 17:19:52 -07:00
|
|
|
|
|
|
|
static void
|
|
|
|
_e_fm_selector_send_file(E_Fm_Icon *icon)
|
|
|
|
{
|
|
|
|
icon->sd->selector_func(icon->sd->object, strdup(icon->file->path), icon->sd->selector_data);
|
|
|
|
}
|