forked from enlightenment/enlightenment
1. fix dnd so icons dod TO where you dnd them and stay there.
2. fix de-select on the desktop. 3. deselect icons in other filemanager windows (fwin) if icons get selected in another fwin SVN revision: 29978
This commit is contained in:
parent
e4987dca7d
commit
bf0e763b8a
|
@ -500,6 +500,18 @@ e_fm2_underlay_hide(Evas_Object *obj)
|
||||||
evas_object_hide(sd->underlay);
|
evas_object_hide(sd->underlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
e_fm2_all_unsel(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
E_Fm2_Smart_Data *sd;
|
||||||
|
|
||||||
|
sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd) return; // safety
|
||||||
|
if (!evas_object_type_get(obj)) return; // safety
|
||||||
|
if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety
|
||||||
|
_e_fm2_icon_desel_any(obj);
|
||||||
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
e_fm2_custom_theme_set(Evas_Object *obj, const char *path)
|
e_fm2_custom_theme_set(Evas_Object *obj, const char *path)
|
||||||
{
|
{
|
||||||
|
@ -3723,7 +3735,7 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
Evas_List *fsel, *l, *ll, *il, *isel;
|
Evas_List *fsel, *l, *ll, *il, *isel;
|
||||||
char buf[4096], *fl;
|
char buf[4096], *fl;
|
||||||
const char *fp;
|
const char *fp;
|
||||||
Evas_Coord dx, dy;
|
Evas_Coord dx, dy, ox, oy, x, y;
|
||||||
int adjust_icons = 0;
|
int adjust_icons = 0;
|
||||||
|
|
||||||
sd = data;
|
sd = data;
|
||||||
|
@ -3740,14 +3752,21 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
printf(" %s\n", fl);
|
printf(" %s\n", fl);
|
||||||
}
|
}
|
||||||
dx = 0; dy = 0;
|
dx = 0; dy = 0;
|
||||||
|
ox = 0; oy = 0;
|
||||||
for (l = isel; l; l = l->next)
|
for (l = isel; l; l = l->next)
|
||||||
{
|
{
|
||||||
ic = l->data;
|
ic = l->data;
|
||||||
if (ic->drag.src)
|
if (ic->drag.src)
|
||||||
{
|
{
|
||||||
dx = ev->x - ic->drag.x - ic->x + ic->sd->pos.x;
|
ox = ic->x;
|
||||||
dy = ev->y - ic->drag.y - ic->y + ic->sd->pos.y;
|
oy = ic->y;
|
||||||
printf("DND offset %i %i\n", dx, dy);
|
dx = (ic->drag.x + ic->x - ic->sd->pos.x);
|
||||||
|
dy = (ic->drag.y + ic->y - ic->sd->pos.y);
|
||||||
|
printf("DND offset %i %i | %i %i | %i %i | %i %i\n",
|
||||||
|
dx, dy,
|
||||||
|
ic->drag.x, ic->drag.y,
|
||||||
|
ic->x, ic->y,
|
||||||
|
ic->sd->pos.x, ic->sd->pos.y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3775,17 +3794,23 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
/* dnd doesnt tell me all the co-ords of the icons being dragged so i can't place them accurately.
|
/* dnd doesnt tell me all the co-ords of the icons being dragged so i can't place them accurately.
|
||||||
* need to fix this. ev->data probably needs to become more compelx than a list of url's
|
* need to fix this. ev->data probably needs to become more compelx than a list of url's
|
||||||
*/
|
*/
|
||||||
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, ic->x + dx, ic->y + dy);
|
x = ev->x + (ic->x - ox) - ic->drag.x + sd->pos.x;
|
||||||
|
y = ev->y + (ic->y - oy) - ic->drag.y + sd->pos.y;//ic->y - oy - dy + ev->y + sd->pos.y;
|
||||||
|
if (x < 0) x = 0;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, x, y);
|
||||||
if (ic->sd == sd)
|
if (ic->sd == sd)
|
||||||
{
|
{
|
||||||
ic->x += dx;
|
ic->x = x;
|
||||||
ic->y += dy;
|
ic->y = y;
|
||||||
ic->saved_pos = 1;
|
ic->saved_pos = 1;
|
||||||
adjust_icons = 1;
|
adjust_icons = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, -9999, -9999);
|
{
|
||||||
|
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, -9999, -9999);
|
||||||
|
}
|
||||||
evas_stringshare_del(fp);
|
evas_stringshare_del(fp);
|
||||||
}
|
}
|
||||||
if (adjust_icons)
|
if (adjust_icons)
|
||||||
|
@ -3899,15 +3924,7 @@ _e_fm2_cb_dnd_drop(void *data, const char *type, void *event)
|
||||||
snprintf(buf, sizeof(buf), "%s/%s",
|
snprintf(buf, sizeof(buf), "%s/%s",
|
||||||
sd->realpath, ecore_file_get_file(fp));
|
sd->realpath, ecore_file_get_file(fp));
|
||||||
printf("mv %s %s\n", (char *)fp, buf);
|
printf("mv %s %s\n", (char *)fp, buf);
|
||||||
if ((ic) && (sd->config->view.mode == E_FM2_VIEW_MODE_CUSTOM_ICONS))
|
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, -9999, -9999);
|
||||||
{
|
|
||||||
/* dnd doesnt tell me all the co-ords of the icons being dragged so i can't place them accurately.
|
|
||||||
* need to fix this. ev->data probably needs to become more compelx than a list of url's
|
|
||||||
*/
|
|
||||||
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, ic->x + dx, ic->y + dy);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_e_fm2_client_file_move(sd->id, fp, buf, "", 0, ev->x, ev->y);
|
|
||||||
evas_stringshare_del(fp);
|
evas_stringshare_del(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,7 @@ EAPI void e_fm2_path_set(Evas_Object *obj, const char *dev, con
|
||||||
EAPI void e_fm2_custom_theme_set(Evas_Object *obj, const char *path);
|
EAPI void e_fm2_custom_theme_set(Evas_Object *obj, const char *path);
|
||||||
EAPI void e_fm2_underlay_show(Evas_Object *obj);
|
EAPI void e_fm2_underlay_show(Evas_Object *obj);
|
||||||
EAPI void e_fm2_underlay_hide(Evas_Object *obj);
|
EAPI void e_fm2_underlay_hide(Evas_Object *obj);
|
||||||
|
EAPI void e_fm2_all_unsel(Evas_Object *obj);
|
||||||
EAPI void e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path);
|
EAPI void e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path);
|
||||||
EAPI void e_fm2_refresh(Evas_Object *obj);
|
EAPI void e_fm2_refresh(Evas_Object *obj);
|
||||||
EAPI const char *e_fm2_real_path_get(Evas_Object *obj);
|
EAPI const char *e_fm2_real_path_get(Evas_Object *obj);
|
||||||
|
|
|
@ -31,6 +31,7 @@ static void _e_fwin_deleted(void *data, Evas_Object *obj, void *event_info);
|
||||||
static const char *_e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev_path, const char *key);
|
static const char *_e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev_path, const char *key);
|
||||||
static void _e_fwin_changed(void *data, Evas_Object *obj, void *event_info);
|
static void _e_fwin_changed(void *data, Evas_Object *obj, void *event_info);
|
||||||
static void _e_fwin_selected(void *data, Evas_Object *obj, void *event_info);
|
static void _e_fwin_selected(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
static void _e_fwin_selection_change(void *data, Evas_Object *obj, void *event_info);
|
||||||
static void _e_fwin_menu_extend(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info *info);
|
static void _e_fwin_menu_extend(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info *info);
|
||||||
static void _e_fwin_parent(void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_fwin_parent(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_fwin_cb_menu_extend_start(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info *info);
|
static void _e_fwin_cb_menu_extend_start(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info *info);
|
||||||
|
@ -145,6 +146,8 @@ e_fwin_new(E_Container *con, const char *dev, const char *path)
|
||||||
_e_fwin_deleted, fwin);
|
_e_fwin_deleted, fwin);
|
||||||
evas_object_smart_callback_add(o, "selected",
|
evas_object_smart_callback_add(o, "selected",
|
||||||
_e_fwin_selected, fwin);
|
_e_fwin_selected, fwin);
|
||||||
|
evas_object_smart_callback_add(o, "selection_change",
|
||||||
|
_e_fwin_selection_change, fwin);
|
||||||
e_fm2_icon_menu_start_extend_callback_set(o, _e_fwin_cb_menu_extend_start, fwin);
|
e_fm2_icon_menu_start_extend_callback_set(o, _e_fwin_cb_menu_extend_start, fwin);
|
||||||
e_fm2_icon_menu_end_extend_callback_set(o, _e_fwin_menu_extend, fwin);
|
e_fm2_icon_menu_end_extend_callback_set(o, _e_fwin_menu_extend, fwin);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
|
@ -267,6 +270,8 @@ e_fwin_zone_new(E_Zone *zone, const char *dev, const char *path)
|
||||||
_e_fwin_deleted, fwin);
|
_e_fwin_deleted, fwin);
|
||||||
evas_object_smart_callback_add(o, "selected",
|
evas_object_smart_callback_add(o, "selected",
|
||||||
_e_fwin_selected, fwin);
|
_e_fwin_selected, fwin);
|
||||||
|
evas_object_smart_callback_add(o, "selection_change",
|
||||||
|
_e_fwin_selection_change, fwin);
|
||||||
e_fm2_icon_menu_start_extend_callback_set(o, _e_fwin_cb_menu_extend_start, fwin);
|
e_fm2_icon_menu_start_extend_callback_set(o, _e_fwin_cb_menu_extend_start, fwin);
|
||||||
e_fm2_icon_menu_end_extend_callback_set(o, _e_fwin_menu_extend, fwin);
|
e_fm2_icon_menu_end_extend_callback_set(o, _e_fwin_menu_extend, fwin);
|
||||||
e_fm2_underlay_hide(o);
|
e_fm2_underlay_hide(o);
|
||||||
|
@ -338,6 +343,14 @@ e_fwin_zone_new(E_Zone *zone, const char *dev, const char *path)
|
||||||
return fwin;
|
return fwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
e_fwin_all_unsel(E_Fwin *fwin)
|
||||||
|
{
|
||||||
|
E_OBJECT_CHECK(fwin);
|
||||||
|
E_OBJECT_TYPE_CHECK(fwin, E_FWIN_TYPE);
|
||||||
|
e_fm2_all_unsel(fwin->fm_obj);
|
||||||
|
}
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
static void
|
static void
|
||||||
_e_fwin_free(E_Fwin *fwin)
|
_e_fwin_free(E_Fwin *fwin)
|
||||||
|
@ -489,6 +502,20 @@ _e_fwin_selected(void *data, Evas_Object *obj, void *event_info)
|
||||||
evas_list_free(selected);
|
evas_list_free(selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_fwin_selection_change(void *data, Evas_Object *obj, void *event_info)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
E_Fwin *fwin;
|
||||||
|
|
||||||
|
fwin = data;
|
||||||
|
for (l = fwins; l; l = l->next)
|
||||||
|
{
|
||||||
|
if (l->data != fwin)
|
||||||
|
e_fwin_all_unsel(l->data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_fwin_menu_extend(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info *info)
|
_e_fwin_menu_extend(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info *info)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ EAPI int e_fwin_init (void);
|
||||||
EAPI int e_fwin_shutdown (void);
|
EAPI int e_fwin_shutdown (void);
|
||||||
EAPI E_Fwin *e_fwin_new (E_Container *con, const char *dev, const char *path);
|
EAPI E_Fwin *e_fwin_new (E_Container *con, const char *dev, const char *path);
|
||||||
EAPI E_Fwin *e_fwin_zone_new (E_Zone *zone, const char *dev, const char *path);
|
EAPI E_Fwin *e_fwin_zone_new (E_Zone *zone, const char *dev, const char *path);
|
||||||
|
EAPI void e_fwin_all_unsel (E_Fwin *fwin);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -672,6 +672,8 @@ _e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_i
|
||||||
zone = data;
|
zone = data;
|
||||||
if (e_menu_grab_window_get()) return;
|
if (e_menu_grab_window_get()) return;
|
||||||
|
|
||||||
|
if (zone->bg_fwin) e_fwin_all_unsel(zone->bg_fwin);
|
||||||
|
|
||||||
if (!zone->cur_mouse_action)
|
if (!zone->cur_mouse_action)
|
||||||
{
|
{
|
||||||
if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_DOWN)
|
if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_DOWN)
|
||||||
|
|
Loading…
Reference in New Issue