From 5d49b3db8d80d8f37c97d32dbb2defa132200f27 Mon Sep 17 00:00:00 2001 From: ByeongSik Jeon Date: Sat, 26 Apr 2008 00:19:27 +0900 Subject: [PATCH] imm32: Implementation of the Imm{Get|Set}CandidateWindow. --- dlls/imm32/imm.c | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index 04009392631..259bf3af8a1 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -746,11 +746,21 @@ DWORD WINAPI ImmGetCandidateListW( * ImmGetCandidateWindow (IMM32.@) */ BOOL WINAPI ImmGetCandidateWindow( - HIMC hIMC, DWORD dwBufLen, LPCANDIDATEFORM lpCandidate) + HIMC hIMC, DWORD dwIndex, LPCANDIDATEFORM lpCandidate) { - FIXME("(%p, %d, %p): stub\n", hIMC, dwBufLen, lpCandidate); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + InputContextData *data = (InputContextData*)hIMC; + + TRACE("%p, %d, %p\n", hIMC, dwIndex, lpCandidate); + + if (!data || !lpCandidate) + return FALSE; + + if ( dwIndex >= (sizeof(data->IMC.cfCandForm) / sizeof(CANDIDATEFORM)) ) + return FALSE; + + *lpCandidate = data->IMC.cfCandForm[dwIndex]; + + return TRUE; } /*********************************************************************** @@ -1610,9 +1620,27 @@ LRESULT WINAPI ImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam) BOOL WINAPI ImmSetCandidateWindow( HIMC hIMC, LPCANDIDATEFORM lpCandidate) { - FIXME("(%p, %p): stub\n", hIMC, lpCandidate); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + InputContextData *data = (InputContextData*)hIMC; + + TRACE("(%p, %p)\n", hIMC, lpCandidate); + + if (!data || !lpCandidate) + return FALSE; + + TRACE("\t%x, %x, (%i,%i), (%i,%i - %i,%i)\n", + lpCandidate->dwIndex, lpCandidate->dwStyle, + lpCandidate->ptCurrentPos.x, lpCandidate->ptCurrentPos.y, + lpCandidate->rcArea.top, lpCandidate->rcArea.left, + lpCandidate->rcArea.bottom, lpCandidate->rcArea.right); + + if ( lpCandidate->dwIndex >= (sizeof(data->IMC.cfCandForm) / sizeof(CANDIDATEFORM)) ) + return FALSE; + + data->IMC.cfCandForm[lpCandidate->dwIndex] = *lpCandidate; + ImmNotifyIME(hIMC, NI_CONTEXTUPDATED, 0, IMC_SETCANDIDATEPOS); + ImmInternalSendIMENotify(data, IMN_SETCANDIDATEPOS, 1 << lpCandidate->dwIndex); + + return TRUE; } /***********************************************************************