[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