diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index da392610f13..4acbde39fa7 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -1406,15 +1406,18 @@ BOOL WINAPI ImmNotifyIME( case CPS_CANCEL: TRACE("%s - %s\n","NI_COMPOSITIONSTR","CPS_CANCEL"); { - HIMCC newCompStr; + BOOL send; + if (pX11DRV_ForceXIMReset) pX11DRV_ForceXIMReset(root_context->IMC.hWnd); - newCompStr = updateCompStr(root_context->IMC.hCompStr, NULL, 0); - ImmDestroyIMCC(root_context->IMC.hCompStr); - root_context->IMC.hCompStr = newCompStr; + send = (root_context->IMC.hCompStr!=NULL); - ImmInternalPostIMEMessage(WM_IME_COMPOSITION, 0, + ImmDestroyIMCC(root_context->IMC.hCompStr); + root_context->IMC.hCompStr = NULL; + + if (send) + ImmInternalPostIMEMessage(WM_IME_COMPOSITION, 0, GCS_COMPSTR); rc = TRUE; } diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index 895c801a634..d948f548895 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -183,11 +183,9 @@ static int test_ImmNotifyIME(void) { ok(ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0), "Canceling an " "empty composition string succeeds.\n"); - todo_wine { ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " "the composition string being canceled is empty.\n"); - } msg_spy_flush_msgs(); @@ -203,11 +201,9 @@ static int test_ImmNotifyIME(void) { ok(ImmNotifyIME(imc, NI_COMPOSITIONSTR, CPS_CANCEL, 0), "Canceling an " "empty composition string succeeds.\n"); - todo_wine { ok(!msg_spy_find_msg(WM_IME_COMPOSITION), "Windows does not post " "WM_IME_COMPOSITION in response to NI_COMPOSITIONSTR / CPS_CANCEL, if " "the composition string being canceled is empty.\n"); - } msg_spy_flush_msgs(); ImmReleaseContext(hwnd, imc);