Module: wine Branch: master Commit: 9462190b992cf7637749978892a8bca00973cd90 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9462190b992cf7637749978892...
Author: Kusanagi Kouichi slash@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)