diff options
-rw-r--r-- | src/lib/ecore_wl2/Ecore_Wl2.h | 2 | ||||
-rw-r--r-- | src/lib/ecore_wl2/ecore_wl2_dnd.c | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index e7e59132b0..3c8039bd8b 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 8a4f5df462..d86f482991 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); |