Ken Thomases : winemac: Don' t allow dead-key state to repeat after characters are generated.

Alexandre Julliard julliard at winehq.org
Tue Sep 10 14:49:56 CDT 2013


Module: wine
Branch: master
Commit: ae2ce18fd669efb797e11ef0e614be309e83fd3f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ae2ce18fd669efb797e11ef0e614be309e83fd3f

Author: Ken Thomases <ken at codeweavers.com>
Date:   Mon Sep  9 22:37:36 2013 -0500

winemac: Don't allow dead-key state to repeat after characters are generated.

It's fairly common in Mac keyboard layouts that, if you type a dead key twice,
the second key press will both produce a non-dead character and also
perpetuate the dead-key state.  For example, with the U.S. layout, Option-E,
E will produce "é" and Option-E, Option-E, E will produce "´é".  Windows
keyboard layouts don't tend to do this.  The second key press produces the
non-dead character and clears the dead-key state.

---

 dlls/winemac.drv/keyboard.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/dlls/winemac.drv/keyboard.c b/dlls/winemac.drv/keyboard.c
index 98d17ba..cc25789 100644
--- a/dlls/winemac.drv/keyboard.c
+++ b/dlls/winemac.drv/keyboard.c
@@ -1394,7 +1394,10 @@ INT CDECL macdrv_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
     }
     if (!is_menu)
     {
-        thread_data->dead_key_state = deadKeyState;
+        if (keyAction != kUCKeyActionUp && len > 0 && deadKeyState == thread_data->dead_key_state)
+            thread_data->dead_key_state = 0;
+        else
+            thread_data->dead_key_state = deadKeyState;
 
         if (keyAction == kUCKeyActionUp)
             goto done;




More information about the wine-cvs mailing list