}
static void
+_ecore_x_event_free_selection_request(void *data __UNUSED__, void *ev)
+{
+ Ecore_X_Event_Selection_Request *e;
+
+ XFree(e->target);
+ free(e);
+}
+
+static void
_ecore_x_event_free_selection_notify(void *data __UNUSED__, void *ev)
{
Ecore_X_Event_Selection_Notify *e;
e->requestor = xevent->xselectionrequest.requestor;
e->time = xevent->xselectionrequest.time;
e->selection = xevent->xselectionrequest.selection;
- e->target = xevent->xselectionrequest.target;
+ e->target = XGetAtomName(_ecore_x_disp, xevent->xselectionrequest.target);
e->property = xevent->xselectionrequest.property;
- ecore_event_add(ECORE_X_EVENT_SELECTION_REQUEST, e, NULL, NULL);
+ ecore_event_add(ECORE_X_EVENT_SELECTION_REQUEST, e, _ecore_x_event_free_selection_request, NULL);
if ((sd = _ecore_x_selection_get(xevent->xselectionrequest.selection)) &&
(sd->win == xevent->xselectionrequest.owner))
char *
_ecore_x_selection_target_get(Ecore_X_Atom target)
{
+ /* FIXME: Should not return mem allocated with strdup or X mixed,
+ * one should use free to free, the other XFree */
if (target == ECORE_X_ATOM_FILE_NAME)
return strdup(ECORE_X_SELECTION_TARGET_FILENAME);
else if (target == ECORE_X_ATOM_STRING)