Просмотр исходного кода

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 лет назад
Родитель
Сommit
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);