discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=37ff7b43f11fcbc6859fe45584e34d72a13bef77

commit 37ff7b43f11fcbc6859fe45584e34d72a13bef77
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Fri May 12 12:08:32 2017 -0400

    ecore-wl2: emit serials in selection-related events
    
    these allow apps to match the serial of their selection to the related
    event in order to avoid mangling selections from other components
---
 src/lib/ecore_wl2/Ecore_Wl2.h     | 2 ++
 src/lib/ecore_wl2/ecore_wl2_dnd.c | 7 ++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h
index e7e5913..3c8039b 100644
--- a/src/lib/ecore_wl2/Ecore_Wl2.h
+++ b/src/lib/ecore_wl2/Ecore_Wl2.h
@@ -134,6 +134,7 @@ struct _Ecore_Wl2_Event_Data_Source_Event
 {
    unsigned int win, source;
    Ecore_Wl2_Drag_Action action;
+   uint32_t serial;
 };
 
 typedef struct _Ecore_Wl2_Event_Data_Source_Event 
Ecore_Wl2_Event_Data_Source_End;
@@ -149,6 +150,7 @@ typedef struct _Ecore_Wl2_Event_Data_Source_Send
 {
    char *type;
    int fd;
+   uint32_t serial;
 } Ecore_Wl2_Event_Data_Source_Send;
 
 typedef struct _Ecore_Wl2_Event_Seat_Name
diff --git a/src/lib/ecore_wl2/ecore_wl2_dnd.c 
b/src/lib/ecore_wl2/ecore_wl2_dnd.c
index 8a4f5df..d86f482 100644
--- a/src/lib/ecore_wl2/ecore_wl2_dnd.c
+++ b/src/lib/ecore_wl2/ecore_wl2_dnd.c
@@ -110,11 +110,12 @@ data_source_send_free(void *data EINA_UNUSED, void *event)
    if (!ev) return;
 
    free(ev->type);
+   ecore_wl2_display_disconnect(ev->display);
    free(ev);
 }
 
 static void
-data_source_send(void *data, struct wl_data_source *source EINA_UNUSED, const 
char *mime_type, int32_t fd)
+data_source_send(void *data, struct wl_data_source *source, const char 
*mime_type, int32_t fd)
 {
    Ecore_Wl2_Input *input;
    Ecore_Wl2_Event_Data_Source_Send *ev;
@@ -127,6 +128,10 @@ data_source_send(void *data, struct wl_data_source *source 
EINA_UNUSED, const ch
 
    ev->fd = fd;
    ev->type = strdup(mime_type);
+   if (source == input->data.selection.source)
+     ev->serial = input->data.selection.serial;
+   else
+     ev->serial = input->data.drag.serial;
 
    ecore_event_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND, ev,
                    data_source_send_free, NULL);

-- 


Reply via email to