Eina_Bool init;
struct wl_display *dpy;
struct wl_event_queue *queue;
+ int dpy_fd;
+ Ecore_Fd_Handler *fd_hdl;
struct
{
{
EINA_FALSE,
NULL, NULL,
+ -1, NULL,
{ NULL, NULL, NULL }, /* tizen_policy protocol */
{ NULL, NULL, NULL, NULL, NULL, 0 }, /* screenshooter protocol */
{ NULL, -1 }, /* tizen_input_device_manager protocol */
return ret;
}
+static Eina_Bool
+_efl_util_fd_cb(void *data, Ecore_Fd_Handler *hdl)
+{
+ if (_eflutil.wl.dpy && _eflutil.wl.queue)
+ {
+ wl_display_roundtrip_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+ return ECORE_CALLBACK_RENEW;
+ }
+ else
+ {
+ return ECORE_CALLBACK_CANCEL;
+ }
+}
+
API efl_util_gesture_h
efl_util_gesture_initialize(void)
{
efl_util_gesture_h gesture_h = NULL;
+ int dpy_fd = -1;
gesture_h = (efl_util_gesture_h)calloc(1, sizeof(struct _efl_util_gesture_h));
if (!gesture_h)
EFL_UTIL_EVENT_GESTURE_EDGE_DRAG = ecore_event_type_new();
EFL_UTIL_EVENT_GESTURE_TAP = ecore_event_type_new();
EFL_UTIL_EVENT_GESTURE_PALM_COVER = ecore_event_type_new();
+
+ dpy_fd = wl_display_get_fd(_eflutil.wl.dpy);
+ _eflutil.wl.dpy_fd = fcntl(dpy_fd, F_DUPFD_CLOEXEC, 0);
+ if (_eflutil.wl.dpy_fd >= 0)
+ _eflutil.wl.fd_hdl = ecore_main_fd_handler_add(_eflutil.wl.dpy_fd,
+ ECORE_FD_READ | ECORE_FD_WRITE | ECORE_FD_ERROR,
+ _efl_util_fd_cb, NULL,
+ NULL, NULL);
}
_eflutil.wl.gesture.event_init++;
gesture_h->init = EINA_TRUE;
EFL_UTIL_EVENT_GESTURE_EDGE_DRAG = 0;
EFL_UTIL_EVENT_GESTURE_TAP = 0;
EFL_UTIL_EVENT_GESTURE_PALM_COVER = 0;
+ if (_eflutil.wl.dpy_fd >= 0)
+ {
+ ecore_main_fd_handler_del(_eflutil.wl.fd_hdl);
+ _eflutil.wl.fd_hdl = NULL;
+ close(_eflutil.wl.dpy_fd);
+ _eflutil.wl.dpy_fd = -1;
+ }
}
return EFL_UTIL_ERROR_NONE;