Aric Stewart : imm32: Implement ImmAssociateContextEx.

Alexandre Julliard julliard at winehq.org
Mon Dec 8 09:45:48 CST 2008


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Fri Dec  5 13:24:02 2008 -0600

imm32: Implement ImmAssociateContextEx.

---

 dlls/imm32/imm.c |   40 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 3b7f7a4..b03977c 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -498,14 +498,48 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
     return old;
 }
 
+
+/*
+ * Helper function for ImmAssociateContextEx
+ */
+static BOOL CALLBACK _ImmAssociateContextExEnumProc(HWND hwnd, LPARAM lParam)
+{
+    HIMC hImc = (HIMC)lParam;
+    ImmAssociateContext(hwnd,hImc);
+    return TRUE;
+}
+
 /***********************************************************************
  *              ImmAssociateContextEx (IMM32.@)
  */
 BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
 {
-    FIXME("(%p, %p, %d): stub\n", hWnd, hIMC, dwFlags);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
+    TRACE("(%p, %p, %d): stub\n", hWnd, hIMC, dwFlags);
+
+    if (!IMM_GetThreadData()->defaultContext)
+        IMM_GetThreadData()->defaultContext = ImmCreateContext();
+
+    if (dwFlags == IACE_DEFAULT)
+    {
+        ImmAssociateContext(hWnd,IMM_GetThreadData()->defaultContext);
+        return TRUE;
+    }
+    else if (dwFlags == IACE_IGNORENOCONTEXT)
+    {
+        if (GetPropW(hWnd,szwWineIMCProperty) > 0)
+            ImmAssociateContext(hWnd,hIMC);
+        return TRUE;
+    }
+    else if (dwFlags == IACE_CHILDREN)
+    {
+        EnumChildWindows(hWnd,_ImmAssociateContextExEnumProc,(LPARAM)hIMC);
+        return TRUE;
+    }
+    else
+    {
+        ERR("Unknown dwFlags 0x%x\n",dwFlags);
+        return FALSE;
+    }
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list