[PATCH v2 1/4] user32: Move ToUnicodeEx from wineandroid.drv to user32.

Rémi Bernon rbernon at codeweavers.com
Mon Apr 26 11:05:44 CDT 2021


On 4/23/21 7:30 PM, Rémi Bernon wrote:
> diff --git a/dlls/user32/input.c b/dlls/user32/input.c
> index 805bfe3e9de..4f0be6be3f2 100644
> --- a/dlls/user32/input.c
> +++ b/dlls/user32/input.c
> @@ -877,11 +877,82 @@ INT WINAPI ToUnicode(UINT virtKey, UINT scanCode, const BYTE *lpKeyState,
>   /****************************************************************************
>    *		ToUnicodeEx (USER32.@)
>    */
> -INT WINAPI ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState,
> -		       LPWSTR lpwStr, int size, UINT flags, HKL hkl)
> +INT WINAPI ToUnicodeEx( UINT virt, UINT scan, const BYTE *state,
> +		                WCHAR *str, int size, UINT flags, HKL layout )
>   {
> -    if (!lpKeyState) return 0;
> -    return USER_Driver->pToUnicodeEx(virtKey, scanCode, lpKeyState, lpwStr, size, flags, hkl);
> +    static HKL us_layout = (HKL)MAKELONG(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT));
> +    BOOL shift, ctrl, numlock;
> +    WCHAR buffer[2];
> +    INT len;
> +
> +    TRACE_(keyboard)( "virt %u, scan %u, state %p, str %p, size %d, flags %x, layout %p.\n",
> +                      virt, scan, state, str, size, flags, layout );
> +
> +    if (!state) return 0;
> +
> +    shift = state[VK_SHIFT] & 0x80;
> +    ctrl = state[VK_CONTROL] & 0x80;
> +    numlock = state[VK_NUMLOCK] & 0x01;
> +
> +    if (layout != us_layout) buffer[0] = 0; /* FIXME: non-us layout */

I didn't want to pretend to have a default implementation for non-us 
layouts, but this is also then not equivalent to what the Android driver 
was doing.

I guess, we should ignore the layout here in the same way 
wineandroid.drv was doing, and let the driver override non-us layouts if 
they implement it.
-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list