1 #include "ecore_xcb_private.h"
3 # include <xcb/xtest.h>
4 # include <X11/keysym.h>
8 static Eina_Bool _test_avail = EINA_FALSE;
11 _ecore_xcb_xtest_init(void)
13 LOGFN(__FILE__, __LINE__, __FUNCTION__);
15 #ifdef ECORE_XCB_XTEST
16 xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_test_id);
21 _ecore_xcb_xtest_finalize(void)
23 #ifdef ECORE_XCB_XTEST
24 const xcb_query_extension_reply_t *ext_reply;
27 LOGFN(__FILE__, __LINE__, __FUNCTION__);
29 #ifdef ECORE_XCB_XTEST
30 ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_test_id);
31 if ((ext_reply) && (ext_reply->present))
32 _test_avail = EINA_TRUE;
37 #ifdef ECORE_XCB_XTEST
38 ecore_x_test_fake_key_down(const char *key)
40 ecore_x_test_fake_key_down(const char *key EINA_UNUSED)
43 #ifdef ECORE_XCB_XTEST
44 xcb_keycode_t keycode = 0;
45 xcb_void_cookie_t cookie;
46 xcb_generic_error_t *err;
49 LOGFN(__FILE__, __LINE__, __FUNCTION__);
52 if (!_test_avail) return EINA_FALSE;
54 #ifdef ECORE_XCB_XTEST
55 keycode = _ecore_xcb_keymap_string_to_keycode(key);
56 if (keycode == XCB_NO_SYMBOL) return EINA_FALSE;
59 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_PRESS,
60 keycode, XCB_CURRENT_TIME,
61 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
62 err = xcb_request_check(_ecore_xcb_conn, cookie);
75 #ifdef ECORE_XCB_XTEST
76 ecore_x_test_fake_key_up(const char *key)
78 ecore_x_test_fake_key_up(const char *key EINA_UNUSED)
81 #ifdef ECORE_XCB_XTEST
82 xcb_keycode_t keycode = 0;
83 xcb_void_cookie_t cookie;
84 xcb_generic_error_t *err;
87 LOGFN(__FILE__, __LINE__, __FUNCTION__);
90 if (!_test_avail) return EINA_FALSE;
92 #ifdef ECORE_XCB_XTEST
93 keycode = _ecore_xcb_keymap_string_to_keycode(key);
94 if (keycode == XCB_NO_SYMBOL) return EINA_FALSE;
97 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_RELEASE,
98 keycode, XCB_CURRENT_TIME,
99 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
100 err = xcb_request_check(_ecore_xcb_conn, cookie);
113 #ifdef ECORE_XCB_XTEST
114 ecore_x_test_fake_key_press(const char *key)
116 ecore_x_test_fake_key_press(const char *key EINA_UNUSED)
119 #ifdef ECORE_XCB_XTEST
120 xcb_keycode_t keycode = 0;
121 xcb_keysym_t keysym = 0;
122 xcb_keycode_t shift_code = 0;
123 xcb_void_cookie_t cookie;
124 xcb_generic_error_t *err;
125 Eina_Bool shift = EINA_FALSE;
128 LOGFN(__FILE__, __LINE__, __FUNCTION__);
131 if (!_test_avail) return EINA_FALSE;
133 #ifdef ECORE_XCB_XTEST
134 keycode = _ecore_xcb_keymap_string_to_keycode(key);
135 keysym = _ecore_xcb_keymap_keycode_to_keysym(keycode, 0);
136 if (keysym == XCB_NO_SYMBOL)
138 keysym = _ecore_xcb_keymap_keycode_to_keysym(keycode, 1);
139 if (keysym != XCB_NO_SYMBOL)
145 xcb_keycode_t *keycodes;
148 keycodes = _ecore_xcb_keymap_keysym_to_keycode(XK_Shift_L);
149 while (keycodes[i] != XCB_NO_SYMBOL)
151 if (keycodes[i] != 0)
153 shift_code = keycodes[i];
163 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_PRESS,
164 shift_code, XCB_CURRENT_TIME,
165 ((xcb_screen_t *)_ecore_xcb_screen)->root,
167 err = xcb_request_check(_ecore_xcb_conn, cookie);
176 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_PRESS,
177 keycode, XCB_CURRENT_TIME,
178 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
179 err = xcb_request_check(_ecore_xcb_conn, cookie);
186 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_RELEASE,
187 keycode, XCB_CURRENT_TIME,
188 ((xcb_screen_t *)_ecore_xcb_screen)->root, 0, 0, 0);
189 err = xcb_request_check(_ecore_xcb_conn, cookie);
199 xcb_test_fake_input(_ecore_xcb_conn, XCB_KEY_RELEASE,
200 shift_code, XCB_CURRENT_TIME,
201 ((xcb_screen_t *)_ecore_xcb_screen)->root,
203 err = xcb_request_check(_ecore_xcb_conn, cookie);