Corrections to the message ordering for IME input.
Aric Stewart
aric at codeweavers.com
Fri Feb 23 00:28:28 CST 2007
Corrections to the message ordering for IME input.
---
dlls/imm32/imm.c | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
-------------- next part --------------
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 2500075..af60809 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -51,6 +51,7 @@ typedef struct tagInputContextData
BOOL bOpen;
BOOL bInternalState;
BOOL bRead;
+ BOOL bInComposition;
LOGFONTW font;
HFONT textfont;
COMPOSITIONFORM CompForm;
@@ -1130,6 +1131,9 @@ BOOL WINAPI ImmNotifyIME(
ImmInternalPostIMEMessage(WM_IME_COMPOSITION,
root_context->ResultString[0],
GCS_RESULTSTR|GCS_RESULTCLAUSE);
+
+ ImmInternalPostIMEMessage(WM_IME_ENDCOMPOSITION, 0, 0);
+ root_context->bInComposition = FALSE;
}
break;
case CPS_CONVERT:
@@ -1227,7 +1231,7 @@ BOOL WINAPI ImmSetCompositionFontA(HIMC
MultiByteToWideChar(CP_ACP, 0, lplf->lfFaceName, -1, data->font.lfFaceName,
LF_FACESIZE);
- SendMessageW(root_context->hwnd, WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
+ ImmInternalPostIMEMessage(WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
if (data->textfont)
{
@@ -1251,7 +1255,7 @@ BOOL WINAPI ImmSetCompositionFontW(HIMC
return FALSE;
memcpy(&data->font,lplf,sizeof(LOGFONTW));
- SendMessageW(root_context->hwnd, WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
+ ImmInternalPostIMEMessage(WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
if (data->textfont)
{
@@ -1337,6 +1341,12 @@ BOOL WINAPI ImmSetCompositionStringW(
if (dwIndex == SCS_SETSTR)
{
+ if (!root_context->bInComposition)
+ {
+ ImmInternalPostIMEMessage(WM_IME_STARTCOMPOSITION, 0, 0);
+ root_context->bInComposition = TRUE;
+ }
+
flags = GCS_COMPSTR;
if (root_context->dwCompStringLength)
@@ -1396,7 +1406,7 @@ BOOL WINAPI ImmSetCompositionWindow(
if (reshow)
ShowWindow(hwndDefault,SW_SHOWNOACTIVATE);
- SendMessageW(root_context->hwnd, WM_IME_NOTIFY,IMN_SETCOMPOSITIONWINDOW, 0);
+ ImmInternalPostIMEMessage(WM_IME_NOTIFY,IMN_SETCOMPOSITIONWINDOW, 0);
return TRUE;
}
@@ -1424,14 +1434,8 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC,
if (hIMC == (HIMC)FROM_IME)
{
- if (fOpen)
- ImmInternalPostIMEMessage(WM_IME_STARTCOMPOSITION, 0, 0);
-
ImmInternalSetOpenStatus(fOpen);
-
- if (!fOpen)
- ImmInternalPostIMEMessage(WM_IME_ENDCOMPOSITION, 0, 0);
-
+ ImmInternalPostIMEMessage(WM_IME_NOTIFY, IMN_SETOPENSTATUS, 0);
return TRUE;
}
More information about the wine-patches
mailing list