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