Convert target to string, the user will probably do this anyway.
authorSebastian Dransfeld <sd@tango.flipp.net>
Tue, 19 Dec 2006 06:40:30 +0000 (06:40 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Tue, 19 Dec 2006 06:40:30 +0000 (06:40 +0000)
SVN revision: 27514

legacy/ecore/src/lib/ecore_x/Ecore_X.h
legacy/ecore/src/lib/ecore_x/ecore_x_events.c
legacy/ecore/src/lib/ecore_x/ecore_x_selection.c

index 912e3be..1123dc6 100644 (file)
@@ -543,7 +543,7 @@ struct _Ecore_X_Event_Selection_Request
    Ecore_X_Window    requestor;
    Ecore_X_Time      time;
    Ecore_X_Atom      selection;
-   Ecore_X_Atom      target;
+   char             *target;
    Ecore_X_Atom      property;
 };
 
index 5b87f34..fa942b4 100644 (file)
@@ -167,6 +167,15 @@ _ecore_x_event_free_xdnd_enter(void *data __UNUSED__, void *ev)
 }
 
 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;
@@ -1120,9 +1129,9 @@ _ecore_x_event_handle_selection_request(XEvent *xevent)
    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))
index e7e9d71..a5cb4ec 100644 (file)
@@ -277,6 +277,8 @@ _ecore_x_selection_target_atom_get(const char *target)
 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)