Hi all,
A while back someone (I think it was Alexander) mentioned something about UTF-8 working for keyboard detection and entering info. That same mistyrious someone said it was in XOO, and will be merged when Alexander finishes his merges.
I just tried it with latest CVS, and I am getting mixed results. If I'm using an unknown encoding, when I run wine with +keyboard, I get:
trace:keyboard:X11DRV_KEYBOARD_DetectLayout matches=22, mismatches=25, seq=21, score=-56 trace:keyboard:X11DRV_KEYBOARD_DetectLayout detected layout is "Israeli keyboard layout" trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key DF assigned to keycode 54: trace:keyboard:X11DRV_InitKeyboard (FF9D (KP_Begin) FFB5 (KP_5) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key E0 assigned to keycode 73: trace:keyboard:X11DRV_InitKeyboard (FFEB (Super_L) FFEB (Super_L) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000fe08 trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000fe08 trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key E1 assigned to keycode 75: trace:keyboard:X11DRV_InitKeyboard (FF67 (Menu) FF67 (Menu) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:X11DRV_KeyEvent Adjusting NumLock state. trace:keyboard:KEYBOARD_GenerateMsg OFF + Keypress => generating DOWN and UP messages. trace:keyboard:KEYBOARD_GenerateMsg INTERM : don't treat release of toggle key. InputKeyStateTable[0x90] = 0x1 trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 77 (0x4D) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000ff7f trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 38 (0x26) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x00000cf9 err:keyboard:X11DRV_ToUnicode Please report: no char for keysym 0CF9 (hebrew_shin) : err:keyboard:X11DRV_ToUnicode (virtKey=41,scanCode=1E,keycode=26,state=2010) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 45 (0x2D) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x00000cec err:keyboard:X11DRV_ToUnicode Please report: no char for keysym 0CEC (hebrew_lamed) : err:keyboard:X11DRV_ToUnicode (virtKey=4B,scanCode=25,keycode=2D,state=2010) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 30 (0x1E) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x00000ce5 err:keyboard:X11DRV_ToUnicode Please report: no char for keysym 0CE5 (hebrew_waw) : err:keyboard:X11DRV_ToUnicode (virtKey=55,scanCode=16,keycode=1E,state=2010) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 32 (0x20) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x00000ced err:keyboard:X11DRV_ToUnicode Please report: no char for keysym 0CED (hebrew_finalmem) : err:keyboard:X11DRV_ToUnicode (virtKey=4F,scanCode=18,keycode=20,state=2010)
When I run it with en_US.UTF-8, I get:
trace:keyboard:X11DRV_KEYBOARD_DetectLayout detected layout is "Israeli keyboard layout" trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key DF assigned to keycode 54: trace:keyboard:X11DRV_InitKeyboard (FF9D (KP_Begin) FFB5 (KP_5) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key E0 assigned to keycode 73: trace:keyboard:X11DRV_InitKeyboard (FFEB (Super_L) FFEB (Super_L) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000fe08 trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000fe08 trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key E1 assigned to keycode 75: trace:keyboard:X11DRV_InitKeyboard (FF67 (Menu) FF67 (Menu) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:X11DRV_KeyEvent Adjusting NumLock state. trace:keyboard:KEYBOARD_GenerateMsg OFF + Keypress => generating DOWN and UP messages. trace:keyboard:KEYBOARD_GenerateMsg INTERM : don't treat release of toggle key. InputKeyStateTable[0x90] = 0x1 trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 77 (0x4D) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000ff7f trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 38 (0x26) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 45 (0x2D) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 30 (0x1E) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 32 (0x20)
That is - no errors, but I don't get any characters on screen either.
When running this with locale he_IL, I get this:
trace:keyboard:X11DRV_KEYBOARD_DetectLayout detected layout is "Israeli keyboard layout" trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key DF assigned to keycode 54: trace:keyboard:X11DRV_InitKeyboard (FF9D (KP_Begin) FFB5 (KP_5) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key E0 assigned to keycode 73: trace:keyboard:X11DRV_InitKeyboard (FFEB (Super_L) FFEB (Super_L) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000fe08 trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000fe08 trace:keyboard:X11DRV_InitKeyboard OEM specific virtual key E1 assigned to keycode 75: trace:keyboard:X11DRV_InitKeyboard (FF67 (Menu) FF67 (Menu) 0 (NoSymbol) 0 (NoSymbol) ) trace:keyboard:X11DRV_KeyEvent Adjusting NumLock state. trace:keyboard:KEYBOARD_GenerateMsg OFF + Keypress => generating DOWN and UP messages. trace:keyboard:KEYBOARD_GenerateMsg INTERM : don't treat release of toggle key. InputKeyStateTable[0x90] = 0x1 trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 77 (0x4D) trace:keyboard:KEYBOARD_MapDeadKeysym no character for dead keysym 0x0000ff7f trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 38 (0x26) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 45 (0x2D) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 30 (0x1E) trace:keyboard:X11DRV_ToUnicode NumLockMask = 0010 trace:keyboard:X11DRV_ToUnicode AltGrMask = 2000 trace:keyboard:X11DRV_ToUnicode Found keycode 32 (0x20)
Characters do appear on screen, this time. Could it just be that edit control (I'm using notepad to test this) does not support UTF-8?
Shachar
"Shachar Shemesh" sun@shemesh.biz wrote:
A while back someone (I think it was Alexander) mentioned something about UTF-8 working for keyboard detection and entering info. That same mistyrious someone said it was in XOO, and will be merged when Alexander finishes his merges.
It was me. Aforementioned patch still wasn't merged. I think you should wait for another round of merges from Alexandre.
"Dmitry Timoshkov" dmitry@baikal.ru writes:
"Shachar Shemesh" sun@shemesh.biz wrote:
A while back someone (I think it was Alexander) mentioned something about UTF-8 working for keyboard detection and entering info. That same mistyrious someone said it was in XOO, and will be merged when Alexander finishes his merges.
It was me. Aforementioned patch still wasn't merged. I think you should wait for another round of merges from Alexandre.
Actually I'm not sure I want to merge that. We really need a proper fix for the keyboard codepage issue, instead of a UTF8-specific hack.
"Alexandre Julliard" julliard@winehq.org wrote:
Actually I'm not sure I want to merge that. We really need a proper fix for the keyboard codepage issue, instead of a UTF8-specific hack.
And what is the proper fix in your opinion? I think that even support for keyboard layouts won't help for that particular case.
"Dmitry Timoshkov" dmitry@baikal.ru writes:
And what is the proper fix in your opinion? I think that even support for keyboard layouts won't help for that particular case.
The proper fix is to determine the codepage from the current locale information, not from the keyboard layout. This is basically what the UTF8 hack does, except it should be done for all codepages.
"Alexandre Julliard" julliard@winehq.org wrote:
And what is the proper fix in your opinion? I think that even support for keyboard layouts won't help for that particular case.
The proper fix is to determine the codepage from the current locale information, not from the keyboard layout. This is basically what the UTF8 hack does, except it should be done for all codepages.
And fallback to LOCALE_IDEFAULTUNIXCODEPAGE if the encoding information is missing in the locale environment?
Probably it's better to implement this as a part of init_default_lcid() in kernel32 then? But then the question arises how to pass that information to x11drv, or just completely duplicate init_default_lcid() in x11drv?
"Dmitry Timoshkov" dmitry@baikal.ru writes:
And fallback to LOCALE_IDEFAULTUNIXCODEPAGE if the encoding information is missing in the locale environment?
Yep.
Probably it's better to implement this as a part of init_default_lcid() in kernel32 then? But then the question arises how to pass that information to x11drv, or just completely duplicate init_default_lcid() in x11drv?
It's better to do it in kernel32, yes. We could add a wine-specific function to export it, or maybe simply add a CP_UNIXCP code in MBtoWC/WCtoMB.