Aric Stewart : ime: Do not send WM_IME_ENDCOMPOSITION on CPS_COMPLETE if there is no composition.

Alexandre Julliard julliard at winehq.org
Wed Dec 14 16:45:28 CST 2016


Module: wine
Branch: master
Commit: 333c5bd9dd314b1ce68a1518e85ceb80a3e9abd3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=333c5bd9dd314b1ce68a1518e85ceb80a3e9abd3

Author: Aric Stewart <aric at codeweavers.com>
Date:   Wed Dec 14 12:30:23 2016 -0600

ime: Do not send WM_IME_ENDCOMPOSITION on CPS_COMPLETE if there is no composition.

Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winemac.drv/ime.c | 7 +++++--
 dlls/winex11.drv/ime.c | 8 +++++---
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/dlls/winemac.drv/ime.c b/dlls/winemac.drv/ime.c
index 7681e8e..846f9bd 100644
--- a/dlls/winemac.drv/ime.c
+++ b/dlls/winemac.drv/ime.c
@@ -839,6 +839,7 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
                         cpstr = (LPWSTR)&cdata[cs->dwCompStrOffset];
                         ImmUnlockIMCC(lpIMC->hCompStr);
                     }
+                    myPrivate = ImmLockIMCC(lpIMC->hPrivate);
                     if (cplen > 0)
                     {
                         WCHAR param = cpstr[0];
@@ -855,11 +856,13 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
 
                         GenerateIMEMessage(hIMC, WM_IME_COMPOSITION, param,
                                            GCS_RESULTSTR | GCS_RESULTCLAUSE);
+
+                        GenerateIMEMessage(hIMC, WM_IME_ENDCOMPOSITION, 0, 0);
                     }
+                    else if (myPrivate->bInComposition)
+                        GenerateIMEMessage(hIMC, WM_IME_ENDCOMPOSITION, 0, 0);
 
-                    GenerateIMEMessage(hIMC, WM_IME_ENDCOMPOSITION, 0, 0);
 
-                    myPrivate = ImmLockIMCC(lpIMC->hPrivate);
                     myPrivate->bInComposition = FALSE;
                     ImmUnlockIMCC(lpIMC->hPrivate);
 
diff --git a/dlls/winex11.drv/ime.c b/dlls/winex11.drv/ime.c
index 06576dd..0f4d2b2 100644
--- a/dlls/winex11.drv/ime.c
+++ b/dlls/winex11.drv/ime.c
@@ -763,6 +763,7 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
                         cpstr = (LPWSTR)&(cdata[cs->dwCompStrOffset]);
                         ImmUnlockIMCC(lpIMC->hCompStr);
                     }
+                    myPrivate = ImmLockIMCC(lpIMC->hPrivate);
                     if (cplen > 0)
                     {
                         WCHAR param = cpstr[0];
@@ -779,11 +780,12 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
 
                         GenerateIMEMessage(hIMC, WM_IME_COMPOSITION, param,
                                             GCS_RESULTSTR|GCS_RESULTCLAUSE);
-                    }
 
-                    GenerateIMEMessage(hIMC,WM_IME_ENDCOMPOSITION, 0, 0);
+                        GenerateIMEMessage(hIMC,WM_IME_ENDCOMPOSITION, 0, 0);
+                    }
+                    else if (myPrivate->bInComposition)
+                        GenerateIMEMessage(hIMC,WM_IME_ENDCOMPOSITION, 0, 0);
 
-                    myPrivate = ImmLockIMCC(lpIMC->hPrivate);
                     myPrivate->bInComposition = FALSE;
                     ImmUnlockIMCC(lpIMC->hPrivate);
 




More information about the wine-cvs mailing list