forked from enlightenment/efl
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:
parent
d51252a69e
commit
37ff7b43f1
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue