winex11.drv: Move AltGr state into per thread data

Dmitry Timoshkov dmitry at codeweavers.com
Fri Nov 9 05:49:18 CST 2007


Hello,

Changelog:
    winex11.drv: Move AltGr state into per thread data.
---
 dlls/winex11.drv/keyboard.c    |    8 ++++----
 dlls/winex11.drv/x11drv.h      |    1 +
 dlls/winex11.drv/x11drv_main.c |    1 +
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 31b4542..8c19267 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -88,7 +88,7 @@ static BYTE TrackSysKey = 0; /* determine whether ALT key up will cause a WM_SYS
 static int min_keycode, max_keycode, keysyms_per_keycode;
 static WORD keyc2vkey[256], keyc2scan[256];
 
-static int NumLockMask, AltGrMask; /* mask in the XKeyEvent state */
+static int NumLockMask; /* mask in the XKeyEvent state */
 static int kcControl, kcAlt, kcShift, kcNumLock, kcCapsLock; /* keycodes */
 
 static char KEYBOARD_MapDeadKeysym(KeySym keysym);
@@ -1393,7 +1393,7 @@ void X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
 
        Ref: X Keyboard Extension: Library specification (section 14.1.1 and 17.1.1) */
     /* Save also all possible modifier states. */
-    AltGrMask = event->state & (0x6000 | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask);
+    x11drv_thread_data()->alt_gr_mask = event->state & (0x6000 | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask);
 
     if (TRACE_ON(key)){
 	const char *ksname;
@@ -2440,8 +2440,8 @@ INT X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, LPBYTE lpKeyState,
     }
 
     /* Restore saved AltGr state */
-    TRACE("AltGrMask = %04x\n", AltGrMask);
-    e.state |= AltGrMask;
+    TRACE("AltGrMask = %04x\n", x11drv_thread_data()->alt_gr_mask);
+    e.state |= x11drv_thread_data()->alt_gr_mask;
 
     TRACE_(key)("(%04X, %04X) : faked state = 0x%04x\n",
 		virtKey, scanCode, e.state);
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 445badc..78bd251 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -513,6 +513,7 @@ struct x11drv_thread_data
     HWND     last_focus;           /* last window that had focus */
     XIM      xim;                  /* input method */
     Window   selection_wnd;        /* window used for selection interactions */
+    unsigned alt_gr_mask;          /* mask in the XKeyEvent state */
 };
 
 extern struct x11drv_thread_data *x11drv_init_thread_data(void);
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index d26fa8b..313c524 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -639,6 +639,7 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
     data->grab_window = None;
     data->last_focus = 0;
     data->selection_wnd = 0;
+    data->alt_gr_mask = 0;
     TlsSetValue( thread_data_tls_index, data );
     return data;
 }
-- 
1.5.3.4






More information about the wine-patches mailing list