Init screen-reader from tizen.org
[profile/tv/apps/native/screen-reader.git] / src / keyboard_tracker.c
1 #include <string.h>
2 #include <atspi/atspi.h>
3 #include "keyboard_tracker.h"
4 #include "logger.h"
5
6 static AtspiDeviceListener *listener;
7 static Keyboard_Tracker_Cb user_cb;
8 static void *user_data;
9
10 static gboolean device_cb(const AtspiDeviceEvent *stroke, void *data)
11 {
12   Key k;
13   if (!strcmp(stroke->event_string, "KP_Up"))
14       k = KEY_UP;
15   else if (!strcmp(stroke->event_string, "KP_Down"))
16       k = KEY_DOWN;
17   else if (!strcmp(stroke->event_string, "KP_Left"))
18       k = KEY_LEFT;
19   else if (!strcmp(stroke->event_string, "KP_Right"))
20       k = KEY_RIGHT;
21   else
22       return FALSE;
23
24     if(user_cb)
25          user_cb(user_data, k);
26
27    return TRUE;
28 }
29
30 void keyboard_tracker_init(void)
31 {
32    atspi_init();
33    listener =  atspi_device_listener_new(device_cb, NULL, NULL);
34    atspi_register_keystroke_listener(listener, NULL, 0, ATSPI_KEY_PRESSED, ATSPI_KEYLISTENER_SYNCHRONOUS|ATSPI_KEYLISTENER_CANCONSUME, NULL);
35    DEBUG("keyboard tracker init");
36 }
37
38 void keyboard_tracker_register(Keyboard_Tracker_Cb cb, void *data)
39 {
40    user_cb = cb;
41    user_data = data;
42 }
43
44 void keyboard_tracker_shutdown(void)
45 {
46    atspi_deregister_keystroke_listener(listener, NULL, 0, ATSPI_KEY_PRESSED, NULL);
47    DEBUG("keyboard tracker shutdown");
48 }