1
- #include "keypress.h"
2
- #include "deadbeef_rand.h"
3
- #include "microsleep.h"
1
+ #include "../ keypress.h"
2
+ #include "../ deadbeef_rand.h"
3
+ #include "../ microsleep.h"
4
4
5
5
#include <ctype.h> /* For isupper() */
6
6
7
- #if defined(IS_MACOSX )
8
- #include <ApplicationServices/ApplicationServices.h>
9
- #import <IOKit/hidsystem/IOHIDLib.h>
10
- #import <IOKit/hidsystem/ev_keymap.h>
11
- #elif defined(USE_X11 )
12
- #include <X11/extensions/XTest.h>
13
- #include "xdisplay.h"
14
- #endif
7
+ #include <ApplicationServices/ApplicationServices.h>
8
+ #import <IOKit/hidsystem/IOHIDLib.h>
9
+ #import <IOKit/hidsystem/ev_keymap.h>
15
10
16
- /* Convenience wrappers around ugly APIs. */
17
- #if defined(IS_WINDOWS )
18
- #define WIN32_KEY_EVENT_WAIT (key , flags ) \
19
- (win32KeyEvent(key, flags), Sleep(DEADBEEF_RANDRANGE(0, 63)))
20
- #elif defined(USE_X11 )
21
- #define X_KEY_EVENT (display , key , is_press ) \
22
- (XTestFakeKeyEvent(display, \
23
- XKeysymToKeycode(display, key), \
24
- is_press, CurrentTime), \
25
- XSync(display, false))
26
- #define X_KEY_EVENT_WAIT (display , key , is_press ) \
27
- (X_KEY_EVENT(display, key, is_press), \
28
- microsleep(DEADBEEF_UNIFORM(0.0, 62.5)))
29
- #endif
30
-
31
- #if defined(IS_MACOSX )
32
11
static io_connect_t _getAuxiliaryKeyDriver (void )
33
12
{
34
13
static mach_port_t sEventDrvrRef = 0 ;
@@ -49,71 +28,9 @@ static io_connect_t _getAuxiliaryKeyDriver(void)
49
28
}
50
29
return sEventDrvrRef ;
51
30
}
52
- #endif
53
-
54
- #if defined(IS_WINDOWS )
55
- void win32KeyEvent (int key , MMKeyFlags flags )
56
- {
57
- int scan = MapVirtualKey (key & 0xff , MAPVK_VK_TO_VSC );
58
-
59
- /* Set the scan code for extended keys */
60
- switch (key )
61
- {
62
- case VK_RCONTROL :
63
- case VK_SNAPSHOT : /* Print Screen */
64
- case VK_RMENU : /* Right Alt / Alt Gr */
65
- case VK_PAUSE : /* Pause / Break */
66
- case VK_HOME :
67
- case VK_UP :
68
- case VK_PRIOR : /* Page up */
69
- case VK_LEFT :
70
- case VK_RIGHT :
71
- case VK_END :
72
- case VK_DOWN :
73
- case VK_NEXT : /* 'Page Down' */
74
- case VK_INSERT :
75
- case VK_DELETE :
76
- case VK_LWIN :
77
- case VK_RWIN :
78
- case VK_APPS : /* Application */
79
- case VK_VOLUME_MUTE :
80
- case VK_VOLUME_DOWN :
81
- case VK_VOLUME_UP :
82
- case VK_MEDIA_NEXT_TRACK :
83
- case VK_MEDIA_PREV_TRACK :
84
- case VK_MEDIA_STOP :
85
- case VK_MEDIA_PLAY_PAUSE :
86
- case VK_BROWSER_BACK :
87
- case VK_BROWSER_FORWARD :
88
- case VK_BROWSER_REFRESH :
89
- case VK_BROWSER_STOP :
90
- case VK_BROWSER_SEARCH :
91
- case VK_BROWSER_FAVORITES :
92
- case VK_BROWSER_HOME :
93
- case VK_LAUNCH_MAIL :
94
- {
95
- flags |= KEYEVENTF_EXTENDEDKEY ;
96
- break ;
97
- }
98
- }
99
-
100
- /* Set the scan code for keyup */
101
- if ( flags & KEYEVENTF_KEYUP ) {
102
- scan |= 0x80 ;
103
- }
104
-
105
- INPUT keyboardInput ;
106
- keyboardInput .type = INPUT_KEYBOARD ;
107
- keyboardInput .ki .wScan = scan ;
108
- keyboardInput .ki .dwFlags = KEYEVENTF_SCANCODE | flags ;
109
- keyboardInput .ki .time = 0 ;
110
- SendInput (1 , & keyboardInput , sizeof (keyboardInput ));
111
- }
112
- #endif
113
31
114
32
void toggleKeyCode (MMKeyCode code , const bool down , MMKeyFlags flags )
115
33
{
116
- #if defined(IS_MACOSX )
117
34
/* The media keys all have 1000 added to them to help us detect them. */
118
35
if (code >= 1000 ) {
119
36
code = code - 1000 ; /* Get the real keycode. */
@@ -127,37 +44,14 @@ void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
127
44
kr = IOHIDPostEvent ( _getAuxiliaryKeyDriver (), NX_SYSDEFINED , loc , & event , kNXEventDataVersion , 0 , FALSE );
128
45
assert ( KERN_SUCCESS == kr );
129
46
} else {
130
- CGEventRef keyEvent = CGEventCreateKeyboardEvent (NULL ,
131
- (CGKeyCode )code , down );
47
+ CGEventRef keyEvent = CGEventCreateKeyboardEvent (NULL , (CGKeyCode )code , down );
132
48
assert (keyEvent != NULL );
133
49
134
50
CGEventSetType (keyEvent , down ? kCGEventKeyDown : kCGEventKeyUp );
135
51
CGEventSetFlags (keyEvent , flags );
136
52
CGEventPost (kCGSessionEventTap , keyEvent );
137
53
CFRelease (keyEvent );
138
54
}
139
- #elif defined(IS_WINDOWS )
140
- const DWORD dwFlags = down ? 0 : KEYEVENTF_KEYUP ;
141
-
142
- /* Parse modifier keys. */
143
- if (flags & MOD_META ) WIN32_KEY_EVENT_WAIT (K_META , dwFlags );
144
- if (flags & MOD_ALT ) WIN32_KEY_EVENT_WAIT (K_ALT , dwFlags );
145
- if (flags & MOD_CONTROL ) WIN32_KEY_EVENT_WAIT (K_CONTROL , dwFlags );
146
- if (flags & MOD_SHIFT ) WIN32_KEY_EVENT_WAIT (K_SHIFT , dwFlags );
147
-
148
- win32KeyEvent (code , dwFlags );
149
- #elif defined(USE_X11 )
150
- Display * display = XGetMainDisplay ();
151
- const Bool is_press = down ? True : False ; /* Just to be safe. */
152
-
153
- /* Parse modifier keys. */
154
- if (flags & MOD_META ) X_KEY_EVENT_WAIT (display , K_META , is_press );
155
- if (flags & MOD_ALT ) X_KEY_EVENT_WAIT (display , K_ALT , is_press );
156
- if (flags & MOD_CONTROL ) X_KEY_EVENT_WAIT (display , K_CONTROL , is_press );
157
- if (flags & MOD_SHIFT ) X_KEY_EVENT_WAIT (display , K_SHIFT , is_press );
158
-
159
- X_KEY_EVENT (display , code , is_press );
160
- #endif
161
55
}
162
56
163
57
void tapKeyCode (MMKeyCode code , MMKeyFlags flags )
@@ -170,22 +64,10 @@ void toggleKey(char c, const bool down, MMKeyFlags flags)
170
64
{
171
65
MMKeyCode keyCode = keyCodeForChar (c );
172
66
173
- //Prevent unused variable warning for Mac and Linux.
174
- #if defined(IS_WINDOWS )
175
- int modifiers ;
176
- #endif
177
-
178
67
if (isupper (c ) && !(flags & MOD_SHIFT )) {
179
68
flags |= MOD_SHIFT ; /* Not sure if this is safe for all layouts. */
180
69
}
181
70
182
- #if defined(IS_WINDOWS )
183
- modifiers = keyCode >> 8 ; // Pull out modifers.
184
- if ((modifiers & 1 ) != 0 ) flags |= MOD_SHIFT ; // Uptdate flags from keycode modifiers.
185
- if ((modifiers & 2 ) != 0 ) flags |= MOD_CONTROL ;
186
- if ((modifiers & 4 ) != 0 ) flags |= MOD_ALT ;
187
- keyCode = keyCode & 0xff ; // Mask out modifiers.
188
- #endif
189
71
toggleKeyCode (keyCode , down , flags );
190
72
}
191
73
@@ -195,7 +77,6 @@ void tapKey(char c, MMKeyFlags flags)
195
77
toggleKey (c , false, flags );
196
78
}
197
79
198
- #if defined(IS_MACOSX )
199
80
void toggleUnicodeKey (unsigned long ch , const bool down )
200
81
{
201
82
/* This function relies on the convenient
@@ -229,9 +110,6 @@ void toggleUniKey(char c, const bool down)
229
110
{
230
111
toggleUnicodeKey (c , down );
231
112
}
232
- #else
233
- #define toggleUniKey (c , down ) toggleKey(c, down, MOD_NONE)
234
- #endif
235
113
236
114
static void tapUniKey (char c )
237
115
{
@@ -272,14 +150,8 @@ void typeString(const char *str)
272
150
n = ((c & 0x07 ) << 18 ) | (c1 << 12 ) | (c2 << 6 ) | c3 ;
273
151
}
274
152
275
- #if defined(IS_MACOSX )
276
153
toggleUnicodeKey (n , true);
277
154
toggleUnicodeKey (n , false);
278
- #else
279
- toggleUniKey (n , true);
280
- toggleUniKey (n , false);
281
- #endif
282
-
283
155
}
284
156
}
285
157
0 commit comments