Module: wine Branch: master Commit: 5c3aa814730ad434b0e4d0a842f06aac41d2134f URL: http://source.winehq.org/git/wine.git/?a=commit;h=5c3aa814730ad434b0e4d0a842...
Author: Aric Stewart aric@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; + } }
/***********************************************************************