Ken Thomases : winex11: Assign OEM virtual key codes in a separate loop.
Alexandre Julliard
julliard at winehq.org
Tue Oct 27 09:46:33 CDT 2009
Module: wine
Branch: master
Commit: f6a6712a31d6e58b8b8d5a018b20d46e31f6b036
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f6a6712a31d6e58b8b8d5a018b20d46e31f6b036
Author: Ken Thomases <ken at codeweavers.com>
Date: Mon Oct 26 22:29:16 2009 -0500
winex11: Assign OEM virtual key codes in a separate loop.
---
dlls/winex11.drv/keyboard.c | 70 +++++++++++++++++++++++++-----------------
1 files changed, 42 insertions(+), 28 deletions(-)
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 1964d5c..97d4be6 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1737,7 +1737,6 @@ void X11DRV_InitKeyboard( Display *display )
e2.display = display;
e2.state = 0;
- OEMvkey = VK_OEM_8; /* next is available. */
memset(keyc2vkey, 0, sizeof(keyc2vkey));
for (keyc = min_keycode; keyc <= max_keycode; keyc++)
{
@@ -1854,39 +1853,54 @@ void X11DRV_InitKeyboard( Display *display )
}
}
- if (!vkey)
+ if (vkey)
+ {
+ TRACE("keycode %04x => vkey %04x\n", e2.keycode, vkey);
+ keyc2vkey[e2.keycode] = vkey;
+ }
+ } /* for */
+
+ /* Others keys: let's assign OEM virtual key codes in the allowed range,
+ * that is ([0xba,0xc0], [0xdb,0xe4], 0xe6 (given up) et [0xe9,0xf5]) */
+ OEMvkey = VK_OEM_8; /* next is available. */
+ for (keyc = min_keycode; keyc <= max_keycode; keyc++)
+ {
+ if (keyc2vkey[keyc] & 0xff)
+ continue;
+
+ e2.keycode = (KeyCode)keyc;
+ keysym = XLookupKeysym(&e2, 0);
+ if (!keysym)
+ continue;
+
+ do
{
- /* Others keys: let's assign OEM virtual key codes in the allowed range,
- * that is ([0xba,0xc0], [0xdb,0xe4], 0xe6 (given up) et [0xe9,0xf5]) */
- do
+ switch (++OEMvkey)
{
- switch (++OEMvkey)
- {
- case 0xc1 : OEMvkey=0xdb; break;
- case 0xe5 : OEMvkey=0xe9; break;
- case 0xf6 : OEMvkey=0xf5; WARN("No more OEM vkey available!\n");
- }
- } while (OEMvkey < 0xf5 && vkey_used[OEMvkey]);
+ case 0xc1 : OEMvkey=0xdb; break;
+ case 0xe5 : OEMvkey=0xe9; break;
+ case 0xf6 : OEMvkey=0xf5; WARN("No more OEM vkey available!\n");
+ }
+ } while (OEMvkey < 0xf5 && vkey_used[OEMvkey]);
- vkey = VKEY_IF_NOT_USED(OEMvkey);
+ vkey = VKEY_IF_NOT_USED(OEMvkey);
- if (TRACE_ON(keyboard))
+ if (TRACE_ON(keyboard))
+ {
+ TRACE("OEM specific virtual key %X assigned to keycode %X:\n",
+ OEMvkey, e2.keycode);
+ TRACE("(");
+ for (i = 0; i < keysyms_per_keycode; i += 1)
{
- TRACE("OEM specific virtual key %X assigned to keycode %X:\n",
- OEMvkey, e2.keycode);
- TRACE("(");
- for (i = 0; i < keysyms_per_keycode; i += 1)
- {
- const char *ksname;
+ const char *ksname;
- keysym = XLookupKeysym(&e2, i);
- ksname = XKeysymToString(keysym);
- if (!ksname)
- ksname = "NoSymbol";
- TRACE( "%lX (%s) ", keysym, ksname);
- }
- TRACE(")\n");
+ keysym = XLookupKeysym(&e2, i);
+ ksname = XKeysymToString(keysym);
+ if (!ksname)
+ ksname = "NoSymbol";
+ TRACE( "%lX (%s) ", keysym, ksname);
}
+ TRACE(")\n");
}
if (vkey)
More information about the wine-cvs
mailing list