move around - flatter.
[profile/ivi/ecore.git] / src / lib / ecore_x / xlib / ecore_x_test.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 #include "ecore_x_private.h"
6 #include "Ecore_X.h"
7
8
9 EAPI int
10 ecore_x_test_fake_key_down(const char *key)
11 {
12 #ifdef ECORE_XTEST
13    KeyCode             keycode = 0;
14    KeySym              keysym;
15    
16    if (!strncmp(key, "Keycode-", 8))
17      keycode = atoi(key + 8);
18    else
19      {
20         keysym = XStringToKeysym(key);
21         if (keysym == NoSymbol) return 0;
22         keycode  = XKeysymToKeycode(_ecore_x_disp, keysym);
23      }
24    if (keycode == 0) return 0;
25    return XTestFakeKeyEvent(_ecore_x_disp, keycode, 1, 0);
26 #else
27    return 0;
28 #endif
29 }
30
31 EAPI int
32 ecore_x_test_fake_key_up(const char *key)
33 {
34 #ifdef ECORE_XTEST
35    KeyCode             keycode = 0;
36    KeySym              keysym;
37    
38    if (!strncmp(key, "Keycode-", 8))
39      keycode = atoi(key + 8);
40    else
41      {
42         keysym = XStringToKeysym(key);
43         if (keysym == NoSymbol) return 0;
44         keycode  = XKeysymToKeycode(_ecore_x_disp, keysym);
45      }
46    if (keycode == 0) return 0;
47    return XTestFakeKeyEvent(_ecore_x_disp, keycode, 0, 0);
48 #else
49    return 0;
50 #endif
51 }
52
53 EAPI int
54 ecore_x_test_fake_key_press(const char *key)
55 {
56 #ifdef ECORE_XTEST
57    KeyCode             keycode = 0;
58    KeySym              keysym = 0;
59    int                 shift = 0;
60    
61    if (!strncmp(key, "Keycode-", 8))
62      keycode = atoi(key + 8);
63    else
64      {
65         keysym = XStringToKeysym(key);
66         if (keysym == NoSymbol) return 0;
67         keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
68         if (XKeycodeToKeysym(_ecore_x_disp, keycode, 0) != keysym)
69           {  
70              if (XKeycodeToKeysym(_ecore_x_disp, keycode, 1) == keysym)
71                shift = 1;
72              else
73                keycode = 0;
74           }
75         else
76           shift = 0;
77      }
78    if (keycode == 0)
79      {
80         static int mod;
81         static KeySym *keysyms;
82         static int keycode_min, keycode_max, keycode_num;
83         int i;  
84
85         XDisplayKeycodes(_ecore_x_disp, &keycode_min, &keycode_max);
86         keysyms = XGetKeyboardMapping(_ecore_x_disp, keycode_min,
87                                       keycode_max - keycode_min + 1,
88                                       &keycode_num);
89         mod = (mod + 1) & 0x7;
90         i = (keycode_max - keycode_min - mod - 1) * keycode_num;
91         
92         keysyms[i] = keysym;
93         XChangeKeyboardMapping(_ecore_x_disp, keycode_min, keycode_num,
94                                keysyms, (keycode_max - keycode_min));
95         XSync(_ecore_x_disp, False);
96         keycode = keycode_max - mod - 1;
97      }
98    if (shift)
99      XTestFakeKeyEvent(_ecore_x_disp, 
100                        XKeysymToKeycode(_ecore_x_disp, XK_Shift_L), 1, 0);
101    XTestFakeKeyEvent(_ecore_x_disp, keycode, 1, 0);
102    XTestFakeKeyEvent(_ecore_x_disp, keycode, 0, 0);
103    if (shift)
104      XTestFakeKeyEvent(_ecore_x_disp, 
105                        XKeysymToKeycode(_ecore_x_disp, XK_Shift_L), 0, 0);
106    return 1;
107 #else
108    return 0;
109 #endif
110 }
111
112 EAPI const char *
113 ecore_x_keysym_string_get(int keysym)
114 {
115    return XKeysymToString(keysym);
116 }