.y = -1,
.device = -1,
.slot = -1,
+ .keycode = 0,
},
.event_listener_list = NULL,
enum event_state state;
+#if defined(_USE_ECORE_TIME_GET)
+ double tv;
+#else
struct timeval tv; /* Recording Activate / Deactivate time */
+#endif
int x; /* RelX */
int y; /* RelY */
};
if (item) {
char event_ch = EVENT_CH;
+#if defined(_USE_ECORE_TIME_GET)
+ s_info.event_data.tv = ecore_time_get();
+#else
if (gettimeofday(&s_info.event_data.tv, NULL) < 0) {
ErrPrint("gettimeofday: %s\n", strerror(errno));
}
+#endif
memcpy(item, &s_info.event_data, sizeof(*item));
if (s_info.event_data.device < 0) {
s_info.event_data.x = -1;
s_info.event_data.y = -1;
+ s_info.event_data.slot = -1;
}
break;
/*
}
break;
case EV_KEY:
+ DbgPrint("EV_KEY: 0x%X\n", event->value);
+ s_info.event_data.keycode = event->value;
break;
case EV_REL:
break;
static void *event_thread_main(void *data)
{
fd_set set;
- int ret = 0;
+ long ret = 0;
struct input_event input_event;
char *ptr = (char *)&input_event;
int offset = 0;
EINA_LIST_FOREACH_SAFE(s_info.event_listener_list, l, n, listener) {
switch (listener->state) {
case EVENT_STATE_ACTIVATE:
+#if defined(_USE_ECORE_TIME_GET)
+ if (listener->tv > item->tv) {
+ continue;
+ }
+#else
if (timercmp(&listener->tv, &item->tv, >)) {
/* Ignore previous events before activating this listener */
continue;
}
+#endif
next_state = EVENT_STATE_ACTIVATED;
cur_state = listener->state;
break;
case EVENT_STATE_DEACTIVATE:
+#if defined(_USE_ECORE_TIME_GET)
+ if (listener->tv > item->tv) {
+ /* Consuming all events occurred while activating this listener */
+ cur_state = EVENT_STATE_ACTIVATED;
+ next_state = EVENT_STATE_ACTIVATED;
+ break;
+ }
+#else
if (timercmp(&listener->tv, &item->tv, >)) {
/* Consuming all events occurred while activating this listener */
cur_state = EVENT_STATE_ACTIVATED;
next_state = EVENT_STATE_ACTIVATED;
break;
}
+#endif
cur_state = listener->state;
next_state = EVENT_STATE_DEACTIVATED;
ErrPrint("Error: %s\n", strerror(errno));
}
- status = pipe2(s_info.evt_pipe, O_NONBLOCK | O_CLOEXEC);
+ status = pipe2(s_info.evt_pipe, O_CLOEXEC);
if (status < 0) {
ErrPrint("Unable to prepare evt pipe: %s\n", strerror(errno));
if (close(s_info.handle) < 0) {
return LB_STATUS_ERROR_FAULT;
}
- status = pipe2(s_info.tcb_pipe, O_NONBLOCK | O_CLOEXEC);
+ status = pipe2(s_info.tcb_pipe, O_CLOEXEC);
if (status < 0) {
ErrPrint("Unable to prepare tcb pipe: %s\n", strerror(errno));
if (close(s_info.handle) < 0) {
return LB_STATUS_ERROR_MEMORY;
}
+#if defined(_USE_ECORE_TIME_GET)
+ listener->tv = ecore_time_get();
+#else
if (gettimeofday(&listener->tv, NULL) < 0) {
ErrPrint("gettimeofday: %s\n", strerror(errno));
DbgFree(listener);
return LB_STATUS_ERROR_FAULT;
}
+#endif
listener->event_cb = event_cb;
listener->cbdata = data;
if (status != 0) {
ErrPrint("Failed to join a thread: %s\n", strerror(errno));
} else {
- DbgPrint("Thread returns: %d\n", (int)ret);
+ DbgPrint("Thread returns: %p\n", ret);
}
if (close(s_info.handle) < 0) {
s_info.event_data.x = -1;
s_info.event_data.y = -1;
+ s_info.event_data.slot = -1;
return LB_STATUS_SUCCESS;
}