forked from enlightenment/enlightenment
added icon for .desktop file for e (for xsessions)
fm2 now instant-updates on dnd and delete/rename/new dir fms also instant-updates on-disk file changes SVN revision: 26608
This commit is contained in:
parent
2a16d00cf8
commit
df56bb3761
9
TODO
9
TODO
|
@ -8,6 +8,11 @@ Some of the things (in very short form) that need to be done to E17...
|
||||||
BUGS / FIXES
|
BUGS / FIXES
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
* BUG: on resolution (down to a lower res) change windows used to be shuffled
|
||||||
|
to a smaller size then reshuffled back to where they were when res goes up
|
||||||
|
again - but this seems to have broken.
|
||||||
|
* BUG: screen res popup with "are u sure u want to keep this res" doesnt center
|
||||||
|
itself (goes to top-left) sometimes.
|
||||||
* BUG: smart placement seems to screw up if a shelf is at the top of the screen
|
* BUG: smart placement seems to screw up if a shelf is at the top of the screen
|
||||||
* BUG: e17 screen res diaolg doesnt work under xephyr - why?
|
* BUG: e17 screen res diaolg doesnt work under xephyr - why?
|
||||||
* BUG: "match this window only" doesnt fall back to other unused remembers
|
* BUG: "match this window only" doesnt fall back to other unused remembers
|
||||||
|
@ -20,6 +25,10 @@ Some of the things (in very short form) that need to be done to E17...
|
||||||
ESSENTIAL FEATURES
|
ESSENTIAL FEATURES
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
* fm2 needs a way to bypass thumb gen anim on just a unrealize/realize as well
|
||||||
|
as change state instantly if it already was selected
|
||||||
|
* fm2 needs right click menu for enable/disable .order file (will change the
|
||||||
|
behavior of a dir on dnd and all sorts of stuff)
|
||||||
* fm2 needs way to replace or extend the right click menu (disable/enable
|
* fm2 needs way to replace or extend the right click menu (disable/enable
|
||||||
rename/delete/refresh etc.)
|
rename/delete/refresh etc.)
|
||||||
* fm2 needs a mime filter
|
* fm2 needs a mime filter
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
filesdir = $(datadir)/enlightenment/data/images
|
filesdir = $(datadir)/enlightenment/data/images
|
||||||
files_DATA = \
|
files_DATA = \
|
||||||
|
enlightenment.png \
|
||||||
test.png \
|
test.png \
|
||||||
test.jpg \
|
test.jpg \
|
||||||
test.edj
|
test.edj
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
|
@ -3,5 +3,6 @@ Encoding=UTF-8
|
||||||
Name=Enlightenment
|
Name=Enlightenment
|
||||||
Comment=Log in using Enlightenment (Version @VERSION@)
|
Comment=Log in using Enlightenment (Version @VERSION@)
|
||||||
Type=XSession
|
Type=XSession
|
||||||
|
Icon=@prefix@/share/enlightenment/data/images/enlightenment.png
|
||||||
Exec=@prefix@/bin/enlightenment_start
|
Exec=@prefix@/bin/enlightenment_start
|
||||||
TryExec=@prefix@/bin/enlightenment_start
|
TryExec=@prefix@/bin/enlightenment_start
|
||||||
|
|
690
src/bin/e_fm.c
690
src/bin/e_fm.c
|
@ -8,7 +8,7 @@
|
||||||
/* FIXME: display symlinks in icons somehow */
|
/* FIXME: display symlinks in icons somehow */
|
||||||
/* FIXME: bug: drag multiple files doesnt display all files being dragged
|
/* FIXME: bug: drag multiple files doesnt display all files being dragged
|
||||||
only 1 icon shown to be dragged (instead of at least a group) */
|
only 1 icon shown to be dragged (instead of at least a group) */
|
||||||
/* FIXME: need a mapping of mimietype to actions to do on the file
|
/* FIXME: need a mapping of mimetype to actions to do on the file
|
||||||
* (e actions like import as wallpaper etc. as well as execute app
|
* (e actions like import as wallpaper etc. as well as execute app
|
||||||
* X on the file based on what mimetypes the app handles) */
|
* X on the file based on what mimetypes the app handles) */
|
||||||
/* FIXME: use edje messages & embryo for scrolling of bg's */
|
/* FIXME: use edje messages & embryo for scrolling of bg's */
|
||||||
|
@ -20,9 +20,17 @@
|
||||||
* custom frames or icons yet
|
* custom frames or icons yet
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
FILE_ADD,
|
||||||
|
FILE_DEL,
|
||||||
|
FILE_CHANGE
|
||||||
|
} E_Fm2_Action_Type;
|
||||||
|
|
||||||
typedef struct _E_Fm2_Smart_Data E_Fm2_Smart_Data;
|
typedef struct _E_Fm2_Smart_Data E_Fm2_Smart_Data;
|
||||||
typedef struct _E_Fm2_Region E_Fm2_Region;
|
typedef struct _E_Fm2_Region E_Fm2_Region;
|
||||||
typedef struct _E_Fm2_Icon E_Fm2_Icon;
|
typedef struct _E_Fm2_Icon E_Fm2_Icon;
|
||||||
|
typedef struct _E_Fm2_Action E_Fm2_Action;
|
||||||
|
|
||||||
struct _E_Fm2_Smart_Data
|
struct _E_Fm2_Smart_Data
|
||||||
{
|
{
|
||||||
|
@ -80,6 +88,17 @@ struct _E_Fm2_Smart_Data
|
||||||
int iter;
|
int iter;
|
||||||
} tmp;
|
} tmp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
Evas_List *actions;
|
||||||
|
Ecore_Idler *idler;
|
||||||
|
Ecore_Timer *timer;
|
||||||
|
unsigned char deletions : 1;
|
||||||
|
} live;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
Ecore_File_Monitor *monitor;
|
||||||
|
} monitor;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
char *buf;
|
char *buf;
|
||||||
} typebuf;
|
} typebuf;
|
||||||
|
@ -130,8 +149,16 @@ struct _E_Fm2_Icon
|
||||||
unsigned char down_sel : 1;
|
unsigned char down_sel : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _E_Fm2_Action
|
||||||
|
{
|
||||||
|
E_Fm2_Action_Type type;
|
||||||
|
char *file;
|
||||||
|
char *file2;
|
||||||
|
int flags;
|
||||||
|
};
|
||||||
|
|
||||||
static const char *_e_fm2_dev_path_map(const char *dev, const char *path);
|
static const char *_e_fm2_dev_path_map(const char *dev, const char *path);
|
||||||
static void _e_fm2_file_add(Evas_Object *obj, char *file, int unique);
|
static void _e_fm2_file_add(Evas_Object *obj, char *file, int unique, char *file_rel, int after);
|
||||||
static void _e_fm2_file_del(Evas_Object *obj, char *file);
|
static void _e_fm2_file_del(Evas_Object *obj, char *file);
|
||||||
static void _e_fm2_scan_start(Evas_Object *obj);
|
static void _e_fm2_scan_start(Evas_Object *obj);
|
||||||
static void _e_fm2_scan_stop(Evas_Object *obj);
|
static void _e_fm2_scan_stop(Evas_Object *obj);
|
||||||
|
@ -145,6 +172,8 @@ static void _e_fm2_regions_eval(Evas_Object *obj);
|
||||||
static void _e_fm2_config_free(E_Fm2_Config *cfg);
|
static void _e_fm2_config_free(E_Fm2_Config *cfg);
|
||||||
|
|
||||||
static E_Fm2_Icon *_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file);
|
static E_Fm2_Icon *_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file);
|
||||||
|
static void _e_fm2_icon_unfill(E_Fm2_Icon *ic);
|
||||||
|
static int _e_fm2_icon_fill(E_Fm2_Icon *ic);
|
||||||
static void _e_fm2_icon_free(E_Fm2_Icon *ic);
|
static void _e_fm2_icon_free(E_Fm2_Icon *ic);
|
||||||
static void _e_fm2_icon_realize(E_Fm2_Icon *ic);
|
static void _e_fm2_icon_realize(E_Fm2_Icon *ic);
|
||||||
static void _e_fm2_icon_unrealize(E_Fm2_Icon *ic);
|
static void _e_fm2_icon_unrealize(E_Fm2_Icon *ic);
|
||||||
|
@ -233,6 +262,16 @@ static void _e_fm2_file_delete_yes_cb(void *data, E_Dialog *dialog);
|
||||||
static void _e_fm2_file_delete_no_cb(void *data, E_Dialog *dialog);
|
static void _e_fm2_file_delete_no_cb(void *data, E_Dialog *dialog);
|
||||||
static void _e_fm2_refresh_job_cb(void *data);
|
static void _e_fm2_refresh_job_cb(void *data);
|
||||||
|
|
||||||
|
static void _e_fm2_live_file_add(Evas_Object *obj, char *file, char *file_rel, int after);
|
||||||
|
static void _e_fm2_live_file_del(Evas_Object *obj, char *file);
|
||||||
|
static void _e_fm2_live_file_changed(Evas_Object *obj, char *file);
|
||||||
|
static void _e_fm2_live_process_begin(Evas_Object *obj);
|
||||||
|
static void _e_fm2_live_process_end(Evas_Object *obj);
|
||||||
|
static void _e_fm2_live_process(Evas_Object *obj);
|
||||||
|
static int _e_fm2_cb_live_idler(void *data);
|
||||||
|
static int _e_fm2_cb_live_timer(void *data);
|
||||||
|
static void _e_fm2_cb_file_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path);
|
||||||
|
|
||||||
static char *_e_fm2_meta_path = NULL;
|
static char *_e_fm2_meta_path = NULL;
|
||||||
static Evas_Smart *_e_fm2_smart = NULL;
|
static Evas_Smart *_e_fm2_smart = NULL;
|
||||||
static Evas_List *_e_fm2_list = NULL;
|
static Evas_List *_e_fm2_list = NULL;
|
||||||
|
@ -734,7 +773,7 @@ _e_fm2_dev_path_map(const char *dev, const char *path)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_fm2_file_add(Evas_Object *obj, char *file, int unique)
|
_e_fm2_file_add(Evas_Object *obj, char *file, int unique, char *file_rel, int after)
|
||||||
{
|
{
|
||||||
E_Fm2_Smart_Data *sd;
|
E_Fm2_Smart_Data *sd;
|
||||||
E_Fm2_Icon *ic, *ic2;
|
E_Fm2_Icon *ic, *ic2;
|
||||||
|
@ -751,7 +790,7 @@ _e_fm2_file_add(Evas_Object *obj, char *file, int unique)
|
||||||
if (!strcmp(ic->info.file, file))
|
if (!strcmp(ic->info.file, file))
|
||||||
{
|
{
|
||||||
sd->tmp.last_insert = NULL;
|
sd->tmp.last_insert = NULL;
|
||||||
sd->iconlist_changed = 1;
|
// sd->iconlist_changed = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -761,7 +800,7 @@ _e_fm2_file_add(Evas_Object *obj, char *file, int unique)
|
||||||
if (!strcmp(ic->info.file, file))
|
if (!strcmp(ic->info.file, file))
|
||||||
{
|
{
|
||||||
sd->tmp.last_insert = NULL;
|
sd->tmp.last_insert = NULL;
|
||||||
sd->iconlist_changed = 1;
|
// sd->iconlist_changed = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -770,22 +809,43 @@ _e_fm2_file_add(Evas_Object *obj, char *file, int unique)
|
||||||
ic = _e_fm2_icon_new(sd, file);
|
ic = _e_fm2_icon_new(sd, file);
|
||||||
if (ic)
|
if (ic)
|
||||||
{
|
{
|
||||||
/* respekt da ordah! */
|
if (!file_rel)
|
||||||
if (sd->order_file)
|
{
|
||||||
sd->queue = evas_list_append(sd->queue, ic);
|
/* respekt da ordah! */
|
||||||
|
if (sd->order_file)
|
||||||
|
sd->queue = evas_list_append(sd->queue, ic);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* insertion sort it here to spread the sort load into idle time */
|
||||||
|
for (l = sd->queue; l; l = l->next)
|
||||||
|
{
|
||||||
|
ic2 = l->data;
|
||||||
|
if (_e_fm2_cb_icon_sort(ic, ic2) < 0)
|
||||||
|
{
|
||||||
|
sd->queue = evas_list_prepend_relative_list(sd->queue, ic, l);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!l) sd->queue = evas_list_append(sd->queue, ic);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* insertion sort it here to spread the sort load into idle time */
|
for (l = sd->icons; l; l = l->next)
|
||||||
for (l = sd->queue; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
ic2 = l->data;
|
ic2 = l->data;
|
||||||
if (_e_fm2_cb_icon_sort(ic, ic2) < 0)
|
if (!strcmp(ic2->info.file, file_rel))
|
||||||
{
|
{
|
||||||
sd->queue = evas_list_prepend_relative_list(sd->queue, ic, l);
|
printf("ADD %s rel: %s after=%i\n",
|
||||||
|
ic->info.file, ic2->info.file, after);
|
||||||
|
if (after)
|
||||||
|
sd->icons = evas_list_append_relative(sd->icons, ic, ic2);
|
||||||
|
else
|
||||||
|
sd->icons = evas_list_prepend_relative(sd->icons, ic, ic2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!l) sd->queue = evas_list_append(sd->queue, ic);
|
if (!l) sd->icons = evas_list_append(sd->icons, ic);
|
||||||
}
|
}
|
||||||
sd->tmp.last_insert = NULL;
|
sd->tmp.last_insert = NULL;
|
||||||
sd->iconlist_changed = 1;
|
sd->iconlist_changed = 1;
|
||||||
|
@ -796,12 +856,23 @@ static void
|
||||||
_e_fm2_file_del(Evas_Object *obj, char *file)
|
_e_fm2_file_del(Evas_Object *obj, char *file)
|
||||||
{
|
{
|
||||||
E_Fm2_Smart_Data *sd;
|
E_Fm2_Smart_Data *sd;
|
||||||
|
E_Fm2_Icon *ic;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
sd = evas_object_smart_data_get(obj);
|
sd = evas_object_smart_data_get(obj);
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
/* find icon of file and remove from unsorted or main list */
|
for (l = sd->icons; l; l = l->next)
|
||||||
/* FIXME: find and remove */
|
{
|
||||||
sd->iconlist_changed = 1;
|
ic = l->data;
|
||||||
|
if (!strcmp(ic->info.file, file))
|
||||||
|
{
|
||||||
|
sd->icons = evas_list_remove_list(sd->icons, l);
|
||||||
|
if (ic->region)
|
||||||
|
ic->region->list = evas_list_remove(ic->region->list, ic);
|
||||||
|
_e_fm2_icon_free(ic);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -828,6 +899,8 @@ _e_fm2_scan_start(Evas_Object *obj)
|
||||||
if ((sd->scan_idler) || (sd->scan_timer)) return;
|
if ((sd->scan_idler) || (sd->scan_timer)) return;
|
||||||
sd->order_file = 0;
|
sd->order_file = 0;
|
||||||
ecore_desktop_instrumentation_reset();
|
ecore_desktop_instrumentation_reset();
|
||||||
|
if (sd->monitor.monitor) ecore_file_monitor_del(sd->monitor.monitor);
|
||||||
|
sd->monitor.monitor = ecore_file_monitor_add(sd->realpath, _e_fm2_cb_file_monitor, obj);
|
||||||
sd->scan_idler = ecore_idler_add(_e_fm2_cb_scan_idler, obj);
|
sd->scan_idler = ecore_idler_add(_e_fm2_cb_scan_idler, obj);
|
||||||
sd->scan_timer = ecore_timer_add(0.2, _e_fm2_cb_scan_timer, obj);
|
sd->scan_timer = ecore_timer_add(0.2, _e_fm2_cb_scan_timer, obj);
|
||||||
edje_object_signal_emit(sd->overlay, "e,state,busy,start", "e");
|
edje_object_signal_emit(sd->overlay, "e,state,busy,start", "e");
|
||||||
|
@ -883,6 +956,8 @@ _e_fm2_scan_stop(Evas_Object *obj)
|
||||||
_e_fm2_queue_free(obj);
|
_e_fm2_queue_free(obj);
|
||||||
_e_fm2_obj_icons_place(sd);
|
_e_fm2_obj_icons_place(sd);
|
||||||
ecore_desktop_instrumentation_print();
|
ecore_desktop_instrumentation_print();
|
||||||
|
|
||||||
|
_e_fm2_live_process_begin(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1334,36 +1409,73 @@ static E_Fm2_Icon *
|
||||||
_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
||||||
{
|
{
|
||||||
E_Fm2_Icon *ic;
|
E_Fm2_Icon *ic;
|
||||||
|
|
||||||
|
/* create icon */
|
||||||
|
ic = E_NEW(E_Fm2_Icon, 1);
|
||||||
|
ic->info.file = evas_stringshare_add(file);
|
||||||
|
ic->sd = sd;
|
||||||
|
if (!_e_fm2_icon_fill(ic))
|
||||||
|
{
|
||||||
|
evas_stringshare_del(ic->info.file);
|
||||||
|
free(ic);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return ic;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_icon_unfill(E_Fm2_Icon *ic)
|
||||||
|
{
|
||||||
|
if (ic->info.mime) evas_stringshare_del(ic->info.mime);
|
||||||
|
if (ic->info.label) evas_stringshare_del(ic->info.label);
|
||||||
|
if (ic->info.comment) evas_stringshare_del(ic->info.comment);
|
||||||
|
if (ic->info.generic) evas_stringshare_del(ic->info.generic);
|
||||||
|
if (ic->info.icon) evas_stringshare_del(ic->info.icon);
|
||||||
|
if (ic->info.link) evas_stringshare_del(ic->info.link);
|
||||||
|
if (ic->info.real_link) evas_stringshare_del(ic->info.real_link);
|
||||||
|
if (ic->info.pseudo_dir) evas_stringshare_del(ic->info.pseudo_dir);
|
||||||
|
ic->info.mime = NULL;
|
||||||
|
ic->info.label = NULL;
|
||||||
|
ic->info.comment = NULL;
|
||||||
|
ic->info.generic = NULL;
|
||||||
|
ic->info.icon = NULL;
|
||||||
|
ic->info.link = NULL;
|
||||||
|
ic->info.real_link = NULL;
|
||||||
|
ic->info.pseudo_dir = NULL;
|
||||||
|
ic->info.broken_link = 0;
|
||||||
|
ic->info.pseudo_link = 0;
|
||||||
|
ic->info.mount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_fm2_icon_fill(E_Fm2_Icon *ic)
|
||||||
|
{
|
||||||
Evas_Coord mw = 0, mh = 0;
|
Evas_Coord mw = 0, mh = 0;
|
||||||
Evas_Object *obj, *obj2;
|
Evas_Object *obj, *obj2;
|
||||||
char buf[4096], *lnk;
|
char buf[4096], *lnk;
|
||||||
const char *mime;
|
const char *mime;
|
||||||
|
|
||||||
/* create icon */
|
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->info.file);
|
||||||
ic = E_NEW(E_Fm2_Icon, 1);
|
lnk = ecore_file_readlink(buf);
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", sd->realpath, file);
|
|
||||||
if (stat(buf, &(ic->info.statinfo)) == -1)
|
if (stat(buf, &(ic->info.statinfo)) == -1)
|
||||||
{
|
{
|
||||||
if (sd->config->view.extra_file_source)
|
if (lnk)
|
||||||
{
|
ic->info.broken_link = 1;
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", sd->config->view.extra_file_source, file);
|
|
||||||
if (stat(buf, &(ic->info.statinfo)) == -1)
|
|
||||||
{
|
|
||||||
free(ic);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
ic->info.pseudo_dir = evas_stringshare_add(sd->config->view.extra_file_source);
|
|
||||||
ic->info.pseudo_link = 1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
free(ic);
|
if (ic->sd->config->view.extra_file_source)
|
||||||
return NULL;
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%s/%s",
|
||||||
|
ic->sd->config->view.extra_file_source, ic->info.file);
|
||||||
|
if (stat(buf, &(ic->info.statinfo)) == -1)
|
||||||
|
return 0;
|
||||||
|
ic->info.pseudo_dir = evas_stringshare_add(ic->sd->config->view.extra_file_source);
|
||||||
|
ic->info.pseudo_link = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ic->sd = sd;
|
|
||||||
ic->info.file = evas_stringshare_add(file);
|
|
||||||
lnk = ecore_file_readlink(buf);
|
|
||||||
if (lnk)
|
if (lnk)
|
||||||
{
|
{
|
||||||
if (lnk[0] == '/')
|
if (lnk[0] == '/')
|
||||||
|
@ -1375,7 +1487,7 @@ _e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
||||||
{
|
{
|
||||||
char *rp;
|
char *rp;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", sd->realpath, lnk);
|
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, lnk);
|
||||||
rp = ecore_file_realpath(buf);
|
rp = ecore_file_realpath(buf);
|
||||||
if (rp)
|
if (rp)
|
||||||
{
|
{
|
||||||
|
@ -1393,11 +1505,12 @@ _e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
||||||
if (mime) ic->info.mime = evas_stringshare_add(mime);
|
if (mime) ic->info.mime = evas_stringshare_add(mime);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((e_util_glob_case_match(ic->info.file, "*.desktop")) || (e_util_glob_case_match(ic->info.file, "*.directory")))
|
if ((e_util_glob_case_match(ic->info.file, "*.desktop")) ||
|
||||||
|
(e_util_glob_case_match(ic->info.file, "*.directory")))
|
||||||
_e_fm2_icon_desktop_load(ic);
|
_e_fm2_icon_desktop_load(ic);
|
||||||
evas_event_freeze(evas_object_evas_get(sd->obj));
|
evas_event_freeze(evas_object_evas_get(ic->sd->obj));
|
||||||
edje_freeze();
|
edje_freeze();
|
||||||
switch (sd->config->view.mode)
|
switch (ic->sd->config->view.mode)
|
||||||
{
|
{
|
||||||
case E_FM2_VIEW_MODE_ICONS:
|
case E_FM2_VIEW_MODE_ICONS:
|
||||||
case E_FM2_VIEW_MODE_GRID_ICONS:
|
case E_FM2_VIEW_MODE_GRID_ICONS:
|
||||||
|
@ -1420,53 +1533,53 @@ _e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
||||||
* fileman/scrollframe
|
* fileman/scrollframe
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if ((!sd->config->icon.fixed.w) || (!sd->config->icon.fixed.h))
|
if ((!ic->sd->config->icon.fixed.w) || (!ic->sd->config->icon.fixed.h))
|
||||||
{
|
{
|
||||||
obj = sd->tmp.obj;
|
obj = ic->sd->tmp.obj;
|
||||||
if (!obj)
|
if (!obj)
|
||||||
{
|
{
|
||||||
obj = edje_object_add(evas_object_evas_get(sd->obj));
|
obj = edje_object_add(evas_object_evas_get(ic->sd->obj));
|
||||||
e_theme_edje_object_set(obj, "base/theme/fileman",
|
e_theme_edje_object_set(obj, "base/theme/fileman",
|
||||||
"e/fileman/icon/variable");
|
"e/fileman/icon/variable");
|
||||||
sd->tmp.obj = obj;
|
ic->sd->tmp.obj = obj;
|
||||||
}
|
}
|
||||||
_e_fm2_icon_label_set(ic, obj);
|
_e_fm2_icon_label_set(ic, obj);
|
||||||
edje_object_size_min_calc(obj, &mw, &mh);
|
edje_object_size_min_calc(obj, &mw, &mh);
|
||||||
}
|
}
|
||||||
ic->w = mw;
|
ic->w = mw;
|
||||||
ic->h = mh;
|
ic->h = mh;
|
||||||
if (sd->config->icon.fixed.w) ic->w = sd->config->icon.icon.w;
|
if (ic->sd->config->icon.fixed.w) ic->w = ic->sd->config->icon.icon.w;
|
||||||
if (sd->config->icon.fixed.h) ic->h = sd->config->icon.icon.h;
|
if (ic->sd->config->icon.fixed.h) ic->h = ic->sd->config->icon.icon.h;
|
||||||
ic->min_w = mw;
|
ic->min_w = mw;
|
||||||
ic->min_h = mh;
|
ic->min_h = mh;
|
||||||
break;
|
break;
|
||||||
case E_FM2_VIEW_MODE_LIST:
|
case E_FM2_VIEW_MODE_LIST:
|
||||||
{
|
{
|
||||||
obj = sd->tmp.obj;
|
obj = ic->sd->tmp.obj;
|
||||||
if (!obj)
|
if (!obj)
|
||||||
{
|
{
|
||||||
obj = edje_object_add(evas_object_evas_get(sd->obj));
|
obj = edje_object_add(evas_object_evas_get(ic->sd->obj));
|
||||||
if (sd->config->icon.fixed.w)
|
if (ic->sd->config->icon.fixed.w)
|
||||||
e_theme_edje_object_set(obj, "base/theme/fileman",
|
e_theme_edje_object_set(obj, "base/theme/fileman",
|
||||||
"e/fileman/list/fixed");
|
"e/fileman/list/fixed");
|
||||||
else
|
else
|
||||||
e_theme_edje_object_set(obj, "base/theme/fileman",
|
e_theme_edje_object_set(obj, "base/theme/fileman",
|
||||||
"e/fileman/list/variable");
|
"e/fileman/list/variable");
|
||||||
sd->tmp.obj = obj;
|
ic->sd->tmp.obj = obj;
|
||||||
}
|
}
|
||||||
_e_fm2_icon_label_set(ic, obj);
|
_e_fm2_icon_label_set(ic, obj);
|
||||||
obj2 = sd->tmp.obj2;
|
obj2 = ic->sd->tmp.obj2;
|
||||||
if (!obj2)
|
if (!obj2)
|
||||||
{
|
{
|
||||||
obj2 = evas_object_rectangle_add(evas_object_evas_get(sd->obj));
|
obj2 = evas_object_rectangle_add(evas_object_evas_get(ic->sd->obj));
|
||||||
sd->tmp.obj2 = obj2;
|
ic->sd->tmp.obj2 = obj2;
|
||||||
}
|
}
|
||||||
edje_extern_object_min_size_set(obj2, sd->config->icon.list.w, sd->config->icon.list.h);
|
edje_extern_object_min_size_set(obj2, ic->sd->config->icon.list.w, ic->sd->config->icon.list.h);
|
||||||
edje_extern_object_max_size_set(obj2, sd->config->icon.list.w, sd->config->icon.list.h);
|
edje_extern_object_max_size_set(obj2, ic->sd->config->icon.list.w, ic->sd->config->icon.list.h);
|
||||||
edje_object_part_swallow(obj, "e.swallow.icon", obj2);
|
edje_object_part_swallow(obj, "e.swallow.icon", obj2);
|
||||||
edje_object_size_min_calc(obj, &mw, &mh);
|
edje_object_size_min_calc(obj, &mw, &mh);
|
||||||
}
|
}
|
||||||
if (mw < sd->w) ic->w = sd->w;
|
if (mw < ic->sd->w) ic->w = ic->sd->w;
|
||||||
else ic->w = mw;
|
else ic->w = mw;
|
||||||
ic->h = mh;
|
ic->h = mh;
|
||||||
ic->min_w = mw;
|
ic->min_w = mw;
|
||||||
|
@ -1476,8 +1589,8 @@ _e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
edje_thaw();
|
edje_thaw();
|
||||||
evas_event_thaw(evas_object_evas_get(obj));
|
evas_event_thaw(evas_object_evas_get(ic->sd->obj));
|
||||||
return ic;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2776,18 +2889,26 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
/* FIXME: error - file exists */
|
/* FIXME: error - file exists */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ecore_file_mv(ll->data, buf);
|
{
|
||||||
|
if (ecore_file_mv(ll->data, buf))
|
||||||
|
_e_fm2_live_file_add(sd->obj,
|
||||||
|
ecore_file_get_file(ll->data),
|
||||||
|
NULL, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), "%s/.order",
|
_e_fm2_live_file_add(sd->obj,
|
||||||
sd->realpath);
|
ecore_file_get_file(ll->data),
|
||||||
f = fopen(buf, "a");
|
NULL, 0);
|
||||||
if (f)
|
// snprintf(buf, sizeof(buf), "%s/.order",
|
||||||
{
|
// sd->realpath);
|
||||||
fprintf(f, "%s\n", ecore_file_get_file(ll->data));
|
// f = fopen(buf, "a");
|
||||||
fclose(f);
|
// if (f)
|
||||||
}
|
// {
|
||||||
|
// fprintf(f, "%s\n", ecore_file_get_file(ll->data));
|
||||||
|
// fclose(f);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2800,15 +2921,20 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
/* FIXME: error - file exists */
|
/* FIXME: error - file exists */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ecore_file_mv(ll->data, buf);
|
{
|
||||||
|
if (ecore_file_mv(ll->data, buf))
|
||||||
|
_e_fm2_live_file_add(sd->obj,
|
||||||
|
ecore_file_get_file(ll->data),
|
||||||
|
NULL, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free(d);
|
free(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
refresh = 1; /* refresh src fm */
|
// refresh = 1; /* refresh src fm */
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
e_fm2_refresh(sd->obj); /* refresh dst fm */
|
// e_fm2_refresh(sd->obj); /* refresh dst fm */
|
||||||
}
|
}
|
||||||
else if (sd->drop_icon) /* inot or before/after an icon */
|
else if (sd->drop_icon) /* inot or before/after an icon */
|
||||||
{
|
{
|
||||||
|
@ -2816,78 +2942,23 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
if (sd->drop_after == -1) /* put into subdir in icon */
|
if (sd->drop_after == -1) /* put into subdir in icon */
|
||||||
{
|
{
|
||||||
/* move file into dir that this icon is for */
|
/* move file into dir that this icon is for */
|
||||||
snprintf(buf, sizeof(buf), "%s/%s/.order",
|
for (ll = fsel; ll; ll = ll->next)
|
||||||
sd->realpath, sd->drop_icon->info.file);
|
|
||||||
if (ecore_file_exists(buf))
|
|
||||||
{
|
{
|
||||||
f = fopen(buf, "a");
|
/* move the file into the subdir */
|
||||||
if (f)
|
snprintf(buf, sizeof(buf), "%s/%s/%s",
|
||||||
|
sd->realpath, sd->drop_icon->info.file, ecore_file_get_file(ll->data));
|
||||||
|
printf("mv %s %s\n", ll->data, buf);
|
||||||
|
if (ecore_file_exists(buf))
|
||||||
{
|
{
|
||||||
/* go through all files to drop */
|
/* FIXME: error - file exists */
|
||||||
for (ll = fsel; ll; ll = ll->next)
|
|
||||||
{
|
|
||||||
fprintf(f, "%s\n", ecore_file_get_file(ll->data));
|
|
||||||
d = ecore_file_get_dir(ll->data);
|
|
||||||
/* get the dir of each file */
|
|
||||||
if (d)
|
|
||||||
{
|
|
||||||
/* if the file is not in the target dir */
|
|
||||||
if (strcmp(d, sd->realpath))
|
|
||||||
{
|
|
||||||
/* if the file is not apseudo-link */
|
|
||||||
if (e_util_strcmp(sd->config->view.extra_file_source, d))
|
|
||||||
{
|
|
||||||
/* move the file into the subdir */
|
|
||||||
snprintf(buf, sizeof(buf), "%s/%s/%s",
|
|
||||||
sd->realpath, sd->drop_icon->info.file, ecore_file_get_file(ll->data));
|
|
||||||
if (ecore_file_exists(buf))
|
|
||||||
{
|
|
||||||
/* FIXME: error - file exists */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ecore_file_mv(ll->data, buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* file is in target dir - move into subdir */
|
|
||||||
snprintf(buf, sizeof(buf), "%s/%s/%s",
|
|
||||||
sd->realpath, sd->drop_icon->info.file, ecore_file_get_file(ll->data));
|
|
||||||
if (ecore_file_exists(buf))
|
|
||||||
{
|
|
||||||
/* FIXME: error - file exists */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ecore_file_mv(ll->data, buf);
|
|
||||||
}
|
|
||||||
free(d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("no .order\n");
|
|
||||||
/* go through all files to drop */
|
|
||||||
for (ll = fsel; ll; ll = ll->next)
|
|
||||||
{
|
|
||||||
/* move the file into the subdir */
|
|
||||||
snprintf(buf, sizeof(buf), "%s/%s/%s",
|
|
||||||
sd->realpath, sd->drop_icon->info.file, ecore_file_get_file(ll->data));
|
|
||||||
printf("mv %s %s\n", ll->data, buf);
|
|
||||||
if (ecore_file_exists(buf))
|
|
||||||
{
|
|
||||||
/* FIXME: error - file exists */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ecore_file_mv(ll->data, buf);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
ecore_file_mv(ll->data, buf);
|
||||||
}
|
}
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
refresh = 1; /* refresh src fm */
|
// refresh = 1; /* refresh src fm */
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
e_fm2_refresh(sd->obj); /* refresh dst fm */
|
// e_fm2_refresh(sd->obj); /* refresh dst fm */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2895,46 +2966,17 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
{
|
{
|
||||||
if (sd->order_file) /* there is an order file */
|
if (sd->order_file) /* there is an order file */
|
||||||
{
|
{
|
||||||
/* write order file with all files up to drop_icon
|
|
||||||
* that are not being dragged, then insert list of
|
|
||||||
* dropped files, then everything after that is not
|
|
||||||
* being dragged then refresh view
|
|
||||||
*/
|
|
||||||
snprintf(buf, sizeof(buf), "%s/.order", sd->realpath);
|
|
||||||
f = fopen(buf, "w");
|
|
||||||
if (f)
|
|
||||||
{
|
|
||||||
for (l = sd->icons; l; l = l->next)
|
|
||||||
{
|
|
||||||
ic = l->data;
|
|
||||||
if (!ic->drag.dnd)
|
|
||||||
{
|
|
||||||
if ((sd->drop_after == 0) &&
|
|
||||||
(ic == sd->drop_icon))
|
|
||||||
{
|
|
||||||
for (ll = fsel; ll; ll = ll->next)
|
|
||||||
fprintf(f, "%s\n", ecore_file_get_file(ll->data));
|
|
||||||
fprintf(f, "%s\n", ic->info.file);
|
|
||||||
}
|
|
||||||
else if ((sd->drop_after == 1) &&
|
|
||||||
(ic == sd->drop_icon))
|
|
||||||
{
|
|
||||||
fprintf(f, "%s\n", ic->info.file);
|
|
||||||
for (ll = fsel; ll; ll = ll->next)
|
|
||||||
fprintf(f, "%s\n", ecore_file_get_file(ll->data));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fprintf(f, "%s\n", ic->info.file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
for (ll = fsel; ll; ll = ll->next)
|
for (ll = fsel; ll; ll = ll->next)
|
||||||
{
|
{
|
||||||
d = ecore_file_get_dir(ll->data);
|
d = ecore_file_get_dir(ll->data);
|
||||||
if (d)
|
if (d)
|
||||||
{
|
{
|
||||||
if (strcmp(d, sd->realpath))
|
if (!strcmp(d, sd->realpath))
|
||||||
|
{
|
||||||
|
printf("listrm %s\n", ecore_file_get_file(ll->data));
|
||||||
|
_e_fm2_live_file_del(sd->obj, ecore_file_get_file(ll->data));
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), "%s/%s",
|
snprintf(buf, sizeof(buf), "%s/%s",
|
||||||
sd->realpath, ecore_file_get_file(ll->data));
|
sd->realpath, ecore_file_get_file(ll->data));
|
||||||
|
@ -2943,8 +2985,28 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
free(d);
|
free(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (sd->drop_after == 0)
|
||||||
|
{
|
||||||
|
for (ll = evas_list_last(fsel); ll; ll = ll->prev)
|
||||||
|
{
|
||||||
|
printf("listadd %s, before %s\n", ecore_file_get_file(ll->data), sd->drop_icon->info.file);
|
||||||
|
_e_fm2_live_file_add(sd->obj,
|
||||||
|
ecore_file_get_file(ll->data),
|
||||||
|
sd->drop_icon->info.file, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (ll = fsel; ll; ll = ll->next)
|
||||||
|
{
|
||||||
|
printf("listadd %s, after %s\n", ecore_file_get_file(ll->data), sd->drop_icon->info.file);
|
||||||
|
_e_fm2_live_file_add(sd->obj,
|
||||||
|
ecore_file_get_file(ll->data),
|
||||||
|
sd->drop_icon->info.file, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
e_fm2_refresh(sd->obj); /* refresh dst fm */
|
// e_fm2_refresh(sd->obj); /* refresh dst fm */
|
||||||
}
|
}
|
||||||
else /* no order file */
|
else /* no order file */
|
||||||
{
|
{
|
||||||
|
@ -2960,12 +3022,17 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
/* FIXME: error - file exists */
|
/* FIXME: error - file exists */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ecore_file_mv(ll->data, buf);
|
{
|
||||||
|
if (ecore_file_mv(ll->data, buf))
|
||||||
|
_e_fm2_live_file_add(sd->obj,
|
||||||
|
ecore_file_get_file(ll->data),
|
||||||
|
NULL, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
refresh = 1; /* refresh src fm */
|
// refresh = 1; /* refresh src fm */
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
e_fm2_refresh(sd->obj); /* refresh dst fm */
|
// e_fm2_refresh(sd->obj); /* refresh dst fm */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2974,7 +3041,8 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
_e_fm2_dnd_drop_all_hide(sd->obj);
|
_e_fm2_dnd_drop_all_hide(sd->obj);
|
||||||
/* FIXME: disable refresh */
|
/* FIXME: disable refresh */
|
||||||
for (l = _e_fm2_list; l; l = l->next)
|
for (l = _e_fm2_list; l; l = l->next)
|
||||||
_e_fm2_dnd_finish(l->data, refresh);
|
// _e_fm2_dnd_finish(l->data, refresh);
|
||||||
|
_e_fm2_dnd_finish(l->data, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: prototype */
|
/* FIXME: prototype */
|
||||||
|
@ -3712,7 +3780,7 @@ _e_fm2_cb_scan_idler(void *data)
|
||||||
{
|
{
|
||||||
len = strlen(buf);
|
len = strlen(buf);
|
||||||
if ((len > 0) && (buf[len - 1] == '\n')) buf[len - 1] = 0;
|
if ((len > 0) && (buf[len - 1] == '\n')) buf[len - 1] = 0;
|
||||||
_e_fm2_file_add(data, buf, 0);
|
_e_fm2_file_add(data, buf, 0, NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sd->dir)
|
else if (sd->dir)
|
||||||
|
@ -3723,7 +3791,7 @@ _e_fm2_cb_scan_idler(void *data)
|
||||||
if ((!strcmp(dp->d_name, ".")) || (!strcmp(dp->d_name, ".."))) return 1;
|
if ((!strcmp(dp->d_name, ".")) || (!strcmp(dp->d_name, ".."))) return 1;
|
||||||
/* skip dotfiles if we're not showing hidden files */
|
/* skip dotfiles if we're not showing hidden files */
|
||||||
if (dp->d_name[0] == '.' && !sd->show_hidden_files) return 1;
|
if (dp->d_name[0] == '.' && !sd->show_hidden_files) return 1;
|
||||||
_e_fm2_file_add(data, dp->d_name, sd->order_file);
|
_e_fm2_file_add(data, dp->d_name, sd->order_file, NULL, 0);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -3873,6 +3941,12 @@ _e_fm2_smart_del(Evas_Object *obj)
|
||||||
sd = evas_object_smart_data_get(obj);
|
sd = evas_object_smart_data_get(obj);
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
|
|
||||||
|
if (sd->monitor.monitor)
|
||||||
|
{
|
||||||
|
ecore_file_monitor_del(sd->monitor.monitor);
|
||||||
|
sd->monitor.monitor = NULL;
|
||||||
|
}
|
||||||
|
_e_fm2_live_process_end(obj);
|
||||||
_e_fm2_scan_stop(obj);
|
_e_fm2_scan_stop(obj);
|
||||||
_e_fm2_queue_free(obj);
|
_e_fm2_queue_free(obj);
|
||||||
_e_fm2_regions_free(obj);
|
_e_fm2_regions_free(obj);
|
||||||
|
@ -4384,6 +4458,7 @@ _e_fm2_new_directory_yes_cb(char *text, void *data)
|
||||||
e_dialog_show(dialog);
|
e_dialog_show(dialog);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
if (sd->order_file)
|
if (sd->order_file)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
@ -4396,9 +4471,11 @@ _e_fm2_new_directory_yes_cb(char *text, void *data)
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
_e_fm2_live_file_add(sd->obj, text, NULL, 0);
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
if (sd->refresh_job) ecore_job_del(sd->refresh_job);
|
// if (sd->refresh_job) ecore_job_del(sd->refresh_job);
|
||||||
sd->refresh_job = ecore_job_add(_e_fm2_refresh_job_cb, sd->obj);
|
// sd->refresh_job = ecore_job_add(_e_fm2_refresh_job_cb, sd->obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4472,9 +4549,6 @@ _e_fm2_file_rename_yes_cb(char *text, void *data)
|
||||||
snprintf(oldpath, sizeof(oldpath), "%s/%s", ic->sd->realpath, ic->info.file);
|
snprintf(oldpath, sizeof(oldpath), "%s/%s", ic->sd->realpath, ic->info.file);
|
||||||
snprintf(newpath, sizeof(newpath), "%s/%s", ic->sd->realpath, text);
|
snprintf(newpath, sizeof(newpath), "%s/%s", ic->sd->realpath, text);
|
||||||
}
|
}
|
||||||
evas_stringshare_del(ic->info.file);
|
|
||||||
ic->info.file = evas_stringshare_add(text);
|
|
||||||
|
|
||||||
if (!ecore_file_mv(oldpath, newpath))
|
if (!ecore_file_mv(oldpath, newpath))
|
||||||
{
|
{
|
||||||
man = e_manager_current_get();
|
man = e_manager_current_get();
|
||||||
|
@ -4494,11 +4568,14 @@ _e_fm2_file_rename_yes_cb(char *text, void *data)
|
||||||
e_dialog_show(dialog);
|
e_dialog_show(dialog);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ic->sd->order_file) _e_fm2_order_file_rewrite(ic->sd->obj);
|
_e_fm2_live_file_del(ic->sd->obj, ic->info.file);
|
||||||
|
_e_fm2_live_file_add(ic->sd->obj, text, NULL, 0);
|
||||||
|
// evas_stringshare_del(ic->info.file);
|
||||||
|
// ic->info.file = evas_stringshare_add(text);
|
||||||
|
// if (ic->sd->order_file) _e_fm2_order_file_rewrite(ic->sd->obj);
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
if (ic->sd->refresh_job) ecore_job_del(ic->sd->refresh_job);
|
// if (ic->sd->refresh_job) ecore_job_del(ic->sd->refresh_job);
|
||||||
ic->sd->refresh_job = ecore_job_add(_e_fm2_refresh_job_cb, ic->sd->obj);
|
// ic->sd->refresh_job = ecore_job_add(_e_fm2_refresh_job_cb, ic->sd->obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4615,6 +4692,7 @@ _e_fm2_file_delete_yes_cb(void *data, E_Dialog *dialog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else ici->deleted = 1;
|
else ici->deleted = 1;
|
||||||
|
_e_fm2_live_file_del(ic->sd->obj, ici->file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
evas_list_free(sel);
|
evas_list_free(sel);
|
||||||
|
@ -4649,13 +4727,14 @@ _e_fm2_file_delete_yes_cb(void *data, E_Dialog *dialog)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_e_fm2_live_file_del(ic->sd->obj, ic->info.file);
|
||||||
ic->info.deleted = 1;
|
ic->info.deleted = 1;
|
||||||
}
|
}
|
||||||
if (ic->sd->order_file) _e_fm2_order_file_rewrite(ic->sd->obj);
|
|
||||||
|
|
||||||
|
// if (ic->sd->order_file) _e_fm2_order_file_rewrite(ic->sd->obj);
|
||||||
/* FIXME: disable refresh - modify icons in-place */
|
/* FIXME: disable refresh - modify icons in-place */
|
||||||
if (ic->sd->refresh_job) ecore_job_del(ic->sd->refresh_job);
|
// if (ic->sd->refresh_job) ecore_job_del(ic->sd->refresh_job);
|
||||||
ic->sd->refresh_job = ecore_job_add(_e_fm2_refresh_job_cb, ic->sd->obj);
|
// ic->sd->refresh_job = ecore_job_add(_e_fm2_refresh_job_cb, ic->sd->obj);
|
||||||
|
|
||||||
evas_object_smart_callback_call(ic->sd->obj, "files_deleted", NULL);
|
evas_object_smart_callback_call(ic->sd->obj, "files_deleted", NULL);
|
||||||
}
|
}
|
||||||
|
@ -4680,3 +4759,236 @@ _e_fm2_refresh_job_cb(void *data)
|
||||||
e_fm2_refresh(data);
|
e_fm2_refresh(data);
|
||||||
sd->refresh_job = NULL;
|
sd->refresh_job = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_live_file_add(Evas_Object *obj, char *file, char *file_rel, int after)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
E_Fm2_Action *a;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd) return;
|
||||||
|
a = E_NEW(E_Fm2_Action, 1);
|
||||||
|
if (!a) return;
|
||||||
|
sd->live.actions = evas_list_append(sd->live.actions, a);
|
||||||
|
a->type = FILE_ADD;
|
||||||
|
a->file = evas_stringshare_add(file);
|
||||||
|
if (file_rel) a->file2 = evas_stringshare_add(file_rel);
|
||||||
|
a->flags = after;
|
||||||
|
_e_fm2_live_process_begin(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_live_file_del(Evas_Object *obj, char *file)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
E_Fm2_Action *a;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd) return;
|
||||||
|
a = E_NEW(E_Fm2_Action, 1);
|
||||||
|
if (!a) return;
|
||||||
|
sd->live.actions = evas_list_append(sd->live.actions, a);
|
||||||
|
a->type = FILE_DEL;
|
||||||
|
a->file = evas_stringshare_add(file);
|
||||||
|
_e_fm2_live_process_begin(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_live_file_changed(Evas_Object *obj, char *file)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
E_Fm2_Action *a;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd) return;
|
||||||
|
a = E_NEW(E_Fm2_Action, 1);
|
||||||
|
if (!a) return;
|
||||||
|
sd->live.actions = evas_list_append(sd->live.actions, a);
|
||||||
|
a->type = FILE_CHANGE;
|
||||||
|
a->file = evas_stringshare_add(file);
|
||||||
|
_e_fm2_live_process_begin(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_live_process_begin(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if ((sd->order) || (sd->dir)) return;
|
||||||
|
if (!sd->live.actions) return;
|
||||||
|
if ((sd->live.idler) || (sd->live.timer) ||
|
||||||
|
(sd->scan_idler) || (sd->scan_timer)) return;
|
||||||
|
sd->live.idler = ecore_idler_add(_e_fm2_cb_live_idler, obj);
|
||||||
|
sd->live.timer = ecore_timer_add(0.2, _e_fm2_cb_live_timer, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_live_process_end(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
E_Fm2_Action *a;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
while (sd->live.actions)
|
||||||
|
{
|
||||||
|
a = sd->live.actions->data;
|
||||||
|
sd->live.actions = evas_list_remove_list(sd->live.actions, sd->live.actions);
|
||||||
|
if (a->file) evas_stringshare_del(a->file);
|
||||||
|
if (a->file2) evas_stringshare_del(a->file2);
|
||||||
|
free(a);
|
||||||
|
}
|
||||||
|
if (sd->live.idler)
|
||||||
|
{
|
||||||
|
ecore_idler_del(sd->live.idler);
|
||||||
|
sd->live.idler = NULL;
|
||||||
|
}
|
||||||
|
if (sd->live.timer)
|
||||||
|
{
|
||||||
|
ecore_timer_del(sd->live.timer);
|
||||||
|
sd->live.timer = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_live_process(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
E_Fm2_Action *a;
|
||||||
|
Evas_List *l;
|
||||||
|
E_Fm2_Icon *ic;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd->live.actions) return;
|
||||||
|
a = sd->live.actions->data;
|
||||||
|
sd->live.actions = evas_list_remove_list(sd->live.actions, sd->live.actions);
|
||||||
|
switch (a->type)
|
||||||
|
{
|
||||||
|
case FILE_ADD:
|
||||||
|
/* new file to sort in place */
|
||||||
|
_e_fm2_file_add(obj, a->file, 1, a->file2, a->flags);
|
||||||
|
break;
|
||||||
|
case FILE_DEL:
|
||||||
|
_e_fm2_file_del(obj, a->file);
|
||||||
|
sd->live.deletions = 1;
|
||||||
|
break;
|
||||||
|
case FILE_CHANGE:
|
||||||
|
for (l = sd->icons; l; l = l->next)
|
||||||
|
{
|
||||||
|
ic = l->data;
|
||||||
|
if (!strcmp(ic->info.file, a->file))
|
||||||
|
{
|
||||||
|
int realized;
|
||||||
|
|
||||||
|
realized = ic->realized;
|
||||||
|
if (realized) _e_fm2_icon_unrealize(ic);
|
||||||
|
_e_fm2_icon_unfill(ic);
|
||||||
|
_e_fm2_icon_fill(ic);
|
||||||
|
if (realized) _e_fm2_icon_realize(ic);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (a->file) evas_stringshare_del(a->file);
|
||||||
|
if (a->file2) evas_stringshare_del(a->file2);
|
||||||
|
free(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_fm2_cb_live_idler(void *data)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
double t;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(data);
|
||||||
|
t = ecore_time_get();
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!sd->live.actions) break;
|
||||||
|
_e_fm2_live_process(data);
|
||||||
|
}
|
||||||
|
while ((ecore_time_get() - t) > 0.02);
|
||||||
|
if (sd->live.actions) return 1;
|
||||||
|
_e_fm2_live_process_end(data);
|
||||||
|
_e_fm2_cb_live_timer(data);
|
||||||
|
if (sd->order_file) _e_fm2_order_file_rewrite(data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_fm2_cb_live_timer(void *data)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(data);
|
||||||
|
if (!sd) return 0;
|
||||||
|
if (sd->queue) _e_fm2_queue_process(data);
|
||||||
|
else if (sd->iconlist_changed)
|
||||||
|
{
|
||||||
|
if (sd->resize_job) ecore_job_del(sd->resize_job);
|
||||||
|
sd->resize_job = ecore_job_add(_e_fm2_cb_resize_job, sd->obj);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (sd->live.deletions)
|
||||||
|
{
|
||||||
|
sd->iconlist_changed = 1;
|
||||||
|
if (sd->resize_job) ecore_job_del(sd->resize_job);
|
||||||
|
sd->resize_job = ecore_job_add(_e_fm2_cb_resize_job, sd->obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sd->live.deletions = 0;
|
||||||
|
sd->live.timer = NULL;
|
||||||
|
if ((!sd->queue) && (!sd->live.idler)) return 0;
|
||||||
|
sd->live.timer = ecore_timer_add(0.2, _e_fm2_cb_live_timer, data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fm2_cb_file_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
char *file;
|
||||||
|
Evas_List *l;
|
||||||
|
E_Fm2_Icon *ic;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(data);
|
||||||
|
if (!sd) return;
|
||||||
|
file = (char *)ecore_file_get_file(path);
|
||||||
|
if (!strcmp(file, ".order"))
|
||||||
|
{
|
||||||
|
/* FIXME: for now, ignore, BUT later load up .order - compare with icon
|
||||||
|
* order in list and fi they differ - use new .order */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((event == ECORE_FILE_EVENT_CREATED_FILE) ||
|
||||||
|
(event == ECORE_FILE_EVENT_CREATED_DIRECTORY))
|
||||||
|
{
|
||||||
|
_e_fm2_live_file_add(sd->obj, file, NULL, 0);
|
||||||
|
printf("FADD %s\n", file);
|
||||||
|
}
|
||||||
|
else if ((event == ECORE_FILE_EVENT_DELETED_FILE) ||
|
||||||
|
(event == ECORE_FILE_EVENT_DELETED_DIRECTORY))
|
||||||
|
{
|
||||||
|
_e_fm2_live_file_del(sd->obj, file);
|
||||||
|
printf("FDEL %s\n", file);
|
||||||
|
}
|
||||||
|
else if (event == ECORE_FILE_EVENT_MODIFIED)
|
||||||
|
{
|
||||||
|
_e_fm2_live_file_changed(sd->obj, file);
|
||||||
|
printf("FMOD %s\n", file);
|
||||||
|
}
|
||||||
|
else if (event == ECORE_FILE_EVENT_DELETED_SELF)
|
||||||
|
{
|
||||||
|
evas_object_smart_callback_call(sd->obj, "dir_deleted", NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -100,6 +100,7 @@ struct _E_Fm2_Icon_Info
|
||||||
unsigned char mount : 1;
|
unsigned char mount : 1;
|
||||||
unsigned char pseudo_link : 1;
|
unsigned char pseudo_link : 1;
|
||||||
unsigned char deleted : 1;
|
unsigned char deleted : 1;
|
||||||
|
unsigned char broken_link : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI int e_fm2_init(void);
|
EAPI int e_fm2_init(void);
|
||||||
|
|
Loading…
Reference in New Issue