From b3740c4b79de8e4e2e74c669a8efaf98d626aac9 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 15 Dec 2011 00:40:35 +0000 Subject: [PATCH] - Sync wine Imm32. svn path=/trunk/; revision=54654 --- reactos/dll/win32/imm32/imm.c | 83 +++++++++++++++++++----------- reactos/dll/win32/imm32/imm32.spec | 2 +- reactos/include/psdk/imm.h | 11 ++++ 3 files changed, 66 insertions(+), 30 deletions(-) diff --git a/reactos/dll/win32/imm32/imm.c b/reactos/dll/win32/imm32/imm.c index c708b83c90a..decdcae812f 100644 --- a/reactos/dll/win32/imm32/imm.c +++ b/reactos/dll/win32/imm32/imm.c @@ -1154,7 +1154,7 @@ static INT CopyCompAttrIMEtoClient(InputContextData *data, LPBYTE source, INT sl return rc; } -static INT CopyCompClauseIMEtoClient(InputContextData *data, LPBYTE source, INT slen, LPBYTE ssource, INT sslen, +static INT CopyCompClauseIMEtoClient(InputContextData *data, LPBYTE source, INT slen, LPBYTE ssource, LPBYTE target, INT tlen, BOOL unicode ) { INT rc; @@ -1265,13 +1265,13 @@ static LONG ImmGetCompositionStringT( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, case GCS_COMPCLAUSE: TRACE("GCS_COMPCLAUSE\n"); rc = CopyCompClauseIMEtoClient(data, compdata + compstr->dwCompClauseOffset,compstr->dwCompClauseLen, - compdata + compstr->dwCompStrOffset, compstr->dwCompStrLen, + compdata + compstr->dwCompStrOffset, lpBuf, dwBufLen, unicode); break; case GCS_RESULTCLAUSE: TRACE("GCS_RESULTCLAUSE\n"); rc = CopyCompClauseIMEtoClient(data, compdata + compstr->dwResultClauseOffset,compstr->dwResultClauseLen, - compdata + compstr->dwResultStrOffset, compstr->dwResultStrLen, + compdata + compstr->dwResultStrOffset, lpBuf, dwBufLen, unicode); break; case GCS_RESULTREADSTR: @@ -1281,7 +1281,7 @@ static LONG ImmGetCompositionStringT( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, case GCS_RESULTREADCLAUSE: TRACE("GCS_RESULTREADCLAUSE\n"); rc = CopyCompClauseIMEtoClient(data, compdata + compstr->dwResultReadClauseOffset,compstr->dwResultReadClauseLen, - compdata + compstr->dwResultStrOffset, compstr->dwResultStrLen, + compdata + compstr->dwResultStrOffset, lpBuf, dwBufLen, unicode); break; case GCS_COMPREADSTR: @@ -1297,7 +1297,7 @@ static LONG ImmGetCompositionStringT( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, case GCS_COMPREADCLAUSE: TRACE("GCS_COMPREADCLAUSE\n"); rc = CopyCompClauseIMEtoClient(data, compdata + compstr->dwCompReadClauseOffset,compstr->dwCompReadClauseLen, - compdata + compstr->dwCompStrOffset, compstr->dwCompStrLen, + compdata + compstr->dwCompStrOffset, lpBuf, dwBufLen, unicode); break; case GCS_CURSORPOS: @@ -1360,9 +1360,15 @@ BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) */ HIMC WINAPI ImmGetContext(HWND hWnd) { - HIMC rc = NULL; + HIMC rc; TRACE("%p\n", hWnd); + + if (!IsWindow(hWnd)) + { + SetLastError(ERROR_INVALID_WINDOW_HANDLE); + return NULL; + } if (!IMM_GetThreadData()->defaultContext) IMM_GetThreadData()->defaultContext = ImmCreateContext(); @@ -1769,6 +1775,7 @@ UINT WINAPI ImmGetVirtualKey(HWND hWnd) if ( data ) return data->lastVK; + version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); GetVersionExA( &version ); switch(version.dwPlatformId) { @@ -1884,21 +1891,20 @@ BOOL WINAPI ImmIsUIMessageA( TRACE("(%p, %x, %ld, %ld)\n", hWndIME, msg, wParam, lParam); if ((msg >= WM_IME_STARTCOMPOSITION && msg <= WM_IME_KEYLAST) || - (msg >= WM_IME_SETCONTEXT && msg <= WM_IME_KEYUP) || - (msg == WM_MSIME_SERVICE) || - (msg == WM_MSIME_RECONVERTOPTIONS) || - (msg == WM_MSIME_MOUSE) || - (msg == WM_MSIME_RECONVERTREQUEST) || - (msg == WM_MSIME_RECONVERT) || - (msg == WM_MSIME_QUERYPOSITION) || - (msg == WM_MSIME_DOCUMENTFEED)) - + (msg == WM_IME_SETCONTEXT) || + (msg == WM_IME_NOTIFY) || + (msg == WM_IME_COMPOSITIONFULL) || + (msg == WM_IME_SELECT) || + (msg == 0x287 /* FIXME: WM_IME_SYSTEM */) || + (msg == WM_MSIME_RECONVERTOPTIONS) || + (msg == WM_MSIME_MOUSE) || + (msg == WM_MSIME_RECONVERTREQUEST) || + (msg == WM_MSIME_RECONVERT) || + (msg == WM_MSIME_QUERYPOSITION) || + (msg == WM_MSIME_DOCUMENTFEED)) { - if (!IMM_GetThreadData()->hwndDefault) - ImmGetDefaultIMEWnd(NULL); - - if (hWndIME == NULL) - PostMessageA(IMM_GetThreadData()->hwndDefault, msg, wParam, lParam); + if (hWndIME) + SendMessageA(hWndIME, msg, wParam, lParam); rc = TRUE; } @@ -1912,17 +1918,26 @@ BOOL WINAPI ImmIsUIMessageW( HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL rc = FALSE; - TRACE("(%p, %d, %ld, %ld):\n", hWndIME, msg, wParam, lParam); + + TRACE("(%p, %x, %ld, %ld)\n", hWndIME, msg, wParam, lParam); if ((msg >= WM_IME_STARTCOMPOSITION && msg <= WM_IME_KEYLAST) || - (msg >= WM_IME_SETCONTEXT && msg <= WM_IME_KEYUP) || - (msg == WM_MSIME_SERVICE) || - (msg == WM_MSIME_RECONVERTOPTIONS) || - (msg == WM_MSIME_MOUSE) || - (msg == WM_MSIME_RECONVERTREQUEST) || - (msg == WM_MSIME_RECONVERT) || - (msg == WM_MSIME_QUERYPOSITION) || - (msg == WM_MSIME_DOCUMENTFEED)) + (msg == WM_IME_SETCONTEXT) || + (msg == WM_IME_NOTIFY) || + (msg == WM_IME_COMPOSITIONFULL) || + (msg == WM_IME_SELECT) || + (msg == 0x287 /* FIXME: WM_IME_SYSTEM */) || + (msg == WM_MSIME_RECONVERTOPTIONS) || + (msg == WM_MSIME_MOUSE) || + (msg == WM_MSIME_RECONVERTREQUEST) || + (msg == WM_MSIME_RECONVERT) || + (msg == WM_MSIME_QUERYPOSITION) || + (msg == WM_MSIME_DOCUMENTFEED)) + { + if (hWndIME) + SendMessageW(hWndIME, msg, wParam, lParam); + rc = TRUE; + } return rc; } @@ -2820,3 +2835,13 @@ BOOL WINAPI ImmDisableTextFrameService(DWORD idThread) FIXME("Stub\n"); return FALSE; } + +/*********************************************************************** + * ImmEnumInputContext(IMM32.@) + */ + +BOOL WINAPI ImmEnumInputContext(DWORD idThread, IMCENUMPROC lpfn, LPARAM lParam) +{ + FIXME("Stub\n"); + return FALSE; +} diff --git a/reactos/dll/win32/imm32/imm32.spec b/reactos/dll/win32/imm32/imm32.spec index 0d053627d50..03f64a50db5 100644 --- a/reactos/dll/win32/imm32/imm32.spec +++ b/reactos/dll/win32/imm32/imm32.spec @@ -12,7 +12,7 @@ @ stdcall ImmDisableIME(long) @ stdcall ImmDisableIme(long) ImmDisableIME @ stdcall ImmDisableTextFrameService(long) -@ stub ImmEnumInputContext +@ stdcall ImmEnumInputContext(long ptr long) @ stdcall ImmEnumRegisterWordA(long ptr str long str ptr) @ stdcall ImmEnumRegisterWordW(long ptr wstr long wstr ptr) @ stdcall ImmEscapeA(long long long ptr) diff --git a/reactos/include/psdk/imm.h b/reactos/include/psdk/imm.h index 07c2cc38a38..8d45833c176 100644 --- a/reactos/include/psdk/imm.h +++ b/reactos/include/psdk/imm.h @@ -119,6 +119,16 @@ typedef struct tagIMEMENUITEMINFOW DECL_WINELIB_TYPE_AW(IMEMENUITEMINFO) DECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO) +typedef struct tagIMECHARPOSITION { + DWORD dwSize; + DWORD dwCharPos; + POINT pt; + UINT cLineHeight; + RECT rcDocument; +} IMECHARPOSITION, *PIMECHARPOSITION, *NPIMECHARPOSITION, *LPIMECHARPOSITION; + +typedef BOOL (CALLBACK* IMCENUMPROC)(HIMC, LPARAM); + typedef struct _tagCOMPOSITIONFORM { DWORD dwStyle; @@ -600,6 +610,7 @@ BOOL WINAPI ImmConfigureIMEW(HKL, HWND, DWORD, LPVOID); HIMC WINAPI ImmCreateContext(void); BOOL WINAPI ImmDestroyContext(HIMC hIMC); BOOL WINAPI ImmDisableIME(DWORD idThread); +BOOL WINAPI ImmEnumInputContext(DWORD, IMCENUMPROC, LPARAM); UINT WINAPI ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID); UINT WINAPI ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID); #define ImmEnumRegisterWord WINELIB_NAME_AW(ImmEnumRegisterWord)