10
10
11
11
void win32KeyEvent (int key , MMKeyFlags flags )
12
12
{
13
- int scan = MapVirtualKey (key & 0xff , MAPVK_VK_TO_VSC );
14
-
15
13
/* Set the scan code for extended keys */
16
14
switch (key )
17
15
{
@@ -55,27 +53,44 @@ void win32KeyEvent(int key, MMKeyFlags flags)
55
53
56
54
INPUT keyboardInput ;
57
55
keyboardInput .type = INPUT_KEYBOARD ;
58
- keyboardInput .ki .wScan = (WORD )scan ;
59
- keyboardInput .ki .dwFlags = KEYEVENTF_SCANCODE | flags ;
60
- keyboardInput .ki .time = 0 ;
61
- SendInput (1 , & keyboardInput , sizeof (keyboardInput ));
56
+ keyboardInput .ki .wVk = (WORD )key ;
57
+ keyboardInput .ki .dwFlags = flags ;
58
+ SendInput (1 , & keyboardInput , sizeof (INPUT ));
62
59
}
63
60
64
61
void toggleKeyCode (MMKeyCode code , const bool down , MMKeyFlags flags )
65
62
{
66
63
const DWORD dwFlags = down ? 0 : KEYEVENTF_KEYUP ;
67
64
68
- /* Parse modifier keys. */
69
- if (flags & MOD_META )
70
- WIN32_KEY_EVENT_WAIT (K_META , dwFlags );
71
- if (flags & MOD_ALT )
72
- WIN32_KEY_EVENT_WAIT (K_ALT , dwFlags );
73
- if (flags & MOD_CONTROL )
74
- WIN32_KEY_EVENT_WAIT (K_CONTROL , dwFlags );
75
- if (flags & MOD_SHIFT )
76
- WIN32_KEY_EVENT_WAIT (K_SHIFT , dwFlags );
77
-
78
- win32KeyEvent (code , dwFlags );
65
+ if (down )
66
+ {
67
+ /* Parse modifier keys. */
68
+ if (flags & MOD_META )
69
+ WIN32_KEY_EVENT_WAIT (K_META , dwFlags );
70
+ if (flags & MOD_ALT )
71
+ WIN32_KEY_EVENT_WAIT (K_ALT , dwFlags );
72
+ if (flags & MOD_CONTROL )
73
+ WIN32_KEY_EVENT_WAIT (K_CONTROL , dwFlags );
74
+ if (flags & MOD_SHIFT )
75
+ WIN32_KEY_EVENT_WAIT (K_SHIFT , dwFlags );
76
+
77
+ WIN32_KEY_EVENT_WAIT (code , dwFlags );
78
+ }
79
+ else
80
+ {
81
+ WIN32_KEY_EVENT_WAIT (code , dwFlags );
82
+
83
+ /* Parse modifier keys. */
84
+ if (flags & MOD_META )
85
+ win32KeyEvent (K_META , dwFlags );
86
+ if (flags & MOD_ALT )
87
+ win32KeyEvent (K_ALT , dwFlags );
88
+ if (flags & MOD_CONTROL )
89
+ win32KeyEvent (K_CONTROL , dwFlags );
90
+ if (flags & MOD_SHIFT )
91
+ win32KeyEvent (K_SHIFT , dwFlags );
92
+
93
+ }
79
94
}
80
95
81
96
void tapKeyCode (MMKeyCode code , MMKeyFlags flags )
@@ -88,17 +103,9 @@ void toggleKey(char c, const bool down, MMKeyFlags flags)
88
103
{
89
104
MMKeyCode keyCode = keyCodeForChar (c );
90
105
91
- //Prevent unused variable warning for Mac and Linux.
92
- int modifiers ;
93
-
94
- if (isupper (c ) && !(flags & MOD_SHIFT ))
95
- {
96
- flags |= MOD_SHIFT ; /* Not sure if this is safe for all layouts. */
97
- }
98
-
99
- modifiers = keyCode >> 8 ; // Pull out modifers.
106
+ int modifiers = keyCode >> 8 ; // Pull out modifers.
100
107
if ((modifiers & 1 ) != 0 )
101
- flags |= MOD_SHIFT ; // Uptdate flags from keycode modifiers.
108
+ flags |= MOD_SHIFT ; // Update flags from keycode modifiers.
102
109
if ((modifiers & 2 ) != 0 )
103
110
flags |= MOD_CONTROL ;
104
111
if ((modifiers & 4 ) != 0 )
0 commit comments