On Jul 1, 2013, at 4:26 PM, Ken Thomases wrote:

> On Jul 1, 2013, at 3:29 PM, Юрий Воротилов wrote:
> 
>> Fix to support input of characters with diacritic symbols using AltGr (e.g. 
>> Latvian - AltGr+a=ā).
>> Tested on Ubuntu 12.04 and Centos 6.
>> I also have a bug opened in Crossover tracker:
>> http://www.codeweavers.com/support/tickets/browse/?ticket_id=935141
>> 
>> ---
>> dlls/winex11.drv/keyboard.c |   45 
>> +++++++++++++++++++++++++------------------
>> include/winuser.h           |    1 +
>> server/queue.c              |    5 ++++-
>> 3 files changed, 31 insertions(+), 20 deletions(-)
>> <0001-Support-input-of-characters-with-diacritic-symbols-usi.txt>
> 
> I don't believe this is the correct approach.  You don't want to be modifying 
> the server and you can't arbitrarily add a new KEYEVENTF_* value.  You can't 
> assume that applications won't leave junk in the non-standard bits of the 
> flags when they call SendInput() or keybd_event().
> 
> This needs to be implemented entirely within the X11 driver.  It needs to 
> properly translate your X11 keyboard layout into Win32 behavior.  If the 
> problem is that AltGr is mapping to VK_MENU, and thus causing key events to 
> generate WM_SYSKEYDOWN/UP and not go through translation, then you need to 
> make AltGr not map to VK_MENU.  Although you really need to test that on 
> Windows.  My understanding is that AltGr appears to Windows apps as 
> Alt+Control.
> 
> In any case, I know that, on Mac OS X, the Option key is used similarly to 
> AltGr.  It accesses additional characters from the keyboard layout.  This 
> works when Option is configured in the X keymap to generate XK_Mode_switch.  
> It requires no changes to Wine.  So perhaps the right approach is to make 
> XK_ISO_Level3_Shift and XK_ISO_Group_Shift behave the same way as 
> XK_Mode_switch.  (You could also just change your X keymap to actually map 
> the key to XK_Mode_switch.)

Oh, and I forgot to mention: please don't rename variables unnecessarily 
(AltGrMask -> KeyEventModifiers), make whitespace changes on lines you're not 
otherwise modifying (stuff in X11DRV_InitKeyboard()), or change trace formats 
arbitrarily (%x -> %X).

-Ken



Reply via email to