From 5c3aa814730ad434b0e4d0a842f06aac41d2134f Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 5 Dec 2008 13:24:02 -0600 Subject: [PATCH] imm32: Implement ImmAssociateContextEx. --- dlls/imm32/imm.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index 3b7f7a402a..b03977c4e7 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; + } } /***********************************************************************