[PATCH v2] winex11.drv: Call ImeSetCompositionString after IME_SetResultString

Akihiro Sagawa sagawa.aki at gmail.com
Sat Apr 2 08:57:57 CDT 2022


On Thu, 31 Mar 2022 04:36:18 +0900, Alex Kwak wrote:
> IME_SetResultString function overwrite composition strings. so, next
> composition is not display on GUI. but, still have an xim. Therefore,
> there was a string that seemed to have disappeared in the middle of the
> input.
> 
> Therefore, change it as follows. When calling IME_SetResultString, if
> in a Composition state, no longer generate WM_IME_ENDCOMPOSITION and
> call back the previous Composition to recover the overwritten
> Composition.
> 
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52700
> Signed-off-by: Alex Kwak <take-me-home at kakao.com>
> ---
> v2: use updateCompStr instead IME_SetResultString.
Oops, the following implementation doesn't match with the subject.
If I were you, I'd describe what I want to resolve instead of the way.
> ---
>  dlls/winex11.drv/ime.c    | 21 +++++++++++++++++----
>  dlls/winex11.drv/x11drv.h |  3 ++-
>  dlls/winex11.drv/xim.c    |  3 ++-
>  3 files changed, 21 insertions(+), 6 deletions(-)
[...]
> diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
> index f389f3e0836..ca077caa45c 100644
> --- a/dlls/winex11.drv/x11drv.h
> +++ b/dlls/winex11.drv/x11drv.h
> @@ -290,7 +290,8 @@ extern void IME_UpdateAssociation(HWND focus) DECLSPEC_HIDDEN;
>  extern BOOL IME_SetCompositionString(DWORD dwIndex, LPCVOID lpComp,
>                                       DWORD dwCompLen, LPCVOID lpRead,
>                                       DWORD dwReadLen) DECLSPEC_HIDDEN;
> -extern void IME_SetResultString(LPWSTR lpResult, DWORD dwResultlen) DECLSPEC_HIDDEN;
> +extern void IME_SetResultString(LPWSTR lpResult, DWORD dwResultLen,
> +                                LPCVOID compStr, DWORD compStrLen) DECLSPEC_HIDDEN;
Though IME_SetCompositionString() uses LPCVOID and byte unit,
I'd suggest you to use const WCHAR* for the third parameter and
WCHAR unit for the fourth one. It will avoid the type casting and
divisions in IME_SetResultString function. Moreover, it's consistent
with exisiting parameters, i.e. wcOutput's type and dwOutput's unit.

Other points look good to me. Just one more effort.

Akihiro Sagawa




More information about the wine-devel mailing list