more fm2 dnd work.

SVN revision: 26188
This commit is contained in:
Carsten Haitzler 2006-09-28 09:22:43 +00:00
parent 7c6acf9488
commit db30b17317
1 changed files with 59 additions and 5 deletions

View File

@ -1321,6 +1321,11 @@ _e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
ic->info.pseudo_dir = evas_stringshare_add(sd->config->view.extra_file_source);
ic->info.pseudo_link = 1;
}
else
{
free(ic);
return NULL;
}
}
ic->sd = sd;
ic->info.file = evas_stringshare_add(file);
@ -2635,9 +2640,12 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
{
E_Fm2_Smart_Data *sd;
E_Event_Dnd_Drop *ev;
Evas_List *fsel, *l;
char *f;
E_Fm2_Icon *ic;
Evas_List *fsel, *l, *ll;
char *fl;
int i, refresh = 0;
char buf[4096];
FILE *f;
sd = data;
if (!type) return;
@ -2647,8 +2655,8 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
printf("DROP: %i %i\n", ev->x, ev->y);
for (l = fsel; l; l = l->next)
{
f = l->data;
printf(" %s\n", f);
fl = l->data;
printf(" %s\n", fl);
}
/* note - logic.
* if drop file prefix path matches extra_file_source then it can be
@ -2665,6 +2673,7 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
}
else if (sd->drop_icon) /* inot or before/after an icon */
{
printf("drop icon\n");
if (sd->drop_after == -1) /* put into subdir in icon */
{
/* move file into dir that this icon is for */
@ -2683,7 +2692,52 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
* dropped files, then everything after that is not
* being dragged then refresh view
*/
refresh = 1; /* refresh src fm */
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)
{
char *d;
d = ecore_file_get_dir(ll->data);
if (d)
{
if (strcmp(d, sd->realpath))
{
snprintf(buf, sizeof(buf), "%s/%s",
sd->realpath, ecore_file_get_file(ll->data));
ecore_file_symlink(ll->data, buf);
}
free(d);
}
}
refresh = 1; /* refresh src fm */
e_fm2_refresh(sd->obj); /* refresh dst fm */
}
else /* no order file */