e_keyrouter: call hook functions about release events, if press events call hook...
[platform/upstream/enlightenment.git] / src / bin / e_keyrouter.h
1 #ifdef E_TYPEDEFS
2
3 typedef struct _E_Keyrouter_Intercept_Hook E_Keyrouter_Intercept_Hook;
4 typedef struct _E_Keyrouter_Info E_Keyrouter_Info;
5 typedef struct _E_Keyrouter_Key_List_Node E_Keyrouter_Key_List_Node;
6 typedef struct _E_Keyrouter_Key_List_Node* E_Keyrouter_Key_List_NodePtr;
7 typedef struct _E_Keyrouter_Tizen_HWKey E_Keyrouter_Tizen_HWKey;
8 typedef struct _E_Keyrouter_Grabbed_Key E_Keyrouter_Grabbed_Key;
9 typedef struct _E_Keyrouter_Registered_Window_Info E_Keyrouter_Registered_Window_Info;
10 typedef struct _E_Keyrouter_Event_Data E_Keyrouter_Event_Data;
11
12 typedef enum _E_Keyrouter_Intercept_Hook_Point
13 {
14    E_KEYROUTER_INTERCEPT_HOOK_BEFORE_KEYROUTING,
15    E_KEYROUTER_INTERCEPT_HOOK_DELIVER_FOCUS,
16    E_KEYROUTER_INTERCEPT_HOOK_LAST
17 } E_Keyrouter_Intercept_Hook_Point;
18
19 typedef enum _E_Keyrouter_Client_Status
20 {
21    E_KRT_CSTAT_DEAD = 0,
22    E_KRT_CSTAT_ALIVE,
23    E_KRT_CSTAT_UNGRAB
24 } E_Keyrouter_Client_Status;
25
26 typedef Eina_Bool (*E_Keyrouter_Intercept_Hook_Cb) (void *data, int type, Ecore_Event_Key *event);
27
28 #else
29 #ifndef E_KEYROUTER_H
30 #define E_KEYROUTER_H
31
32 extern E_API E_Keyrouter_Info e_keyrouter;
33
34 struct _E_Keyrouter_Intercept_Hook
35 {
36    EINA_INLIST;
37    E_Keyrouter_Intercept_Hook_Point hookpoint;
38    E_Keyrouter_Intercept_Hook_Cb func;
39    void *data;
40    unsigned char delete_me : 1;
41 };
42
43 struct _E_Keyrouter_Info
44 {
45    void *(*keygrab_list_get)(void);
46    int (*max_keycode_get)(void);
47 };
48
49 struct _E_Keyrouter_Registered_Window_Info
50 {
51    struct wl_resource *surface;
52    Eina_List *keys;
53 };
54
55 struct _E_Keyrouter_Key_List_Node
56 {
57    struct wl_resource *surface;
58    struct wl_client *wc;
59    Eina_Bool focused;
60    E_Keyrouter_Client_Status status;
61 };
62
63 struct _E_Keyrouter_Tizen_HWKey
64 {
65    char *name;
66    int keycode;
67    int no_privcheck;
68    int repeat;
69 };
70
71 struct _E_Keyrouter_Grabbed_Key
72 {
73    int keycode;
74    char* keyname;
75    Eina_Bool no_privcheck;
76    Eina_Bool repeat;
77
78    Eina_List *excl_ptr;
79    Eina_List *or_excl_ptr;
80    Eina_List *top_ptr;
81    Eina_List *shared_ptr;
82    Eina_List *press_ptr;
83    Eina_List *pic_off_ptr;
84 };
85
86 struct _E_Keyrouter_Event_Data
87 {
88    struct wl_client *client;
89    struct wl_resource *surface;
90
91    int mode;
92
93    Eina_Bool ignored;
94
95    void *data;
96 };
97
98 E_API E_Keyrouter_Intercept_Hook *e_keyrouter_intercept_hook_add(E_Keyrouter_Intercept_Hook_Point hookpoint, E_Keyrouter_Intercept_Hook_Cb func, const void *data);
99 E_API void e_keyrouter_intercept_hook_del(E_Keyrouter_Intercept_Hook *ch);
100 E_API Eina_Bool e_keyrouter_intercept_hook_call(E_Keyrouter_Intercept_Hook_Point hookpoint, int type, Ecore_Event_Key *event);
101
102 E_API int e_keyrouter_init(void);
103 E_API int e_keyrouter_shutdown(void);
104
105
106 #endif
107 #endif
108