From: Mike Blumenkrantz Date: Fri, 12 May 2017 16:08:32 +0000 (-0400) Subject: ecore-wl2: emit serials in selection-related events X-Git-Tag: upstream/1.20.0~1093 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37ff7b43f11fcbc6859fe45584e34d72a13bef77;p=platform%2Fupstream%2Fefl.git 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 --- 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);