[PATCH] winex11.drv: Fix IME_SetResultString for Korean(hangul) IME.

Alex Kwak take-me-home at kakao.com
Wed Mar 30 23:39:49 CDT 2022


Hi

I resubmitted the problems related to this by dividing them into 4 patches.

All CJK have tested it on their own, but in my imagination, the problem 
seems to have been solved.

I tried to create a test, but ImSetCompositionStringW seems to be set 
regardless of dwIndex, so I can't implement it well.

I'll have to take a look when I have time.



[PATCH v2] winex11.drv: call XIMReset on CPS_COMPLETE

https://source.winehq.org/patches/data/231256


[PATCH v2] riched20: Send CPS_COMPLETE from mouse click event.

https://source.winehq.org/patches/data/231251


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

https://source.winehq.org/patches/data/231236


[PATCH v2] riched20: Handle GCS_COMPSTR, GCS_CURSORPOS on WM_IME_COMPOSITION.

https://source.winehq.org/patches/data/231055


Regards,

Alex Kwak


22. 3. 26. 19:44에 Akihiro Sagawa 이(가) 쓴 글:
> On Sun, 20 Mar 2022 21:17:27 +0900, Alex Kwak wrote:
>> In a special case for Hangul(Korean), when Composition is completed and
>> this function is called, the new Composition disappears. so, calling
>> IME_SetCompositionString again for makes composition will be
>> starting.
>>
> Please add Wine-Bug header before Signed-off-by line.
>> Signed-off-by: Alex Kwak<take-me-home at kakao.com>
>> ---
>>   dlls/winex11.drv/ime.c    |  4 ++--
>>   dlls/winex11.drv/x11drv.h | 27 +++++++++++++++++++++++++++
>>   dlls/winex11.drv/xim.c    | 13 +++++++++++++
>>   3 files changed, 42 insertions(+), 2 deletions(-)
>>
>> diff --git a/dlls/winex11.drv/ime.c b/dlls/winex11.drv/ime.c
>> index c1584930861..f7827b31635 100644
>> --- a/dlls/winex11.drv/ime.c
>> +++ b/dlls/winex11.drv/ime.c
>> @@ -1050,8 +1050,8 @@ void IME_SetResultString(LPWSTR lpResult, DWORD dwResultLen)
>>       GenerateIMEMessage(imc, WM_IME_COMPOSITION, lpResult[0], GCS_RESULTSTR|GCS_RESULTCLAUSE);
>>       GenerateIMEMessage(imc, WM_IME_ENDCOMPOSITION, 0, 0);
>>   
>> -    if (!inComp)
>> -        ImmSetOpenStatus(imc, FALSE);
>> +    myPrivate->bInComposition = FALSE;
>> +    ImmSetOpenStatus(imc, FALSE);
>>   
>>       ImmUnlockIMC(imc);
>>   }
> I'm not sure about this change.
> It always turns off IME open status. Since composition might be
> continuous at this moment, it can't be set unconditionally.
> If we should do so for some reasons, could you explain in detail?
>
>> diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
>> index f389f3e0836..8ce3a7e8528 100644
>> --- a/dlls/winex11.drv/x11drv.h
>> +++ b/dlls/winex11.drv/x11drv.h
> [..]
>> --- a/dlls/winex11.drv/xim.c
>> +++ b/dlls/winex11.drv/xim.c
>> @@ -117,6 +117,19 @@ void X11DRV_XIMLookupChars( const char *str, DWORD count )
>>   
>>       IME_SetResultString(wcOutput, dwOutput);
>>       HeapFree(GetProcessHeap(), 0, wcOutput);
>> +
>> +    /*
>> +     * In a special case for Hangul(Korean), when Composition is completed and
>> +     * this function is called, the new Composition disappears. so, calling
>> +     * IME_SetCompositionString again for makes composition will be
>> +     * starting.
>> +     */
>> +    if (CompositionString && dwCompStringLength >= sizeof(WCHAR) &&
>> +        IsHangul(((const WCHAR*) CompositionString)[0]))
>> +    {
>> +        IME_SetCompositionString(SCS_SETSTR, CompositionString,
>> +                                 dwCompStringLength, NULL, 0);
>> +    }
>>   }
>>   
>>   static BOOL XIMPreEditStateNotifyCallback(XIC xic, XPointer p, XPointer data)
> Could you revert Hangul(Korean) specific changes? This issue seems not
> to be Korean specific because I can occasionally reproduce it with
> Japanese input method.
>
>  From my point of view, the main cause of this issue is that the order of
> PreeditCallbacks and XmbLookupString() aren't stable. The current wine's
> implementation seems to rely on getting the result of XmbLookupString()
> before PreeditCallback for the next clause. However, when one or more
> clauses are left after commiting a clause, PreeditCallback for the left
> clauses sometimes (or always in Hangul?) called before getting the
> result of XmbLookupString.
> What do you think about these XIM situations? Does your patch works
> well for both cases?
>
> Regards,
> Akihiro Sagawa
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20220331/0ab4aed6/attachment.htm>


More information about the wine-devel mailing list