forked from enlightenment/enlightenment
efm now supports text/x-moz-url dnd operations when using efl 1.8
This commit is contained in:
parent
db20c24837
commit
bc86c5a8b5
|
@ -1,3 +1,7 @@
|
||||||
|
2013-05-29 Mike Blumenkrantz
|
||||||
|
|
||||||
|
* added dnd support for text/x-moz-url
|
||||||
|
|
||||||
2013-05-24 Christopher Michael
|
2013-05-24 Christopher Michael
|
||||||
|
|
||||||
* added support for hotplugging monitors in randr code
|
* added support for hotplugging monitors in randr code
|
||||||
|
|
1
NEWS
1
NEWS
|
@ -141,6 +141,7 @@ Improvements:
|
||||||
* improve efm mouse movement detection for icons
|
* improve efm mouse movement detection for icons
|
||||||
* add check for vmware window in another spot to disable key remapping
|
* add check for vmware window in another spot to disable key remapping
|
||||||
* border menu now has top-level item to set borderless state
|
* border menu now has top-level item to set borderless state
|
||||||
|
* added dnd support for text/x-moz-url
|
||||||
|
|
||||||
Fixes:
|
Fixes:
|
||||||
* IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar.
|
* IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar.
|
||||||
|
|
|
@ -61,7 +61,7 @@ static Eina_Stringshare **_e_dnd_types[] =
|
||||||
{
|
{
|
||||||
&_type_text_uri_list,
|
&_type_text_uri_list,
|
||||||
&_type_xds,
|
&_type_xds,
|
||||||
//&_type_text_x_moz_url,
|
&_type_text_x_moz_url,
|
||||||
//&_type_enlightenment_x_file,
|
//&_type_enlightenment_x_file,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -1430,42 +1430,16 @@ _e_dnd_cb_event_dnd_selection(void *data __UNUSED__, int type __UNUSED__, void *
|
||||||
}
|
}
|
||||||
else if (_type_text_x_moz_url == _xdnd->type)
|
else if (_type_text_x_moz_url == _xdnd->type)
|
||||||
{
|
{
|
||||||
/* FIXME: Create a ecore x parser for this type */
|
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
||||||
Ecore_X_Selection_Data *sdata;
|
Ecore_X_Selection_Data_X_Moz_Url *sel;
|
||||||
Eina_List *l = NULL;
|
E_Dnd_X_Moz_Url moz;
|
||||||
char file[PATH_MAX];
|
|
||||||
char *text;
|
|
||||||
int size;
|
|
||||||
|
|
||||||
sdata = ev->data;
|
sel = ev->data;
|
||||||
text = (char *)sdata->data;
|
moz.links = sel->links;
|
||||||
size = MIN(sdata->length, PATH_MAX - 1);
|
moz.link_names = sel->link_names;
|
||||||
/* A moz url _shall_ contain a space */
|
_xdnd->data = &moz;
|
||||||
/* FIXME: The data is two-byte unicode. Somewhere it
|
|
||||||
* is written that the url and the text is separated by
|
|
||||||
* a space, but it seems like they are separated by
|
|
||||||
* newline
|
|
||||||
*/
|
|
||||||
for (i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
file[i] = text[i];
|
|
||||||
// printf("'%d-%c' ", text[i], text[i]);
|
|
||||||
/*
|
|
||||||
if (text[i] == ' ')
|
|
||||||
{
|
|
||||||
file[i] = '\0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
// printf("\n");
|
|
||||||
file[i] = '\0';
|
|
||||||
// printf("file: %d \"%s\"\n", i, file);
|
|
||||||
l = eina_list_append(l, file);
|
|
||||||
|
|
||||||
_xdnd->data = l;
|
|
||||||
_e_drag_xdnd_end(ev->win, _xdnd->x, _xdnd->y);
|
_e_drag_xdnd_end(ev->win, _xdnd->x, _xdnd->y);
|
||||||
eina_list_free(l);
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_e_drag_xdnd_end(ev->win, _xdnd->x, _xdnd->y);
|
_e_drag_xdnd_end(ev->win, _xdnd->x, _xdnd->y);
|
||||||
|
|
|
@ -13,6 +13,7 @@ typedef struct _E_Event_Dnd_Enter E_Event_Dnd_Enter;
|
||||||
typedef struct _E_Event_Dnd_Move E_Event_Dnd_Move;
|
typedef struct _E_Event_Dnd_Move E_Event_Dnd_Move;
|
||||||
typedef struct _E_Event_Dnd_Leave E_Event_Dnd_Leave;
|
typedef struct _E_Event_Dnd_Leave E_Event_Dnd_Leave;
|
||||||
typedef struct _E_Event_Dnd_Drop E_Event_Dnd_Drop;
|
typedef struct _E_Event_Dnd_Drop E_Event_Dnd_Drop;
|
||||||
|
typedef struct E_Dnd_X_Moz_Url E_Dnd_X_Moz_Url;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifndef E_DND_H
|
#ifndef E_DND_H
|
||||||
|
@ -99,6 +100,12 @@ struct _E_Event_Dnd_Drop
|
||||||
int x, y;
|
int x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct E_Dnd_X_Moz_Url
|
||||||
|
{
|
||||||
|
Eina_Inarray *links;
|
||||||
|
Eina_Inarray *link_names;
|
||||||
|
};
|
||||||
|
|
||||||
EINTERN int e_dnd_init(void);
|
EINTERN int e_dnd_init(void);
|
||||||
EINTERN int e_dnd_shutdown(void);
|
EINTERN int e_dnd_shutdown(void);
|
||||||
|
|
||||||
|
|
|
@ -488,6 +488,7 @@ static const char *_e_fm2_mime_inode_directory = NULL;
|
||||||
static const char *_e_fm2_mime_app_desktop = NULL;
|
static const char *_e_fm2_mime_app_desktop = NULL;
|
||||||
static const char *_e_fm2_mime_app_edje = NULL;
|
static const char *_e_fm2_mime_app_edje = NULL;
|
||||||
static const char *_e_fm2_mime_text_uri_list = NULL;
|
static const char *_e_fm2_mime_text_uri_list = NULL;
|
||||||
|
static const char *_e_fm2_mime_xmozurl = NULL;
|
||||||
static const char *_e_fm2_xds = NULL;
|
static const char *_e_fm2_xds = NULL;
|
||||||
|
|
||||||
static Eina_List *_e_fm_handlers = NULL;
|
static Eina_List *_e_fm_handlers = NULL;
|
||||||
|
@ -496,6 +497,7 @@ static const char **_e_fm2_dnd_types[] =
|
||||||
{
|
{
|
||||||
&_e_fm2_mime_text_uri_list,
|
&_e_fm2_mime_text_uri_list,
|
||||||
&_e_fm2_xds,
|
&_e_fm2_xds,
|
||||||
|
&_e_fm2_mime_xmozurl,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -843,6 +845,7 @@ e_fm2_init(void)
|
||||||
_e_fm2_mime_app_edje = eina_stringshare_add("application/x-extension-edj");
|
_e_fm2_mime_app_edje = eina_stringshare_add("application/x-extension-edj");
|
||||||
_e_fm2_mime_text_uri_list = eina_stringshare_add("text/uri-list");
|
_e_fm2_mime_text_uri_list = eina_stringshare_add("text/uri-list");
|
||||||
_e_fm2_xds = eina_stringshare_add("XdndDirectSave0");
|
_e_fm2_xds = eina_stringshare_add("XdndDirectSave0");
|
||||||
|
_e_fm2_mime_xmozurl = eina_stringshare_add("text/x-moz-url");
|
||||||
|
|
||||||
_e_fm2_favorites_thread = ecore_thread_run(_e_fm2_favorites_thread_cb,
|
_e_fm2_favorites_thread = ecore_thread_run(_e_fm2_favorites_thread_cb,
|
||||||
_e_fm2_thread_cleanup_cb,
|
_e_fm2_thread_cleanup_cb,
|
||||||
|
@ -871,6 +874,7 @@ e_fm2_shutdown(void)
|
||||||
eina_stringshare_replace(&_e_fm2_mime_app_edje, NULL);
|
eina_stringshare_replace(&_e_fm2_mime_app_edje, NULL);
|
||||||
eina_stringshare_replace(&_e_fm2_mime_text_uri_list, NULL);
|
eina_stringshare_replace(&_e_fm2_mime_text_uri_list, NULL);
|
||||||
eina_stringshare_replace(&_e_fm2_xds, NULL);
|
eina_stringshare_replace(&_e_fm2_xds, NULL);
|
||||||
|
eina_stringshare_replace(&_e_fm2_mime_xmozurl, NULL);
|
||||||
|
|
||||||
E_FREE_LIST(_e_fm_handlers, ecore_event_handler_del);
|
E_FREE_LIST(_e_fm_handlers, ecore_event_handler_del);
|
||||||
|
|
||||||
|
@ -1617,7 +1621,7 @@ e_fm2_window_object_get(Evas_Object *obj)
|
||||||
EAPI void
|
EAPI void
|
||||||
e_fm2_window_object_set(Evas_Object *obj, E_Object *eobj)
|
e_fm2_window_object_set(Evas_Object *obj, E_Object *eobj)
|
||||||
{
|
{
|
||||||
const char *drop[] = {"text/uri-list", "XdndDirectSave0"};
|
const char *drop[] = {"text/uri-list", "text/x-moz-url", "XdndDirectSave0"};
|
||||||
|
|
||||||
EFM_SMART_CHECK();
|
EFM_SMART_CHECK();
|
||||||
sd->eobj = eobj;
|
sd->eobj = eobj;
|
||||||
|
@ -1628,7 +1632,7 @@ e_fm2_window_object_set(Evas_Object *obj, E_Object *eobj)
|
||||||
_e_fm2_cb_dnd_move,
|
_e_fm2_cb_dnd_move,
|
||||||
_e_fm2_cb_dnd_leave,
|
_e_fm2_cb_dnd_leave,
|
||||||
_e_fm2_cb_dnd_selection_notify,
|
_e_fm2_cb_dnd_selection_notify,
|
||||||
drop, 2,
|
drop, 3,
|
||||||
sd->x, sd->y, sd->w, sd->h);
|
sd->x, sd->y, sd->w, sd->h);
|
||||||
e_drop_handler_responsive_set(sd->drop_handler);
|
e_drop_handler_responsive_set(sd->drop_handler);
|
||||||
e_drop_handler_xds_set(sd->drop_handler, _e_fm2_cb_dnd_drop);
|
e_drop_handler_xds_set(sd->drop_handler, _e_fm2_cb_dnd_drop);
|
||||||
|
@ -6701,14 +6705,14 @@ _e_fm2_cb_dnd_selection_notify_post_mount_timer(E_Fm2_Icon *ic)
|
||||||
static void
|
static void
|
||||||
_e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
|
_e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
|
||||||
{
|
{
|
||||||
E_Fm2_Smart_Data *sd;
|
E_Fm2_Smart_Data *sd = data;
|
||||||
E_Event_Dnd_Drop *ev;
|
E_Event_Dnd_Drop *ev = event;
|
||||||
E_Fm2_Icon *ic;
|
E_Fm2_Icon *ic;
|
||||||
Eina_List *fsel, *l, *ll, *il, *isel = NULL;
|
Eina_List *fsel, *l, *ll, *il, *isel = NULL;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
const char *fp;
|
const char *fp;
|
||||||
|
Evas_Coord ox, oy;
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
Evas_Coord ox, oy, x, y;
|
|
||||||
int adjust_icons = 0;
|
int adjust_icons = 0;
|
||||||
char dirpath[PATH_MAX];
|
char dirpath[PATH_MAX];
|
||||||
char *args = NULL;
|
char *args = NULL;
|
||||||
|
@ -6717,10 +6721,67 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
|
||||||
Eina_Bool lnk = EINA_FALSE, memerr = EINA_FALSE, mnt = EINA_FALSE;
|
Eina_Bool lnk = EINA_FALSE, memerr = EINA_FALSE, mnt = EINA_FALSE;
|
||||||
E_Fm2_Device_Mount_Op *mop = NULL;
|
E_Fm2_Device_Mount_Op *mop = NULL;
|
||||||
|
|
||||||
sd = data;
|
|
||||||
ev = event;
|
|
||||||
if (!_e_fm2_dnd_type_implemented(type)) return;
|
if (!_e_fm2_dnd_type_implemented(type)) return;
|
||||||
|
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
||||||
|
if (type == _e_fm2_mime_xmozurl)
|
||||||
|
{
|
||||||
|
const char **name, *s;
|
||||||
|
Efreet_Desktop *desktop;
|
||||||
|
E_Dnd_X_Moz_Url *moz = ev->data;
|
||||||
|
unsigned int x = 0;
|
||||||
|
|
||||||
|
EINA_INARRAY_FOREACH(moz->link_names, name)
|
||||||
|
{
|
||||||
|
int p;
|
||||||
|
|
||||||
|
s = *name;
|
||||||
|
for (p = 0; p < 7; p++)
|
||||||
|
{
|
||||||
|
Eina_Bool done = EINA_FALSE;
|
||||||
|
|
||||||
|
if (!s[p]) break;
|
||||||
|
if ((s[p] == ':') && (s[p + 1] == '/'))
|
||||||
|
{
|
||||||
|
s = ecore_file_file_get(s);
|
||||||
|
done = EINA_TRUE;
|
||||||
|
}
|
||||||
|
if (done) break;
|
||||||
|
}
|
||||||
|
if (!s[0]) s = ecore_file_file_get(*name);
|
||||||
|
if (!s)
|
||||||
|
{
|
||||||
|
s = *(char**)eina_inarray_nth(moz->links, x);
|
||||||
|
s = ecore_file_file_get(s);
|
||||||
|
}
|
||||||
|
/* FIXME: should this filename be sanitized somehow? */
|
||||||
|
if (sd->drop_icon && sd->drop_after == -1)
|
||||||
|
{
|
||||||
|
//into drop_icon
|
||||||
|
if (S_ISDIR(sd->drop_icon->info.statinfo.st_mode))
|
||||||
|
{
|
||||||
|
if (sd->drop_icon->info.link)
|
||||||
|
snprintf(dirpath, sizeof(dirpath), "%s/Link to %s.desktop", sd->drop_icon->info.link, s);
|
||||||
|
else
|
||||||
|
snprintf(dirpath, sizeof(dirpath), "%s/%s/Link to %s.desktop", sd->realpath, sd->drop_icon->info.file, s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
snprintf(buf, sizeof(buf), "%s/Link to %s.desktop", sd->realpath, s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
snprintf(buf, sizeof(buf), "%s/Link to %s.desktop", sd->realpath, s);
|
||||||
|
desktop = efreet_desktop_empty_new(buf);
|
||||||
|
desktop->type = EFREET_DESKTOP_TYPE_LINK;
|
||||||
|
snprintf(buf, sizeof(buf), "Link to %s", *name);
|
||||||
|
desktop->name = strdup(buf);
|
||||||
|
desktop->icon = strdup("text-html");
|
||||||
|
desktop->url = strdup(*(char**)eina_inarray_nth(moz->links, x));
|
||||||
|
efreet_desktop_save(desktop);
|
||||||
|
efreet_desktop_free(desktop);
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
fsel = e_fm2_uri_path_list_get(ev->data);
|
fsel = e_fm2_uri_path_list_get(ev->data);
|
||||||
fp = eina_list_data_get(fsel);
|
fp = eina_list_data_get(fsel);
|
||||||
if (fp && sd->realpath && ((sd->drop_all) || (!sd->drop_icon)))
|
if (fp && sd->realpath && ((sd->drop_all) || (!sd->drop_icon)))
|
||||||
|
@ -6780,6 +6841,8 @@ _e_fm2_cb_dnd_selection_notify(void *data, const char *type, void *event)
|
||||||
*/
|
*/
|
||||||
if (sd->drop_all) /* drop arbitrarily into the dir */
|
if (sd->drop_all) /* drop arbitrarily into the dir */
|
||||||
{
|
{
|
||||||
|
Evas_Coord x, y;
|
||||||
|
|
||||||
/* move file into this fm dir */
|
/* move file into this fm dir */
|
||||||
for (ll = fsel, il = isel; ll; ll = eina_list_next(ll), il = eina_list_next(il))
|
for (ll = fsel, il = isel; ll; ll = eina_list_next(ll), il = eina_list_next(il))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue