{
Eina_Stringshare *interface;
unsigned int id, version;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Global;
typedef struct _Ecore_Wl2_Event_Global
unsigned int window;
unsigned int timestamp;
Eo *dev; //The seat device
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Focus_In;
typedef struct _Ecore_Wl2_Event_Focus_Out
unsigned int window;
unsigned int timestamp;
Eo *dev; //The seat device
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Focus_Out;
typedef struct _Ecore_Wl2_Event_Dnd_Enter
Ecore_Wl2_Offer *offer;
int x, y;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Dnd_Enter;
typedef struct _Ecore_Wl2_Event_Dnd_Leave
unsigned int win, source;
Ecore_Wl2_Offer *offer;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Dnd_Leave;
typedef struct _Ecore_Wl2_Event_Dnd_Motion
Ecore_Wl2_Offer *offer;
int x, y;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Dnd_Motion;
typedef struct _Ecore_Wl2_Event_Dnd_Drop
int x, y;
Ecore_Wl2_Offer *offer;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Dnd_Drop;
typedef struct _Ecore_Wl2_Event_Dnd_End
{
unsigned int win, source;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Dnd_End;
struct _Ecore_Wl2_Event_Data_Source_Event
Ecore_Wl2_Drag_Action action;
unsigned int seat;
uint32_t serial;
+ Ecore_Wl2_Display *display;
};
typedef struct _Ecore_Wl2_Event_Data_Source_Event Ecore_Wl2_Event_Data_Source_End;
{
char *type;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Data_Source_Target;
typedef struct _Ecore_Wl2_Event_Data_Source_Send
int fd;
unsigned int seat;
uint32_t serial;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Data_Source_Send;
typedef struct _Ecore_Wl2_Event_Seat_Name
{
Eina_Stringshare *name;
unsigned int id;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Seat_Name;
typedef struct _Ecore_Wl2_Event_Seat_Capabilities
Eina_Bool pointer_enabled : 1;
Eina_Bool keyboard_enabled : 1;
Eina_Bool touch_enabled : 1;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Seat_Capabilities;
typedef enum
int len;
const char *mimetype;
unsigned int seat;
+ Ecore_Wl2_Display *display;
} Ecore_Wl2_Event_Offer_Data_Ready;
typedef enum _Ecore_Wl2_Window_Type
if (!ev) return;
free(ev->type);
+ ecore_wl2_display_disconnect(ev->display);
free(ev);
}
ev = calloc(1, sizeof(Ecore_Wl2_Event_Data_Source_Target));
if (!ev) return;
ev->seat = input->id;
+ ev->display = input->display;
+ ev->display->refs++;
if (mime_type) ev->type = strdup(mime_type);
ev->serial = input->data.selection.serial;
else
ev->serial = input->data.drag.serial;
+ ev->display = input->display;
+ ev->display->refs++;
ecore_event_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND, ev,
data_source_send_free, NULL);
ev->action = input->data.drag.action;
ev->seat = input->id;
ev->serial = input->data.drag.serial;
+ ev->display = input->display;
+ ev->display->refs++;
}
static void
event_fill((void*)ev, input);
- ecore_event_add(event, ev, NULL, NULL);
+ ecore_event_add(event, ev, _display_event_free, ev->display);
}
static void
_unset_serial(void *user_data, void *event)
{
Ecore_Wl2_Offer *offer = user_data;
+ Ecore_Wl2_Event_Dnd_Enter *ev = event;
if (offer)
offer->serial = 0;
-
+ ecore_wl2_display_disconnect(ev->display);
free(event);
}
ev->y = y;
ev->offer = input->drag;
ev->seat = input->id;
+ ev->display = input->display;
+ ev->display->refs++;
ecore_event_add(ECORE_WL2_EVENT_DND_ENTER, ev, _unset_serial, input->drag);
}
_delay_offer_destroy(void *user_data, void *event)
{
Ecore_Wl2_Offer *offer = user_data;
+ Ecore_Wl2_Event_Dnd_Leave *ev = event;
if (offer)
_ecore_wl2_offer_unref(offer);
-
+ ecore_wl2_display_disconnect(ev->display);
free(event);
}
ev->offer = input->drag;
ev->offer->ref++;
ev->seat = input->id;
+ ev->display = input->display;
+ ev->display->refs++;
input->drag->window_id = 0;
ecore_event_add(ECORE_WL2_EVENT_DND_LEAVE, ev, _delay_offer_destroy, ev->offer);
ev->y = y;
ev->offer = input->drag;
ev->seat = input->id;
+ ev->display = input->display;
+ ev->display->refs++;
ecore_event_add(ECORE_WL2_EVENT_DND_MOTION, ev, _unset_serial, input->drag);
}
ev->y = input->pointer.sy;
ev->offer = input->drag;
ev->seat = input->id;
+ ev->display = input->display;
+ ev->display->refs++;
- ecore_event_add(ECORE_WL2_EVENT_DND_DROP, ev, NULL, NULL);
+ ecore_event_add(ECORE_WL2_EVENT_DND_DROP, ev, _display_event_free, ev->display);
}
void
_free_buf(void *user_data, void *event)
{
Read_Buffer *buf = user_data;
+ Ecore_Wl2_Event_Offer_Data_Ready *ev = event;
_ecore_wl2_offer_unref(buf->offer);
free(buf->data);
free(buf->mimetype);
free(user_data);
+ ecore_wl2_display_disconnect(ev->display);
free(event);
}
ev->len = buf->len;
ev->mimetype = buf->mimetype;
ev->seat = buf->offer->input->id;
+ ev->display = buf->offer->input->display;
+ ev->display->refs++;
ecore_event_add(ECORE_WL2_EVENT_OFFER_DATA_READY, ev, _free_buf, buf);
buf->offer->reads = eina_list_remove(buf->offer->reads, fdh);
_input_event_cb_free, ev->dev);
}
+static void
+_input_event_focus_cb_free(void *data, void *event)
+{
+ Ecore_Wl2_Event_Focus_In *ev = event;
+ if (data)
+ efl_unref(data);
+ ecore_wl2_display_disconnect(ev->display);
+ free(event);
+}
+
void
_ecore_wl2_input_focus_in_send(Ecore_Wl2_Window *window)
{
ev->timestamp = input->timestamp;
ev->window = window->id;
ev->dev = _ecore_wl2_seat_dev_get(input, window->id);
- ecore_event_add(ECORE_WL2_EVENT_FOCUS_IN, ev, _input_event_cb_free,
+ ev->display = input->display;
+ ev->display->refs++;
+ ecore_event_add(ECORE_WL2_EVENT_FOCUS_IN, ev, _input_event_focus_cb_free,
ev->dev);
}
ev->timestamp = input->timestamp;
ev->window = window->id;
ev->dev = _ecore_wl2_seat_dev_get(input, window->id);
- ecore_event_add(ECORE_WL2_EVENT_FOCUS_OUT, ev, _input_event_cb_free,
+ ev->display = input->display;
+ ev->display->refs++;
+ ecore_event_add(ECORE_WL2_EVENT_FOCUS_OUT, ev, _input_event_focus_cb_free,
ev->dev);
}
ev->pointer_enabled = !!(caps & WL_SEAT_CAPABILITY_POINTER);
ev->keyboard_enabled = !!(caps & WL_SEAT_CAPABILITY_KEYBOARD);
ev->touch_enabled = !!(caps & WL_SEAT_CAPABILITY_TOUCH);
+ ev->display = input->display;
+ ev->display->refs++;
- ecore_event_add(ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED, ev, NULL, NULL);
+ ecore_event_add(ECORE_WL2_EVENT_SEAT_CAPABILITIES_CHANGED, ev, _display_event_free, ev->display);
}
static void
ev = event;
eina_stringshare_del(ev->name);
+ ecore_wl2_display_disconnect(ev->display);
free(ev);
}
ev->id = input->id;
ev->name = eina_stringshare_add(name);
+ ev->display = input->display;
+ ev->display->refs++;
ecore_event_add(ECORE_WL2_EVENT_SEAT_NAME_CHANGED, ev,
_cb_seat_event_free, NULL);