[Bug 30853] New:=?UTF-8?Q?=20Wine=20doesn=E2=80=99t=20always=20handle=20?="right alt" properly

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Jun 6 05:01:39 CDT 2012


http://bugs.winehq.org/show_bug.cgi?id=30853

             Bug #: 30853
           Summary: Wine doesn’t always handle "right alt" properly
           Product: Wine
           Version: 1.5.5
          Platform: x86
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: winex11.drv
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: sloonz at gmail.com
    Classification: Unclassified


Created attachment 40410
  --> http://bugs.winehq.org/attachment.cgi?id=40410
workaround/quick and dirty fix

I’m trying to get World of Warcraft working under Wine. However, I have huge
trouble with key bindings (I use unusual key bindings : I use the right half of
my keyboard, whereas most players use the left half).

After investigation, I found 3 bugs (different behaviors between Wine and my
Windows installation). The first one is the management of the right "Alt" key
(labeled "Alt-Gr" on my keyboard). When I press AltGr+l under Windows with
Spy++, I get the followings events :

    <03637> 0007045A P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D
fExtended:0 fAltDown:0 fRepeat:0 fUp:0
    <03638> 0007045A P WM_KEYDOWN nVirtKey:VK_MENU cRepeat:1 ScanCode:38
fExtended:1 fAltDown:1 fRepeat:0 fUp:0
    <03639> 0007045A P WM_KEYDOWN nVirtKey:'L' cRepeat:1 ScanCode:18
fExtended:0 fAltDown:1 fRepeat:0 fUp:0
    <03640> 0007045A P WM_DEADCHAR chCharCode:'002F' (47) cRepeat:1 ScanCode:18
fExtended:0 fAltDown:1 fRepeat:0 fUp:0
    <03641> 0007045A P WM_KEYUP nVirtKey:'L' cRepeat:1 ScanCode:18 fExtended:0
fAltDown:1 fRepeat:1 fUp:1
    <03642> 0007045A P WM_SYSKEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D
fExtended:0 fAltDown:1 fRepeat:1 fUp:1
    <03643> 0007045A P WM_KEYUP nVirtKey:VK_MENU cRepeat:1 ScanCode:38
fExtended:1 fAltDown:0 fRepeat:1 fUp:1

Under Wine 1.5.5 however (WINEDEBUG=+msg), I get those :

    trace:msg:peek_message got type 7 msg 100 (WM_KEYDOWN) hwnd 0x6007e wp eb
lp 760001 [note: wp = VK_OEM_PA2]
    trace:msg:peek_message got type 7 msg 101 (WM_KEYUP) hwnd 0x6007e wp 4c lp
c0260001 [note: wp = 'L']
    trace:msg:peek_message got type 7 msg 101 (WM_KEYUP) hwnd 0x6007e wp eb lp
c0760001 [note: wp = VK_OEM_PA2]

With xev, I get :

    KeyPress event, serial 93, synthetic NO, window 0x4000001,
        root 0xbc, subw 0x0, time 5086996, (1585,410), root:(2578,425),
        state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen
YES,
        XKeysymToKeycode returns keycode: 92
        XLookupString gives 0 bytes: 
        XmbLookupString gives 0 bytes: 
        XFilterEvent returns: False

    KeyRelease event, serial 93, synthetic NO, window 0x4000001,
        root 0xbc, subw 0x0, time 5087052, (1585,410), root:(2578,425),
        state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen
YES,
        XKeysymToKeycode returns keycode: 92
        XLookupString gives 0 bytes: 
        XFilterEvent returns: False

After "setxkbmap us", AltGr is bound to Alt_R under X (checked with xev), and I
get this under Wine :

    trace:msg:peek_message got type 7 msg 104 (WM_SYSKEYDOWN) hwnd 0x10046 wp
a5 lp 21380001 [wp = VK_RMENU]
    trace:msg:peek_message got type 7 msg 104 (WM_SYSKEYDOWN) hwnd 0x10046 wp
4c lp 20260001 [wp = 'L']
    trace:msg:peek_message got type 6 msg 106 (WM_SYSCHAR) hwnd 0x10046 wp 6c
lp 20260001 [wp = 'l']
    trace:msg:peek_message got type 7 msg 105 (WM_SYSKEYUP) hwnd 0x10046 wp 4c
lp e0260001 [wp = 'L']
    trace:msg:peek_message got type 7 msg 101 (WM_KEYUP) hwnd 0x10046 wp a5 lp
c1380001 [wp = VK_RMENU]

(yes, I have a KEYUP without KEYDOWN)

Wich is still not the same as Windows. So I think there is two problems here :
 - ISO_Level3_Shift is not properly recognized by Wine
 - "AltGr" doesn't have the same behavior under Wine and Windows

FYI, attached patch is a workaround to have the same behavior than Windows.
With it, I get this under Wine :

    trace:msg:peek_message got type 7 msg 100 (WM_KEYDOWN) hwnd 0x10062 wp a2
lp 1d0001 [note: wp = VK_LCONTROL]
    trace:msg:peek_message got type 7 msg 100 (WM_KEYDOWN) hwnd 0x10062 wp a4
lp 20380001 [note: wp = VK_LMENU]
    trace:msg:peek_message got type 7 msg 100 (WM_KEYDOWN) hwnd 0x10062 wp 4c
lp 20260001 [note: wp = 'L']
    trace:msg:peek_message got type 7 msg 101 (WM_KEYUP) hwnd 0x10062 wp 4c lp
e0260001
    trace:msg:peek_message got type 7 msg 105 (WM_SYSKEYUP) hwnd 0x10062 wp a2
lp e01d0001
    trace:msg:peek_message got type 7 msg 101 (WM_KEYUP) hwnd 0x10062 wp a4 lp
c0380001

Which is still not the same as Windows :
 - Windows uses (right) control + menu (with fExtended flag for menu) whereas
Wine uses left control + left menu. Not investigated if this is related to
TranslateMessage.
 - AltGr+L is a dead symbol on my keymap. Windows send a DEADCHAR message,
wheras Wine send nothing. Note that I had to disable the XFilterEvent test in
event.c to have those messages, otherwise nothing is sent to the program (but
that’s another story for another bug report)

But it suffice for my use case (WoW key bindings with right alt)

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.


More information about the wine-bugs mailing list