瀏覽代碼

Reset dead keys when the SDL window loses focus, so dead keys pressed in SDL applications don't affect text input into other applications.

Sam Lantinga 10 年之前
父節點
當前提交
0b576962ca

+ 1 - 0
src/video/windows/SDL_windowsevents.c

@@ -451,6 +451,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
 
                 if (SDL_GetKeyboardFocus() == data->window) {
                 if (SDL_GetKeyboardFocus() == data->window) {
                     SDL_SetKeyboardFocus(NULL);
                     SDL_SetKeyboardFocus(NULL);
+                    WIN_ResetDeadKeys();
                 }
                 }
 
 
                 ClipCursor(NULL);
                 ClipCursor(NULL);

+ 3 - 7
src/video/windows/SDL_windowskeyboard.c

@@ -165,7 +165,6 @@ WIN_ResetDeadKeys()
     this tries to undo the effect pressing the deadkey.
     this tries to undo the effect pressing the deadkey.
     see: http://archives.miloush.net/michkap/archive/2006/09/10/748775.html
     see: http://archives.miloush.net/michkap/archive/2006/09/10/748775.html
     */
     */
-
     BYTE keyboardState[256];
     BYTE keyboardState[256];
     WCHAR buffer[16];
     WCHAR buffer[16];
     int keycode, scancode, result, i;
     int keycode, scancode, result, i;
@@ -174,17 +173,14 @@ WIN_ResetDeadKeys()
 
 
     keycode = VK_SPACE;
     keycode = VK_SPACE;
     scancode = MapVirtualKey(keycode, MAPVK_VK_TO_VSC);
     scancode = MapVirtualKey(keycode, MAPVK_VK_TO_VSC);
-    if (scancode == 0)
-    {
+    if (scancode == 0) {
         /* the keyboard doesn't have this key */
         /* the keyboard doesn't have this key */
         return;
         return;
     }
     }
 
 
-    for (i = 0; i < 5; i++)
-    {
+    for (i = 0; i < 5; i++) {
         result = ToUnicode(keycode, scancode, keyboardState, (LPWSTR)buffer, 16, 0);
         result = ToUnicode(keycode, scancode, keyboardState, (LPWSTR)buffer, 16, 0);
-        if (result > 0)
-        {
+        if (result > 0) {
             /* success */
             /* success */
             return;
             return;
         }
         }

+ 2 - 0
src/video/windows/SDL_windowskeyboard.h

@@ -27,6 +27,8 @@ extern void WIN_InitKeyboard(_THIS);
 extern void WIN_UpdateKeymap(void);
 extern void WIN_UpdateKeymap(void);
 extern void WIN_QuitKeyboard(_THIS);
 extern void WIN_QuitKeyboard(_THIS);
 
 
+extern void WIN_ResetDeadKeys(void);
+
 extern void WIN_StartTextInput(_THIS);
 extern void WIN_StartTextInput(_THIS);
 extern void WIN_StopTextInput(_THIS);
 extern void WIN_StopTextInput(_THIS);
 extern void WIN_SetTextInputRect(_THIS, SDL_Rect *rect);
 extern void WIN_SetTextInputRect(_THIS, SDL_Rect *rect);