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
This commit is contained in:
Mike Blumenkrantz 2017-05-12 12:08:32 -04:00
parent d51252a69e
commit 37ff7b43f1
2 changed files with 8 additions and 1 deletions

View File

@ -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

View File

@ -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);