1010
1111void win32KeyEvent (int key , MMKeyFlags flags )
1212{
13- int scan = MapVirtualKey (key & 0xff , MAPVK_VK_TO_VSC );
14-
1513 /* Set the scan code for extended keys */
1614 switch (key )
1715 {
@@ -55,27 +53,44 @@ void win32KeyEvent(int key, MMKeyFlags flags)
5553
5654 INPUT keyboardInput ;
5755 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 ));
6259}
6360
6461void toggleKeyCode (MMKeyCode code , const bool down , MMKeyFlags flags )
6562{
6663 const DWORD dwFlags = down ? 0 : KEYEVENTF_KEYUP ;
6764
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+ }
7994}
8095
8196void tapKeyCode (MMKeyCode code , MMKeyFlags flags )
@@ -88,17 +103,9 @@ void toggleKey(char c, const bool down, MMKeyFlags flags)
88103{
89104 MMKeyCode keyCode = keyCodeForChar (c );
90105
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.
100107 if ((modifiers & 1 ) != 0 )
101- flags |= MOD_SHIFT ; // Uptdate flags from keycode modifiers.
108+ flags |= MOD_SHIFT ; // Update flags from keycode modifiers.
102109 if ((modifiers & 2 ) != 0 )
103110 flags |= MOD_CONTROL ;
104111 if ((modifiers & 4 ) != 0 )
0 commit comments