http://bugs.winehq.org/show_bug.cgi?id=33368
Bug #: 33368 Summary: WM_DEADCHAR events not sent Product: Wine Version: 1.5.27 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: winex11.drv AssignedTo: wine-bugs@winehq.org ReportedBy: sloonz@gmail.com Classification: Unclassified
Created attachment 44152 --> http://bugs.winehq.org/attachment.cgi?id=44152 Keyboard traces in three different scenarios (Windows, Wine, Wine+patch)
XFilterEvent() returns true for events of dead keys, so they are not processed by wine. However, that prevents sending a WM_DEADCHAR event to the application, as it works on Windows. For example, in order to emit a "ê" character in a french keyboard layout, I first have to press ^ (which is a dead key) and then e. Under Windows, this leads to the following sequence of events :
KEYDOWN: dead_circumflex DEADCHAR: dead_circumflex KEYDOWN: e CHAR: ê KEYUP: e KEYUP: dead_circumflex
Under wine I have only those events :
KEYUP: dead_circumflex KEYDOWN: e CHAR: ê
Attached patch fixes most of that, with it I get :
KEYDOWN: dead_circumflex DEADCHAR: dead_circumflex UP: dead_circumflex KEYDOWN: e CHAR: ê KEYUP: e
Note that it’s still slighty different from Windows (KEYUP for dead key is third message on Wine, whereas it is before the last one on Windows), but I don’t see a clean fix for this issue.
As for the traces in attachment, contains three traces. The first one is from Spy++ on Windows ; the second is the relevant output of WINEDEBUG=+msg notepad for unpatched wine ; the third one for patched wine.