Properly send WM_IME_NOTIFY using SendMessage

Aric Stewart aric at codeweavers.com
Mon Feb 26 03:12:33 CST 2007


WM_IME_NOTIFY should be sent using SendMessage
---
  dlls/imm32/imm.c |   25 ++++++++++++++++++++-----
  1 files changed, 20 insertions(+), 5 deletions(-)
-------------- next part --------------
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 69cd490..ff4916a 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -169,6 +169,21 @@ static void ImmInternalPostIMEMessage(UI
        PostMessageW(target, msg, wParam, lParam);
 }
 
+static LRESULT ImmInternalSendIMENotify(WPARAM notify, LPARAM lParam)
+{
+    LRESULT rc = 0;
+
+    if (root_context->hwnd)
+       rc = SendMessageW(root_context->hwnd, WM_IME_NOTIFY, notify, lParam);
+    else
+    {
+       HWND target = GetFocus();
+       if (target)
+           rc = SendMessageW(target, WM_IME_NOTIFY, notify, lParam);
+    }
+
+    return rc;
+}
 
 static void ImmInternalSetOpenStatus(BOOL fOpen)
 {
@@ -202,7 +217,7 @@ static void ImmInternalSetOpenStatus(BOO
     else
         ShowWindow(hwndDefault, SW_SHOWNOACTIVATE);
 
-   SendMessageW(root_context->hwnd, WM_IME_NOTIFY, IMN_SETOPENSTATUS, 0);
+   ImmInternalSendIMENotify(IMN_SETOPENSTATUS, 0);
 }
 
 
@@ -1231,7 +1246,7 @@ BOOL WINAPI ImmSetCompositionFontA(HIMC
     MultiByteToWideChar(CP_ACP, 0, lplf->lfFaceName, -1, data->font.lfFaceName,
                         LF_FACESIZE);
 
-    ImmInternalPostIMEMessage(WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
+    ImmInternalSendIMENotify(IMN_SETCOMPOSITIONFONT, 0);
 
     if (data->textfont)
     {
@@ -1255,7 +1270,7 @@ BOOL WINAPI ImmSetCompositionFontW(HIMC
         return FALSE;
 
     memcpy(&data->font,lplf,sizeof(LOGFONTW));
-    ImmInternalPostIMEMessage(WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
+    ImmInternalSendIMENotify(IMN_SETCOMPOSITIONFONT, 0);
 
     if (data->textfont)
     {
@@ -1406,7 +1421,7 @@ BOOL WINAPI ImmSetCompositionWindow(
     if (reshow)
         ShowWindow(hwndDefault,SW_SHOWNOACTIVATE);
 
-    ImmInternalPostIMEMessage(WM_IME_NOTIFY,IMN_SETCOMPOSITIONWINDOW, 0);
+    ImmInternalSendIMENotify(IMN_SETCOMPOSITIONWINDOW, 0);
     return TRUE;
 }
 
@@ -1435,7 +1450,7 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC,
     if (hIMC == (HIMC)FROM_IME)
     {
         ImmInternalSetOpenStatus(fOpen);
-        ImmInternalPostIMEMessage(WM_IME_NOTIFY, IMN_SETOPENSTATUS, 0);
+        ImmInternalSendIMENotify(IMN_SETOPENSTATUS, 0);
         return TRUE;
     }
 


More information about the wine-patches mailing list