fix link_drop targets to allow dropping into subdirs

this exposes a very strange and rare bug where things seem to get recursively symlinked instead of just symlinking the dragged icon


SVN revision: 76622
This commit is contained in:
Mike Blumenkrantz 2012-09-13 16:34:19 +00:00
parent d86de48c74
commit 6c04fe6fea
1 changed files with 12 additions and 16 deletions

View File

@ -443,7 +443,7 @@ static int _e_fm_client_file_del(const char *args, Evas_Object *e_fm);
//static int _e_fm2_client_file_trash(const char *path, Evas_Object *e_fm); //static int _e_fm2_client_file_trash(const char *path, Evas_Object *e_fm);
static int _e_fm2_client_file_mkdir(const char *path, const char *rel, int rel_to, int x, int y, int res_w, int res_h, Evas_Object *e_fm); static int _e_fm2_client_file_mkdir(const char *path, const char *rel, int rel_to, int x, int y, int res_w, int res_h, Evas_Object *e_fm);
static int _e_fm_client_file_move(const char *args, Evas_Object *e_fm); static int _e_fm_client_file_move(const char *args, Evas_Object *e_fm);
static int _e_fm2_client_file_symlink(const char *path, const char *dest, const char *rel, int rel_to, int x, int y, int res_w, int res_h, Evas_Object *e_fm); //static int _e_fm2_client_file_symlink(const char *path, const char *dest, const char *rel, int rel_to, int x, int y, int res_w, int res_h, Evas_Object *e_fm);
static int _e_fm_client_file_copy(const char *args, Evas_Object *e_fm); static int _e_fm_client_file_copy(const char *args, Evas_Object *e_fm);
static int _e_fm_client_file_symlink(const char *args, Evas_Object *e_fm); static int _e_fm_client_file_symlink(const char *args, Evas_Object *e_fm);
@ -2461,6 +2461,7 @@ _e_fm_client_file_move(const char *args, Evas_Object *e_fm)
return id; return id;
} }
#if 0
static int static int
_e_fm2_client_file_symlink(const char *path, const char *dest, const char *rel __UNUSED__, int rel_to __UNUSED__, int x __UNUSED__, int y __UNUSED__, int res_w __UNUSED__, int res_h __UNUSED__, Evas_Object *e_fm) _e_fm2_client_file_symlink(const char *path, const char *dest, const char *rel __UNUSED__, int rel_to __UNUSED__, int x __UNUSED__, int y __UNUSED__, int res_w __UNUSED__, int res_h __UNUSED__, Evas_Object *e_fm)
{ {
@ -2479,6 +2480,7 @@ _e_fm2_client_file_symlink(const char *path, const char *dest, const char *rel _
free(args); free(args);
return r; return r;
} }
#endif
static int static int
_e_fm_client_file_copy(const char *args, Evas_Object *e_fm) _e_fm_client_file_copy(const char *args, Evas_Object *e_fm)
@ -6632,21 +6634,15 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
{ {
fp = eina_list_data_get(ll); fp = eina_list_data_get(ll);
if (!fp) continue; if (!fp) continue;
snprintf(buf, sizeof(buf), "%s/%s", snprintf(buf, sizeof(buf), "%s/%s", sd->realpath, ecore_file_file_get(fp));
sd->realpath, ecore_file_file_get(fp)); if (!memerr)
if (sd->config->view.link_drop)
_e_fm2_client_file_symlink(fp, buf, sd->drop_icon->info.file, sd->drop_after, -9999, -9999, sd->h, sd->h, sd->obj);
else
{ {
if (!memerr) args = _e_fm_string_append_quoted(args, &size, &length, fp);
if (!args) memerr = EINA_TRUE;
else
{ {
args = _e_fm_string_append_quoted(args, &size, &length, fp); args = _e_fm_string_append_char(args, &size, &length, ' ');
if (!args) memerr = EINA_TRUE; if (!args) memerr = EINA_TRUE;
else
{
args = _e_fm_string_append_char(args, &size, &length, ' ');
if (!args) memerr = EINA_TRUE;
}
} }
} }
@ -6693,7 +6689,7 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
{ {
if (e_drop_handler_action_get() == ECORE_X_ATOM_XDND_ACTION_COPY) if (e_drop_handler_action_get() == ECORE_X_ATOM_XDND_ACTION_COPY)
{ {
if (sd->config->view.link_drop) if (sd->config->view.link_drop && (!sd->drop_icon))
_e_fm_client_file_symlink(args, sd->obj); _e_fm_client_file_symlink(args, sd->obj);
else else
_e_fm_client_file_copy(args, sd->obj); _e_fm_client_file_copy(args, sd->obj);
@ -6701,7 +6697,7 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
} }
else if (e_drop_handler_action_get() == ECORE_X_ATOM_XDND_ACTION_MOVE) else if (e_drop_handler_action_get() == ECORE_X_ATOM_XDND_ACTION_MOVE)
{ {
if (sd->config->view.link_drop) if (sd->config->view.link_drop && (!sd->drop_icon))
_e_fm_client_file_symlink(args, sd->obj); _e_fm_client_file_symlink(args, sd->obj);
else else
_e_fm_client_file_move(args, sd->obj); _e_fm_client_file_move(args, sd->obj);
@ -6709,7 +6705,7 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
} }
else if (e_drop_handler_action_get() == ECORE_X_ATOM_XDND_ACTION_ASK) else if (e_drop_handler_action_get() == ECORE_X_ATOM_XDND_ACTION_ASK)
{ {
if (sd->config->view.link_drop) if (sd->config->view.link_drop && (!sd->drop_icon))
_e_fm_client_file_symlink(args, sd->obj); _e_fm_client_file_symlink(args, sd->obj);
else else
_e_fm_drop_menu(args, sd->obj); _e_fm_drop_menu(args, sd->obj);