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