keyboard tracker run in thread
authorZbigniew Kosinski <z.kosinski@samsung.com>
Mon, 20 Oct 2014 08:19:34 +0000 (10:19 +0200)
committerZbigniew Kosinski <z.kosinski@samsung.com>
Thu, 23 Oct 2014 14:22:18 +0000 (16:22 +0200)
src/keyboard_tracker.c
src/main.c
src/navigator.c

index b6a71c1..190ecd9 100644 (file)
@@ -2,23 +2,26 @@
 #include <atspi/atspi.h>
 #include "keyboard_tracker.h"
 #include "logger.h"
+#include <Ecore.h>
 
+static Ecore_Thread *thread;
 static AtspiDeviceListener *listener;
 static Keyboard_Tracker_Cb user_cb;
 static void *user_data;
 
 static gboolean device_cb(const AtspiDeviceEvent *stroke, void *data)
 {
-  Key k = KEY_COUNT;
-
-  if (!strcmp(stroke->event_string, "Up"))
+  Key k;
+  if (!strcmp(stroke->event_string, "KP_Up"))
       k = KEY_UP;
-  else if (!strcmp(stroke->event_string, "Down"))
+  else if (!strcmp(stroke->event_string, "KP_Down"))
       k = KEY_DOWN;
-  else if (!strcmp(stroke->event_string, "Left"))
+  else if (!strcmp(stroke->event_string, "KP_Left"))
       k = KEY_LEFT;
-  else if (!strcmp(stroke->event_string, "Right"))
+  else if (!strcmp(stroke->event_string, "KP_Right"))
       k = KEY_RIGHT;
+  else
+      return FALSE;
 
     if(user_cb)
          user_cb(user_data, k);
@@ -26,17 +29,35 @@ static gboolean device_cb(const AtspiDeviceEvent *stroke, void *data)
    return TRUE;
 }
 
+void blocking(void *list, Ecore_Thread *th)
+{
+   atspi_event_main();
+}
+
+void cancel(void *list, Ecore_Thread *th)
+{
+   atspi_event_quit();
+}
+
 void keyboard_tracker_init(void)
 {
    atspi_init();
    listener =  atspi_device_listener_new(device_cb, NULL, NULL);
-   atspi_register_keystroke_listener(listener, NULL, 0, ATSPI_KEY_PRESSED, ATSPI_KEYLISTENER_SYNCHRONOUS, NULL);
+   atspi_register_keystroke_listener(listener, NULL, 0, ATSPI_KEY_PRESSED, ATSPI_KEYLISTENER_SYNCHRONOUS|ATSPI_KEYLISTENER_CANCONSUME, NULL);
+
+   ecore_init();
+   thread = ecore_thread_run(blocking, NULL, cancel, NULL);
+   ERROR("keyboard tracker init");
 }
+
 void keyboard_tracker_register(Keyboard_Tracker_Cb cb, void *data)
 {
    user_cb = cb;
    user_data = data;
 }
+
 void keyboard_tracker_shutdown(void)
 {
+   ecore_thread_cancel(thread);
+   ERROR("keyboard tracker shutdown");
 }
index ef581da..4358c08 100755 (executable)
@@ -44,6 +44,7 @@ static int app_terminate(void *data)
     eldbus_connection_unref(a11y_conn);
     window_tracker_shutdown();
     gesture_tracker_shutdown();
+    navigator_shutdown();
     eldbus_shutdown();
     logger_shutdown();
     return 0;
index 2251030..d4a75d9 100644 (file)
@@ -333,8 +333,10 @@ static void on_keyboard(void *data, Key k)
           _focus_next();
           break;
        case KEY_UP:
+          _value_inc_widget();
           break;
        case KEY_DOWN:
+          _value_dec_widget();
           break;
        default:
          ERROR("Function not implemented for key :%d", k);
@@ -353,5 +355,5 @@ void navigator_init(void)
 }
 void navigator_shutdown(void)
 {
-   return;
+   keyboard_tracker_shutdown();
 }