more work on the xdnd code... pending e17 commit

SVN revision: 5755
This commit is contained in:
Carsten Haitzler 2001-12-08 06:30:11 +00:00
parent 794d7739ea
commit e1cc039289
3 changed files with 49 additions and 36 deletions

View File

@ -813,6 +813,8 @@ extern "C"
void *ecore_dnd_selection_get(Window win, Window req, Atom type, void *ecore_dnd_selection_get(Window win, Window req, Atom type,
int *size); int *size);
void ecore_dnd_set_data(Window win); void ecore_dnd_set_data(Window win);
void ecore_dnd_set_action(Window win);
void ecore_dnd_send_data(Window win, Window source_win, void ecore_dnd_send_data(Window win, Window source_win,
void *data, int size, Atom dest_atom, void *data, int size, Atom dest_atom,
int type); int type);

View File

@ -903,12 +903,7 @@ ecore_event_x_handle_selection_notify(XEvent * xevent)
{ {
buf[i] = 0; buf[i] = 0;
e->num_files++; e->num_files++;
if (e->files) REALLOC_PTR(e->files, e->num_files);
{
REALLOC_PTR(e->files, e->num_files);
}
else
e->files = NEW_PTR(e->num_files);
e->files[e->num_files - 1] = strdup(buf); e->files[e->num_files - 1] = strdup(buf);
buf[0] = 0; buf[0] = 0;
i = 0; i = 0;
@ -917,6 +912,13 @@ ecore_event_x_handle_selection_notify(XEvent * xevent)
is++; is++;
} }
} }
if (i > 0)
{
buf[i] = 0;
e->num_files++;
REALLOC_PTR(e->files, e->num_files);
e->files[e->num_files - 1] = strdup(buf);
}
FREE(buf); FREE(buf);
FREE(data); FREE(data);
} }
@ -1056,7 +1058,8 @@ ecore_event_x_handle_client_message(XEvent * xevent)
ECORE_ATOM(atom_xdndactionlink, "XdndActionLink"); ECORE_ATOM(atom_xdndactionlink, "XdndActionLink");
ECORE_ATOM(atom_xdndactionmove, "XdndActionMove"); ECORE_ATOM(atom_xdndactionmove, "XdndActionMove");
ECORE_ATOM(atom_text_uri_list, "text/uri-list"); ECORE_ATOM(atom_text_uri_list, "text/uri-list");
/* forst type = delete event sent to client */
/* first type = delete event sent to client */
if ((xevent->xclient.message_type == atom_wm_protocols) && if ((xevent->xclient.message_type == atom_wm_protocols) &&
(xevent->xclient.format == 32) && (xevent->xclient.format == 32) &&
(xevent->xclient.data.l[0] == (long)atom_wm_delete_window)) (xevent->xclient.data.l[0] == (long)atom_wm_delete_window))
@ -1072,9 +1075,9 @@ ecore_event_x_handle_client_message(XEvent * xevent)
(xevent->xclient.format == 32)) (xevent->xclient.format == 32))
{ {
/* if ((xevent->xclient.data.l[2] == (long)atom_text_uri_list) || /* if ((xevent->xclient.data.l[2] == (long)atom_text_uri_list) ||
(xevent->xclient.data.l[3] == (long)atom_text_uri_list) || * (xevent->xclient.data.l[3] == (long)atom_text_uri_list) ||
(xevent->xclient.data.l[4] == (long)atom_text_uri_list)) * (xevent->xclient.data.l[4] == (long)atom_text_uri_list))
*/ { */ {
Ecore_Event_Dnd_Drop_Request *e; Ecore_Event_Dnd_Drop_Request *e;

View File

@ -2175,33 +2175,41 @@ ecore_dnd_selection_get(Window win, Window req, Atom type, int *size)
void void
ecore_dnd_set_data(Window win) ecore_dnd_set_data(Window win)
{ {
static int atom_xdndactioncopy = 0; static Atom atom_xdndselection = 0;
static int atom_xdndactionmove = 0;
static int atom_xdndactionlink = 0;
static int atom_xdndactionask = 0;
static Atom atom_xdndactionlist = 0;
static Atom atom_xdndselection = 0;
if (!disp) return; if (!disp) return;
ECORE_ATOM(atom_xdndactioncopy, "XdndActionCopy"); ECORE_ATOM(atom_xdndselection, "XdndSelection");
ECORE_ATOM(atom_xdndactionmove, "XdndActionMove"); ecore_dnd_set_action(win);
ECORE_ATOM(atom_xdndactionlink, "XdndActionLink"); XSetSelectionOwner(disp, atom_xdndselection, win, CurrentTime);
ECORE_ATOM(atom_xdndactionask, "XdndActionAsk"); }
ECORE_ATOM(atom_xdndactionlist, "XdndActionList");
ECORE_ATOM(atom_xdndselection, "XdndSelection"); void
if (dnd_copy) ecore_dnd_set_action(Window win)
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32, {
&atom_xdndactioncopy, 1); static int atom_xdndactioncopy = 0;
else if (dnd_link) static int atom_xdndactionmove = 0;
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32, static int atom_xdndactionlink = 0;
&atom_xdndactionlink, 1); static int atom_xdndactionask = 0;
else if (dnd_move) static Atom atom_xdndactionlist = 0;
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32,
&atom_xdndactionmove, 1); if (!disp) return;
else ECORE_ATOM(atom_xdndactioncopy, "XdndActionCopy");
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32, ECORE_ATOM(atom_xdndactionmove, "XdndActionMove");
&atom_xdndactionask, 1); ECORE_ATOM(atom_xdndactionlink, "XdndActionLink");
XSetSelectionOwner(disp, atom_xdndselection, win, CurrentTime); ECORE_ATOM(atom_xdndactionask, "XdndActionAsk");
ECORE_ATOM(atom_xdndactionlist, "XdndActionList");
if (dnd_copy)
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32,
&atom_xdndactioncopy, 1);
else if (dnd_link)
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32,
&atom_xdndactionlink, 1);
else if (dnd_move)
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32,
&atom_xdndactionmove, 1);
else
ecore_window_property_set(win, atom_xdndactionlist, XA_ATOM, 32,
&atom_xdndactionask, 1);
} }
void void