ByeongSik Jeon : imm32: Implementation of the Imm{Get|Set}CandidateWindow.
Alexandre Julliard
julliard at winehq.org
Mon Apr 28 08:01:32 CDT 2008
Module: wine
Branch: master
Commit: 5d49b3db8d80d8f37c97d32dbb2defa132200f27
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5d49b3db8d80d8f37c97d32dbb2defa132200f27
Author: ByeongSik Jeon <bsjeon at hanmail.net>
Date: Sat Apr 26 00:19:27 2008 +0900
imm32: Implementation of the Imm{Get|Set}CandidateWindow.
---
dlls/imm32/imm.c | 42 +++++++++++++++++++++++++++++++++++-------
1 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 0400939..259bf3a 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;
}
/***********************************************************************
More information about the wine-cvs
mailing list