Bläddra i källkod

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 år sedan
förälder
incheckning
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) {
                     SDL_SetKeyboardFocus(NULL);
+                    WIN_ResetDeadKeys();
                 }
 
                 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.
     see: http://archives.miloush.net/michkap/archive/2006/09/10/748775.html
     */
-
     BYTE keyboardState[256];
     WCHAR buffer[16];
     int keycode, scancode, result, i;
@@ -174,17 +173,14 @@ WIN_ResetDeadKeys()
 
     keycode = VK_SPACE;
     scancode = MapVirtualKey(keycode, MAPVK_VK_TO_VSC);
-    if (scancode == 0)
-    {
+    if (scancode == 0) {
         /* the keyboard doesn't have this key */
         return;
     }
 
-    for (i = 0; i < 5; i++)
-    {
+    for (i = 0; i < 5; i++) {
         result = ToUnicode(keycode, scancode, keyboardState, (LPWSTR)buffer, 16, 0);
-        if (result > 0)
-        {
+        if (result > 0) {
             /* success */
             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_QuitKeyboard(_THIS);
 
+extern void WIN_ResetDeadKeys(void);
+
 extern void WIN_StartTextInput(_THIS);
 extern void WIN_StopTextInput(_THIS);
 extern void WIN_SetTextInputRect(_THIS, SDL_Rect *rect);