winex11: Generate WM_IME_ENDCOMPOSITION when composition string is canceled.
authorKusanagi Kouichi <slash@ma.neweb.ne.jp>
Wed, 23 Apr 2008 23:29:54 +0000 (08:29 +0900)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 24 Apr 2008 10:47:09 +0000 (12:47 +0200)
dlls/winex11.drv/ime.c

index c3e5ccf6039bc8cf8cecdadf60b50106744ab3fc..661421331647da684679fa0af6e9553cb785ff44 100644 (file)
@@ -769,25 +769,19 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
                 case CPS_REVERT: FIXME("CPS_REVERT\n"); break;
                 case CPS_CANCEL:
                 {
-                    BOOL send;
-                    LPCOMPOSITIONSTRING lpCompStr;
+                    LPIMEPRIVATE myPrivate;
 
                     TRACE("CPS_CANCEL\n");
 
                     X11DRV_ForceXIMReset(lpIMC->hWnd);
 
-                    lpCompStr = ImmLockIMCC(lpIMC->hCompStr);
-                    send = (lpCompStr->dwCompStrLen != 0);
-                    ImmUnlockIMCC(lpIMC->hCompStr);
-
-                    if (send)
+                    myPrivate = (LPIMEPRIVATE)ImmLockIMCC(lpIMC->hPrivate);
+                    if (myPrivate->bInComposition)
                     {
-                        HIMCC newCompStr;
-                        newCompStr = updateCompStr(lpIMC->hCompStr, NULL, 0);
-                        ImmDestroyIMCC(lpIMC->hCompStr);
-                        lpIMC->hCompStr = newCompStr;
-                        GenerateIMEMessage(hIMC, WM_IME_COMPOSITION, 0, GCS_COMPSTR);
+                        GenerateIMEMessage(hIMC, WM_IME_ENDCOMPOSITION, 0, 0);
+                        myPrivate->bInComposition = FALSE;
                     }
+                    ImmUnlockIMCC(lpIMC->hPrivate);
                     bRet = TRUE;
                 }
                 break;