Sync with the latest code of phone profile
[platform/framework/web/data-provider-master.git] / src / event.c
index 592ee7a..0604c11 100644 (file)
@@ -71,6 +71,7 @@ static struct info {
                .y = -1,
                .device = -1,
                .slot = -1,
+               .keycode = 0,
        },
 
        .event_listener_list = NULL,
@@ -83,7 +84,11 @@ struct event_listener {
 
        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 */
 };
@@ -132,9 +137,13 @@ static inline int processing_input_event(struct input_event *event)
                        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));
 
@@ -156,6 +165,7 @@ static inline int processing_input_event(struct input_event *event)
                        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;
                /*
@@ -169,6 +179,8 @@ static inline int processing_input_event(struct input_event *event)
                }
                break;
        case EV_KEY:
+               DbgPrint("EV_KEY: 0x%X\n", event->value);
+               s_info.event_data.keycode = event->value;
                break;
        case EV_REL:
                break;
@@ -236,7 +248,7 @@ static inline int processing_input_event(struct input_event *event)
 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;
@@ -375,21 +387,36 @@ static Eina_Bool event_read_cb(void *data, Ecore_Fd_Handler *handler)
                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;
@@ -468,7 +495,7 @@ static int activate_thread(void)
                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) {
@@ -478,7 +505,7 @@ static int activate_thread(void)
                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) {
@@ -535,11 +562,15 @@ HAPI int event_activate(int x, int y, int (*event_cb)(enum event_state state, st
                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;
@@ -614,7 +645,7 @@ HAPI int event_deactivate(int (*event_cb)(enum event_state state, struct event_d
        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) {
@@ -633,6 +664,7 @@ HAPI int event_deactivate(int (*event_cb)(enum event_state state, struct event_d
 
        s_info.event_data.x = -1;
        s_info.event_data.y = -1;
+       s_info.event_data.slot = -1;
        return LB_STATUS_SUCCESS;
 }