[PATCH v2] dlls: Flush CompositionString after X11DRV_XIMLookupChars.

Akihiro Sagawa sagawa.aki at gmail.com
Sat Mar 19 09:27:10 CDT 2022


On Thu, 17 Mar 2022 07:48:51 +0900, Alex Kwak wrote:
> There is no flushing after X11DRV_XIMLookupChars on wine11xdrv. for
> this reason, the characters of the GUI are not updated.
[...]
> diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
> index 3994c2106cc..66c56c177ac 100644
> --- a/dlls/winex11.drv/xim.c
> +++ b/dlls/winex11.drv/xim.c
> @@ -117,6 +117,16 @@ void X11DRV_XIMLookupChars( const char *str, DWORD count )
>  
>      IME_SetResultString(wcOutput, dwOutput);
>      HeapFree(GetProcessHeap(), 0, wcOutput);
> +
> +    /*
> +     * After then if `CompositionString` is remaining, flushing it.
> +     * i.e., Korean
> +     */
> +    if (CompositionString)
> +    {
> +        IME_SetCompositionString(SCS_SETSTR, CompositionString,
> +                                 dwCompStringLength, NULL, 0);
> +    }
>  }
>  
>  static BOOL XIMPreEditStateNotifyCallback(XIC xic, XPointer p, XPointer data)

Hello Alex,
How about filing a bug regarding this issue and attaching
WINEDEBUG=xim,imm traces?
What XIM server or Input Method does suffer from the issue?

From my point of view:
 - If the XIM server supports XIMPreeditCallbacks,
   CompositionString should be updated via XIMPreEditDrawCallback.
 - If the XIM server doesn't support XIMPreeditCallbacks,
   CompositionString is always NULL. So, your additional code doesn't
make sense.

At least, I can't reproduce the first issue with fcitx-mozc, a Japanese
input method...

Akihiro Sagawa




More information about the wine-devel mailing list