From e4d94e48138ff4963e1b896d392e6fa6b9b87054 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 22 Apr 2016 13:59:03 -0500 Subject: [PATCH] winex11.drv: Improve setting IME result text with no composition. This greatly improves behaviors around deadkeys in Microsoft Word. Signed-off-by: Aric Stewart Signed-off-by: Alexandre Julliard --- dlls/winex11.drv/ime.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/dlls/winex11.drv/ime.c b/dlls/winex11.drv/ime.c index 22698cf0168..ee622c1cbbb 100644 --- a/dlls/winex11.drv/ime.c +++ b/dlls/winex11.drv/ime.c @@ -1046,24 +1046,38 @@ void IME_SetResultString(LPWSTR lpResult, DWORD dwResultLen) LPINPUTCONTEXT lpIMC; HIMCC newCompStr; LPIMEPRIVATE myPrivate; + BOOL inComp; imc = RealIMC(FROM_X11); lpIMC = ImmLockIMC(imc); if (lpIMC == NULL) return; + newCompStr = updateCompStr(lpIMC->hCompStr, NULL, 0); + ImmDestroyIMCC(lpIMC->hCompStr); + lpIMC->hCompStr = newCompStr; + newCompStr = updateResultStr(lpIMC->hCompStr, lpResult, dwResultLen); ImmDestroyIMCC(lpIMC->hCompStr); lpIMC->hCompStr = newCompStr; myPrivate = ImmLockIMCC(lpIMC->hPrivate); - if (!myPrivate->bInComposition) - GenerateIMEMessage(imc, WM_IME_STARTCOMPOSITION, 0, 0); - GenerateIMEMessage(imc, WM_IME_COMPOSITION, 0, GCS_RESULTSTR); - if (!myPrivate->bInComposition) - GenerateIMEMessage(imc, WM_IME_ENDCOMPOSITION, 0, 0); + inComp = myPrivate->bInComposition; ImmUnlockIMCC(lpIMC->hPrivate); + if (!inComp) + { + ImmSetOpenStatus(imc, TRUE); + GenerateIMEMessage(imc, WM_IME_STARTCOMPOSITION, 0, 0); + } + + GenerateIMEMessage(imc, WM_IME_COMPOSITION, 0, GCS_COMPSTR); + GenerateIMEMessage(imc, WM_IME_COMPOSITION, lpResult[0], GCS_RESULTSTR|GCS_RESULTCLAUSE); + GenerateIMEMessage(imc, WM_IME_ENDCOMPOSITION, 0, 0); + + if (!inComp) + ImmSetOpenStatus(imc, FALSE); + ImmUnlockIMC(imc); }