Kusanagi Kouichi : winex11.drv: Generate WM_IME_ENDCOMPOSITION when preedit ends.
Alexandre Julliard
julliard at winehq.org
Mon Apr 21 07:46:37 CDT 2008
Module: wine
Branch: master
Commit: 9462190b992cf7637749978892a8bca00973cd90
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9462190b992cf7637749978892a8bca00973cd90
Author: Kusanagi Kouichi <slash at ma.neweb.ne.jp>
Date: Fri Apr 18 21:52:20 2008 +0900
winex11.drv: Generate WM_IME_ENDCOMPOSITION when preedit ends.
---
dlls/winex11.drv/ime.c | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/winex11.drv/ime.c b/dlls/winex11.drv/ime.c
index e4a2dd7..c3e5ccf 100644
--- a/dlls/winex11.drv/ime.c
+++ b/dlls/winex11.drv/ime.c
@@ -687,16 +687,22 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
TRACE("IMC_SETOPENSTATUS\n");
myPrivate = (LPIMEPRIVATE)ImmLockIMCC(lpIMC->hPrivate);
- if (lpIMC->fOpen != myPrivate->bInternalState)
+ if (lpIMC->fOpen != myPrivate->bInternalState &&
+ myPrivate->bInComposition)
{
if(lpIMC->fOpen == FALSE)
{
X11DRV_ForceXIMReset(lpIMC->hWnd);
GenerateIMEMessage(hIMC,WM_IME_ENDCOMPOSITION,0,0);
+ myPrivate->bInComposition = FALSE;
}
else
+ {
GenerateIMEMessage(hIMC,WM_IME_STARTCOMPOSITION,0,0);
+ GenerateIMEMessage(hIMC, WM_IME_COMPOSITION, 0, 0);
+ }
}
+ myPrivate->bInternalState = lpIMC->fOpen;
bRet = TRUE;
}
break;
@@ -963,12 +969,18 @@ void IME_SetOpenStatus(BOOL fOpen)
ImmDestroyIMCC(lpIMC->hCompStr);
lpIMC->hCompStr = ImeCreateBlankCompStr();
}
- myPrivate->bInternalState = fOpen;
ImmUnlockIMCC(lpIMC->hPrivate);
UnlockRealIMC(FROM_X11);
- ImmSetOpenStatus(RealIMC(FROM_X11), fOpen);
+ if (myPrivate->bInComposition && fOpen == FALSE)
+ {
+ GenerateIMEMessage(FROM_X11, WM_IME_ENDCOMPOSITION, 0, 0);
+ myPrivate->bInComposition = FALSE;
+ }
+
+ if (!myPrivate->bInternalState && fOpen == TRUE)
+ ImmSetOpenStatus(RealIMC(FROM_X11), fOpen);
}
void IME_XIMPresent(BOOL present)
More information about the wine-cvs
mailing list