[1/3] winex11.drv: Generate IME messages as needed.

Kusanagi Kouichi slash at ac.auone-net.jp
Wed Feb 24 05:03:44 CST 2010


Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
 dlls/winex11.drv/ime.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/dlls/winex11.drv/ime.c b/dlls/winex11.drv/ime.c
index 4e821ad..242ecda 100644
--- a/dlls/winex11.drv/ime.c
+++ b/dlls/winex11.drv/ime.c
@@ -1055,10 +1055,14 @@ BOOL IME_SetCompositionString(DWORD dwIndex, LPCVOID lpComp, DWORD dwCompLen,
 
 void IME_SetResultString(LPWSTR lpResult, DWORD dwResultLen)
 {
+    HIMC imc;
     LPINPUTCONTEXT lpIMC;
     HIMCC newCompStr;
+    LPIMEPRIVATE myPrivate;
+    BOOL fOpen;
 
-    lpIMC = LockRealIMC(FROM_X11);
+    imc = RealIMC(FROM_X11);
+    lpIMC = ImmLockIMC(imc);
     if (lpIMC == NULL)
         return;
 
@@ -1066,9 +1070,19 @@ void IME_SetResultString(LPWSTR lpResult, DWORD dwResultLen)
     ImmDestroyIMCC(lpIMC->hCompStr);
     lpIMC->hCompStr = newCompStr;
 
-    GenerateIMEMessage(FROM_X11, WM_IME_COMPOSITION, 0, GCS_RESULTSTR);
+    myPrivate = ImmLockIMCC(lpIMC->hPrivate);
+    fOpen = lpIMC->fOpen;
+    ImmSetOpenStatus(imc, TRUE);
+    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);
+    if (!fOpen)
+        ImmSetOpenStatus(imc, FALSE);
+    ImmUnlockIMCC(lpIMC->hPrivate);
 
-    UnlockRealIMC(FROM_X11);
+    ImmUnlockIMC(imc);
 }
 
 /*****
-- 
1.7.0




More information about the wine-patches mailing list