diff --git a/dlls/imm32/Makefile.in b/dlls/imm32/Makefile.in index 43e192532db..a2cb2611322 100644 --- a/dlls/imm32/Makefile.in +++ b/dlls/imm32/Makefile.in @@ -9,13 +9,7 @@ LDDLLFLAGS = @LDDLLFLAGS@ SYMBOLFILE = $(MODULE).tmp.o C_SRCS = \ - imc.c \ - imekl.c \ - imewnd.c \ - imm.c \ - main.c \ - memory.c \ - string.c + imm.c @MAKE_DLL_RULES@ diff --git a/dlls/imm32/imc.c b/dlls/imm32/imc.c deleted file mode 100644 index 07715bf908c..00000000000 --- a/dlls/imm32/imc.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Input Method Context - * - * Copyright 2000 Hidenori Takeshima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include "winbase.h" -#include "windef.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "immddk.h" - -#include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imm); - -#include "imm_private.h" - -static HIMC IMM32_CreateIMC( HKL hkl ); -static BOOL IMM32_DestroyIMC( HIMC hIMC ); - -IMM32_IMC* IMM32_LockIMC( HIMC hIMC ) -{ - IMM32_IMC* pIMC; - - if ( hIMC == NULLIMC ) - { - SetLastError( ERROR_INVALID_HANDLE ); - return NULL; - } - - pIMC = (IMM32_IMC*)IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMC ); - if ( !pIMC->fSelected ) - { - (void)IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMC ); - SetLastError( ERROR_ACCESS_DENIED ); - return NULL; - } - - return pIMC; -} - -BOOL IMM32_UnlockIMC( HIMC hIMC ) -{ - if ( hIMC == NULLIMC ) - { - SetLastError( ERROR_INVALID_HANDLE ); - return FALSE; - } - - return IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMC ); -} - -static HIMC IMM32_CreateIMC( HKL hkl ) -{ - IMM32_MOVEABLEMEM* hIMC; - IMM32_IMC* pIMC; - LPCOMPOSITIONSTRING lpCompStr; - LPCANDIDATEINFO lpCandInfo; - LPGUIDELINE lpGuideLine; - - hIMC = IMM32_MoveableAlloc( 0, sizeof( IMM32_IMC ) ); - if ( hIMC == NULL ) - { - SetLastError( ERROR_OUTOFMEMORY ); - return NULLIMC; - } - - pIMC = (IMM32_IMC*)IMM32_MoveableLock( hIMC ); - - /* Initialize some members of IMC. */ - pIMC->context.hWnd = (HWND)NULL; - pIMC->context.fOpen = FALSE; - pIMC->context.hCompStr = (HIMCC)NULL; - pIMC->context.hCandInfo = (HIMCC)NULL; - pIMC->context.hGuideLine = (HIMCC)NULL; - pIMC->context.hPrivate = (HIMCC)NULL; - pIMC->context.dwNumMsgBuf = 0; - pIMC->context.hMsgBuf = (HIMCC)NULL; - pIMC->context.fdwInit = 0; - pIMC->pkl = NULL; - pIMC->fSelected = FALSE; - - /* hCompStr, hCandInfo, hGuideLine, hMsgBuf must be allocated. */ - pIMC->context.hCompStr = ImmCreateIMCC( sizeof(COMPOSITIONSTRING) ); - if ( pIMC->context.hCompStr == (HIMCC)NULL ) - goto out_of_memory; - lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC( pIMC->context.hCompStr ); - if ( lpCompStr == NULL ) - goto out_of_memory; - lpCompStr->dwSize = sizeof(COMPOSITIONSTRING); - (void)ImmUnlockIMCC( pIMC->context.hCompStr ); - - pIMC->context.hCandInfo = ImmCreateIMCC( sizeof(CANDIDATEINFO) ); - if ( pIMC->context.hCandInfo == (HIMCC)NULL ) - goto out_of_memory; - lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC( pIMC->context.hCandInfo ); - if ( lpCandInfo == NULL ) - goto out_of_memory; - lpCandInfo->dwSize = sizeof(CANDIDATEINFO); - (void)ImmUnlockIMCC( pIMC->context.hCandInfo ); - - pIMC->context.hGuideLine = ImmCreateIMCC( sizeof(GUIDELINE) ); - if ( pIMC->context.hGuideLine == (HIMCC)NULL ) - goto out_of_memory; - lpGuideLine = (LPGUIDELINE)ImmLockIMCC( pIMC->context.hGuideLine ); - if ( lpGuideLine == NULL ) - goto out_of_memory; - lpGuideLine->dwSize = sizeof(GUIDELINE); - (void)ImmUnlockIMCC( pIMC->context.hGuideLine ); - - pIMC->context.hMsgBuf = ImmCreateIMCC( 0 ); - if ( pIMC->context.hMsgBuf == (HIMCC)NULL ) - goto out_of_memory; - - pIMC->pkl = IMM32_GetIME( hkl ); - if ( pIMC->pkl != NULL ) - { - /* The current HKL is IME. - * Initialize IME's private context. - */ - if ( pIMC->pkl->imeinfo.dwPrivateDataSize > 0 ) - { - pIMC->context.hPrivate = ImmCreateIMCC( - pIMC->pkl->imeinfo.dwPrivateDataSize ); - if ( pIMC->context.hPrivate == (HIMCC)NULL ) - goto out_of_memory; - } - - pIMC->fSelected = TRUE; - if ( !pIMC->pkl->handlers.pImeSelect( (HIMC)hIMC, TRUE ) ) - { - pIMC->fSelected = FALSE; - goto out_of_memory; - } - } - - (void)IMM32_MoveableUnlock( hIMC ); - - return (HIMC)hIMC; - -out_of_memory: - (void)IMM32_DestroyIMC( (HIMC)hIMC ); - SetLastError( ERROR_OUTOFMEMORY ); - return NULLIMC; -} - -static BOOL IMM32_DestroyIMC( HIMC hIMC ) -{ - IMM32_IMC* pIMC; - - if ( hIMC == NULLIMC ) - { - SetLastError( ERROR_INVALID_HANDLE ); - return FALSE; - } - - pIMC = (IMM32_IMC*)IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMC ); - - if ( pIMC->context.hWnd != (HWND)NULL ) - { - FIXME( "please release lock of the context.hWnd!\n" ); - } - - if ( pIMC->fSelected ) - { - (void)pIMC->pkl->handlers.pImeSelect( hIMC, FALSE ); - pIMC->fSelected = FALSE; - } - - if ( pIMC->context.hCompStr != (HIMCC)NULL ) - (void)ImmDestroyIMCC(pIMC->context.hCompStr); - if ( pIMC->context.hCandInfo != (HIMCC)NULL ) - (void)ImmDestroyIMCC(pIMC->context.hCandInfo); - if ( pIMC->context.hGuideLine != (HIMCC)NULL ) - (void)ImmDestroyIMCC(pIMC->context.hGuideLine); - if ( pIMC->context.hPrivate != (HIMCC)NULL ) - (void)ImmDestroyIMCC(pIMC->context.hPrivate); - if ( pIMC->context.hMsgBuf != (HIMCC)NULL ) - (void)ImmDestroyIMCC(pIMC->context.hMsgBuf); - - IMM32_MoveableFree( (IMM32_MOVEABLEMEM*)hIMC ); - - return TRUE; -} - - - - - -/*********************************************************************** - * ImmCreateContext (IMM32.@) - */ -HIMC WINAPI ImmCreateContext( void ) -{ - TRACE("()\n"); - - return IMM32_CreateIMC( GetKeyboardLayout(0) ); -} - -/*********************************************************************** - * ImmDestroyContext (IMM32.@) - */ -BOOL WINAPI ImmDestroyContext( HIMC hIMC ) -{ - TRACE("(0x%08x)\n",hIMC); - - return IMM32_DestroyIMC( hIMC ); -} - -/*********************************************************************** - * ImmLockIMC (IMM32.@) - */ -LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC) -{ - IMM32_IMC* pIMC; - - TRACE("(0x%08x)\n", (unsigned)hIMC); - - pIMC = IMM32_LockIMC( hIMC ); - if ( pIMC == NULL ) - return NULL; - return &(pIMC->context); -} - -/*********************************************************************** - * ImmUnlockIMC (IMM32.@) - */ -BOOL WINAPI ImmUnlockIMC(HIMC hIMC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMC); - - return IMM32_UnlockIMC( hIMC ); -} - -/*********************************************************************** - * ImmGetIMCLockCount (IMM32.@) - */ -DWORD WINAPI ImmGetIMCLockCount(HIMC hIMC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMC); - - if ( hIMC == NULLIMC ) - { - SetLastError( ERROR_INVALID_HANDLE ); - return 0; - } - - return IMM32_MoveableGetLockCount( (IMM32_MOVEABLEMEM*)hIMC ); -} - - diff --git a/dlls/imm32/imekl.c b/dlls/imm32/imekl.c deleted file mode 100644 index c21ce2c77b6..00000000000 --- a/dlls/imm32/imekl.c +++ /dev/null @@ -1,692 +0,0 @@ -/* - * IME Keyboard Layout - * - * Copyright 2000 Hidenori Takeshima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include -#include "winbase.h" -#include "windef.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "winnls.h" -#include "winreg.h" -#include "immddk.h" - -#include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imm); - -#include "imm_private.h" - -static const char IMM32_szRegKL[] = - "System\\CurrentControlSet\\Control\\keyboard layouts"; -static const char IMM32_szIME_File[] = "IME file"; -static const char IMM32_szLayout_File[] = "layout file"; - -static IMM32_IMEKL* IMM32_pklFirst = NULL; - - -static LONG IMM32_RegOpenKey( HKL hkl, PHKEY phkRet ) -{ - CHAR szRegPath[ sizeof(IMM32_szRegKL)+16 ]; - - wsprintfA( szRegPath, "%s\\%08x", IMM32_szRegKL, (unsigned)hkl ); - return RegOpenKeyExA( HKEY_LOCAL_MACHINE, szRegPath, - 0, KEY_READ, phkRet ); -} - -static LONG IMM32_RegCreateKey( HKL hkl, PHKEY phkRet, - LPDWORD lpdwDisposition ) -{ - CHAR szRegPath[ sizeof(IMM32_szRegKL)+16 ]; - - wsprintfA( szRegPath, "%s\\%08x", IMM32_szRegKL, (unsigned)hkl ); - return RegCreateKeyExA( HKEY_LOCAL_MACHINE, szRegPath, - 0, "REG_SZ", - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, NULL, - phkRet, lpdwDisposition ); -} - -static DWORD IMM32_GetIMEFileName( HKL hkl, LPSTR lpBuf, INT nBufLen ) -{ - HKEY hkey; - LONG nError; - DWORD dwType; - DWORD cbData; - CHAR szValueName[ sizeof(IMM32_szIME_File) ]; - - TRACE( "hkl = %08x\n", (unsigned)hkl ); - - nError = IMM32_RegOpenKey( hkl, &hkey ); - if ( nError != ERROR_SUCCESS ) - { - SetLastError( nError ); - return 0; - } - memcpy( szValueName, IMM32_szIME_File, sizeof(IMM32_szIME_File) ); - - nError = RegQueryValueExA( hkey, szValueName, NULL, - &dwType, NULL, &cbData ); - if ( nError == ERROR_SUCCESS && dwType != REG_SZ ) - nError = ERROR_FILE_NOT_FOUND; /* FIXME? */ - if ( nError == ERROR_SUCCESS && lpBuf != NULL && nBufLen != 0 ) - { - if ( nBufLen < (INT)cbData ) - nError = ERROR_INSUFFICIENT_BUFFER; - else - nError = RegQueryValueExA( hkey, szValueName, NULL, - &dwType, lpBuf, &cbData ); - } - - RegCloseKey( hkey ); - - if ( nError != ERROR_SUCCESS ) - { - SetLastError( nError ); - return 0; - } - - return cbData; -} - - -static -BOOL IMM32_GetIMEHandlersA( HINSTANCE hInstIME, - struct IMM32_IME_EXPORTED_HANDLERS* phandlers ) -{ - BOOL fError; - - #define FE(name) \ - phandlers->p##name = (IMM32_p##name) \ - GetProcAddress(hInstIME,#name); \ - if ( phandlers->p##name == NULL ) fError = TRUE; - #define FE_(name) \ - phandlers->p##name.A = (IMM32_p##name##A) \ - GetProcAddress(hInstIME,#name); \ - if ( phandlers->p##name.A == NULL ) fError = TRUE; - - fError = FALSE; - - FE_(ImeInquire) - FE_(ImeConfigure) - FE_(ImeConversionList) - FE(ImeDestroy) - FE_(ImeEnumRegisterWord) - FE_(ImeGetRegisterWordStyle) - FE_(ImeEscape) - FE(ImeProcessKey) - FE_(ImeRegisterWord) - FE(ImeSelect) - FE(ImeSetActiveContext) - FE_(ImeSetCompositionString) - FE(ImeToAsciiEx) - FE_(ImeUnregisterWord) - FE(NotifyIME) - - if ( fError ) - return FALSE; - - FE_(ImeGetImeMenuItems) - - #undef FE - #undef FE_ - - return TRUE; -} - -static -BOOL IMM32_GetIMEHandlersW( HINSTANCE hInstIME, - struct IMM32_IME_EXPORTED_HANDLERS* phandlers ) -{ - BOOL fError; - - #define FE(name) \ - phandlers->p##name = (IMM32_p##name) \ - GetProcAddress(hInstIME,#name); \ - if ( phandlers->p##name == NULL ) fError = TRUE; - #define FE_(name) \ - phandlers->p##name.W = (IMM32_p##name##W) \ - GetProcAddress(hInstIME,#name); \ - if ( phandlers->p##name.W == NULL ) fError = TRUE; - - fError = FALSE; - - FE_(ImeInquire) - FE_(ImeConfigure) - FE_(ImeConversionList) - FE(ImeDestroy) - FE_(ImeEnumRegisterWord) - FE_(ImeGetRegisterWordStyle) - FE_(ImeEscape) - FE(ImeProcessKey) - FE_(ImeRegisterWord) - FE(ImeSelect) - FE(ImeSetActiveContext) - FE_(ImeSetCompositionString) - FE(ImeToAsciiEx) - FE_(ImeUnregisterWord) - FE(NotifyIME) - - if ( fError ) - return FALSE; - - FE_(ImeGetImeMenuItems) - - #undef FE - #undef FE_ - - return TRUE; -} - - -static IMM32_IMEKL* IMM32_LoadIME( HKL hkl ) -{ - IMM32_IMEKL* pkl = NULL; - BOOL fInitialized = FALSE; - CHAR* pszFileName = NULL; - DWORD dwBufLen; - IMM32_pImeInquireA pImeInquire; - IMM32_pImeDestroy pImeDestroy = NULL; - CHAR szUIClassName[ (IMM32_UICLASSNAME_MAX+1)*sizeof(WCHAR) ]; - - dwBufLen = IMM32_GetIMEFileName( hkl, NULL, 0 ); - if ( dwBufLen == 0 ) - goto err; - pszFileName = (CHAR*)IMM32_HeapAlloc( 0, sizeof(CHAR)*(dwBufLen+1) ); - if ( pszFileName == NULL ) - { - SetLastError( ERROR_OUTOFMEMORY ); - goto err; - } - if ( !IMM32_GetIMEFileName( hkl, pszFileName, dwBufLen + 1 ) ) - goto err; - - pkl = (IMM32_IMEKL*) - IMM32_HeapAlloc( HEAP_ZERO_MEMORY, sizeof(IMM32_IMEKL) ); - if ( pkl == NULL ) - { - SetLastError( ERROR_OUTOFMEMORY ); - goto err; - } - - pkl->pNext = NULL; - pkl->hkl = hkl; - pkl->hInstIME = LoadLibraryA( pszFileName ); - if ( pkl->hInstIME == (HINSTANCE)NULL ) - goto err; - - pImeInquire = (IMM32_pImeInquireA)GetProcAddress - ( pkl->hInstIME, "ImeInquire" ); - pImeDestroy = (IMM32_pImeDestroy)GetProcAddress - ( pkl->hInstIME, "ImeDestroy" ); - if ( pImeInquire == NULL || pImeDestroy == NULL ) - goto err; - - if ( !pImeInquire( &(pkl->imeinfo), szUIClassName, NULL ) ) - { - SetLastError( ERROR_DLL_INIT_FAILED ); /* FIXME? */ - goto err; - } - fInitialized = TRUE; - - /* FIXME: Is this correct??? */ - if ( pkl->imeinfo.fdwProperty & IME_PROP_UNICODE ) - pkl->fUnicode = TRUE; - else - pkl->fUnicode = FALSE; - - if ( pkl->fUnicode ) - { - if ( !IMM32_GetIMEHandlersW( pkl->hInstIME, &pkl->handlers ) ) - goto err; - memcpy( pkl->UIClassName.W, szUIClassName, - IMM32_UICLASSNAME_MAX*sizeof(WCHAR) ); - TRACE( "UI class name(Unicode): %s\n", - debugstr_w(pkl->UIClassName.W) ); - } - else - { - if ( !IMM32_GetIMEHandlersA( pkl->hInstIME, &pkl->handlers ) ) - goto err; - memcpy( pkl->UIClassName.A, szUIClassName, - IMM32_UICLASSNAME_MAX*sizeof(CHAR) ); - TRACE( "UI class name(ASCII): %s\n", - debugstr_a(pkl->UIClassName.A) ); - } - - /* The IME is loaded successfully. */ - pkl->pszIMEFileName = pszFileName; pszFileName = NULL; - return pkl; - -err: - IMM32_HeapFree( pszFileName ); - if ( pkl != NULL ) - { - if ( pkl->hInstIME != (HINSTANCE)NULL ) - { - if ( fInitialized ) - (void)pImeDestroy(0); - FreeLibrary( pkl->hInstIME ); - } - IMM32_HeapFree( pkl ); - } - - return NULL; -} - - -const IMM32_IMEKL* IMM32_GetIME( HKL hkl ) -{ - IMM32_IMEKL* pkl; - - IMM32_Lock(); - - pkl = IMM32_pklFirst; - while ( pkl != NULL ) - { - if ( pkl->hkl == hkl ) - goto end; - pkl = pkl->pNext; - } - - pkl = IMM32_LoadIME( hkl ); - if ( pkl != NULL ) - { - pkl->pNext = IMM32_pklFirst; - IMM32_pklFirst = pkl; - } - -end: - IMM32_Unlock(); - - return pkl; -} - -void IMM32_UnloadAllIMEs( void ) -{ - IMM32_IMEKL* pkl; - IMM32_IMEKL* pklNext; - - IMM32_Lock(); - - pkl = IMM32_pklFirst; - while ( pkl != NULL ) - { - TRACE( "hkl = %08x\n", (unsigned)pkl->hkl ); - - pklNext = pkl->pNext; - (void)pkl->handlers.pImeDestroy(0); - FreeLibrary( pkl->hInstIME ); - IMM32_HeapFree( pkl->pszIMEFileName ); - IMM32_HeapFree( pkl ); - pkl = pklNext; - } - IMM32_pklFirst = NULL; - - IMM32_Unlock(); -} - - - -/*********************************************************************** - * ImmInstallIMEA (IMM32.@) - */ -HKL WINAPI ImmInstallIMEA( - LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText) -{ - HKL hkl; - DWORD dwLCID; - DWORD dwTryCount; - LONG nError; - HKEY hkey; - DWORD dwDisposition; - DWORD cbData; - CHAR szValueName[ sizeof(IMM32_szIME_File) ]; - - TRACE("(%s, %s)\n", - debugstr_a(lpszIMEFileName), debugstr_a(lpszLayoutText) ); - - dwLCID = (DWORD)GetThreadLocale(); - dwTryCount = 0; - - FIXME( "IMEs don't work correctly now since\n" - "wine/windows/input.c doesn't handle HKL correctly.\n" ); - - while ( 1 ) - { - hkl = (HKL)(((0xe000|dwTryCount)<<16) | (dwLCID)); - - nError = IMM32_RegCreateKey( hkl, &hkey, &dwDisposition ); - if ( nError != ERROR_SUCCESS ) - break; - - memcpy( szValueName, IMM32_szIME_File, - sizeof(IMM32_szIME_File) ); - - nError = RegQueryValueExA( hkey, szValueName, NULL, - NULL, NULL, &cbData ); - if ( nError == ERROR_SUCCESS && cbData > 0 ) - { - RegCloseKey( hkey ); - - /* try to assign an other HKL. */ - dwTryCount ++; - if ( dwTryCount >= 0x100 ) - { - nError = ERROR_ACCESS_DENIED; /* FIXME */ - break; - } - continue; - } - - nError = RegSetValueExA( hkey, IMM32_szIME_File, 0, - REG_SZ, lpszIMEFileName, - strlen(lpszIMEFileName)+1 ); - if ( nError == ERROR_SUCCESS ) - nError = RegSetValueExA( hkey, IMM32_szLayout_File, 0, - REG_SZ, lpszLayoutText, - strlen(lpszLayoutText)+1 ); - RegCloseKey( hkey ); - break; - } - - if ( nError != ERROR_SUCCESS ) - { - SetLastError( nError ); - return (HKL)NULL; - } - - return hkl; -} - -/*********************************************************************** - * ImmInstallIMEW (IMM32.@) - */ -HKL WINAPI ImmInstallIMEW( - LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText) -{ - LPSTR lpszParam1; - LPSTR lpszParam2; - HKL hkl; - - TRACE("(%s, %s)\n", - debugstr_w(lpszIMEFileName), debugstr_w(lpszLayoutText) ); - - lpszParam1 = IMM32_strdupWtoA( lpszIMEFileName ); - lpszParam2 = IMM32_strdupWtoA( lpszLayoutText ); - if ( ( lpszParam1 == NULL ) || ( lpszParam2 == NULL ) ) - { - SetLastError( ERROR_OUTOFMEMORY ); - hkl = (HKL)NULL; - } - else - { - hkl = ImmInstallIMEA( lpszParam1, lpszParam2 ); - } - IMM32_HeapFree( lpszParam1 ); - IMM32_HeapFree( lpszParam2 ); - - return hkl; -} - - -/*********************************************************************** - * ImmIsIME (IMM32.@) - */ -BOOL WINAPI ImmIsIME(HKL hkl) -{ - const IMM32_IMEKL* pkl; - - TRACE("(0x%08x)\n", hkl); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return FALSE; - - return TRUE; -} - - -/*********************************************************************** - * ImmGetIMEFileNameA (IMM32.@) - */ -UINT WINAPI ImmGetIMEFileNameA(HKL hkl, LPSTR lpszFileName, UINT uBufLen) -{ - const IMM32_IMEKL* pkl; - UINT uIMEFileNameLen; - - TRACE("(%08x,%p,%u)\n",hkl,lpszFileName,uBufLen); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - uIMEFileNameLen = strlen(pkl->pszIMEFileName); - if ( uBufLen == 0 ) - return uIMEFileNameLen; - if ( uBufLen <= uIMEFileNameLen ) - { - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return 0; - } - memcpy( lpszFileName, pkl->pszIMEFileName, - sizeof(CHAR)*(uIMEFileNameLen+1) ); - - return uIMEFileNameLen; -} - -/*********************************************************************** - * ImmGetIMEFileNameW (IMM32.@) - */ -UINT WINAPI ImmGetIMEFileNameW(HKL hkl, LPWSTR lpszFileName, UINT uBufLen) -{ - const IMM32_IMEKL* pkl; - UINT uIMEFileNameLen; - - TRACE("(%08x,%p,%u)\n",hkl,lpszFileName,uBufLen); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - uIMEFileNameLen = IMM32_strlenAtoW(pkl->pszIMEFileName); - if ( uBufLen == 0 ) - return uIMEFileNameLen; - if ( uBufLen <= uIMEFileNameLen ) - { - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return 0; - } - IMM32_strncpyAtoW( lpszFileName, pkl->pszIMEFileName, uBufLen ); - - return uIMEFileNameLen; -} - -/*********************************************************************** - * ImmGetProperty (IMM32.@) - */ -DWORD WINAPI ImmGetProperty(HKL hkl, DWORD fdwIndex) -{ - const IMM32_IMEKL* pkl; - DWORD dwRet; - - TRACE("(0x%08x, %ld)\n", hkl, fdwIndex); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - switch ( fdwIndex ) - { - case IGP_GETIMEVERSION: - dwRet = IMEVER_0400; - break; - case IGP_PROPERTY: - dwRet = pkl->imeinfo.fdwProperty; - break; - case IGP_CONVERSION: - dwRet = pkl->imeinfo.fdwConversionCaps; - break; - case IGP_SENTENCE: - dwRet = pkl->imeinfo.fdwSentenceCaps; - break; - case IGP_UI: - dwRet = pkl->imeinfo.fdwUICaps; - break; - case IGP_SETCOMPSTR: - dwRet = pkl->imeinfo.fdwSCSCaps; - break; - case IGP_SELECT: - dwRet = pkl->imeinfo.fdwSelectCaps; - break; - default: - FIXME("(0x%08x, %ld): invalid/unknown property.\n", - hkl, fdwIndex); - SetLastError( ERROR_INVALID_PARAMETER ); - dwRet = 0; - } - - return dwRet; -} - - -/*********************************************************************** - * ImmEnumRegisterWordA (IMM32.@) - */ -UINT WINAPI ImmEnumRegisterWordA( - HKL hkl, REGISTERWORDENUMPROCA lpfnEnumProc, - LPCSTR lpszReading, DWORD dwStyle, - LPCSTR lpszRegister, LPVOID lpData) -{ - const IMM32_IMEKL* pkl; - - TRACE("(0x%08x, %p, %s, %ld, %s, %p)\n", - hkl, lpfnEnumProc, - debugstr_a(lpszReading), dwStyle, - debugstr_a(lpszRegister), lpData); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - if ( pkl->fUnicode ) - { - FIXME( "please implement UNICODE->ANSI\n" ); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; - } - else - { - return pkl->handlers.pImeEnumRegisterWord.A - ( lpfnEnumProc, lpszReading, dwStyle, - lpszRegister, lpData ); - } -} - -/*********************************************************************** - * ImmEnumRegisterWordW (IMM32.@) - */ -UINT WINAPI ImmEnumRegisterWordW( - HKL hkl, REGISTERWORDENUMPROCW lpfnEnumProc, - LPCWSTR lpszReading, DWORD dwStyle, - LPCWSTR lpszRegister, LPVOID lpData) -{ - const IMM32_IMEKL* pkl; - - TRACE("(0x%08x, %p, %s, %ld, %s, %p): stub\n", - hkl, lpfnEnumProc, - debugstr_w(lpszReading), dwStyle, - debugstr_w(lpszRegister), lpData); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - if ( pkl->fUnicode ) - { - return pkl->handlers.pImeEnumRegisterWord.W - ( lpfnEnumProc, lpszReading, dwStyle, - lpszRegister, lpData ); - } - else - { - FIXME( "please implement ANSI->UNICODE\n" ); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; - } -} - - -/*********************************************************************** - * ImmGetRegisterWordStyleA (IMM32.@) - */ -UINT WINAPI ImmGetRegisterWordStyleA( - HKL hkl, UINT nItem, LPSTYLEBUFA lpStyleBuf) -{ - const IMM32_IMEKL* pkl; - - TRACE("(0x%08x, %d, %p)\n", hkl, nItem, lpStyleBuf); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - if ( pkl->fUnicode ) - { - FIXME( "please implement UNICODE->ANSI\n" ); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; - } - else - { - return pkl->handlers.pImeGetRegisterWordStyle.A - ( nItem, lpStyleBuf ); - } -} - -/*********************************************************************** - * ImmGetRegisterWordStyleW (IMM32.@) - */ -UINT WINAPI ImmGetRegisterWordStyleW( - HKL hkl, UINT nItem, LPSTYLEBUFW lpStyleBuf) -{ - const IMM32_IMEKL* pkl; - - TRACE("(0x%08x, %d, %p)\n", hkl, nItem, lpStyleBuf); - - pkl = IMM32_GetIME( hkl ); - if ( pkl == NULL ) - return 0; - - if ( pkl->fUnicode ) - { - return pkl->handlers.pImeGetRegisterWordStyle.W - ( nItem, lpStyleBuf ); - } - else - { - FIXME( "please implement ANSI->UNICODE\n" ); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; - } -} - - diff --git a/dlls/imm32/imewnd.c b/dlls/imm32/imewnd.c deleted file mode 100644 index 07ab5d08274..00000000000 --- a/dlls/imm32/imewnd.c +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Implementation of the 'IME window' class - * - * Copyright 2000 Hidenori Takeshima - * - * - * FIXME: - * - handle all messages. - * - handle all notifications. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include "winbase.h" -#include "windef.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "immddk.h" - -#include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imm); - -#include "imm_private.h" - -#define IMM32_CONVERSION_BUFSIZE 200 - -static CHAR IMM32_szIMEClass[] = "IME"; -static CHAR IMM32_szIMEWindowName[] = "Default IME"; - -typedef struct -{ - HWND hwndSelf; - HWND hwndActive; - DWORD dwBufUsed; - union - { - CHAR A[IMM32_CONVERSION_BUFSIZE]; - WCHAR W[IMM32_CONVERSION_BUFSIZE]; - } buf; -} IMM32_IMEWNDPARAM; - - -static BOOL IMM32_IsUIMessage( UINT nMsg ); - -static -LRESULT IMM32_IMEWnd_WM_KEYDOWN( IMM32_IMEWNDPARAM* pParam, - WPARAM wParam, LPARAM lParam ) -{ - BYTE bKeyState[ 256 ]; - DWORD dwTransBufSize; - UINT nNumOfMsg; - LRESULT lr; - HIMC hIMC; - IMM32_IMC* pIMC; - const IMM32_IMEKL* pkl; - - if ( pParam->hwndActive == (HWND)NULL ) - return 0; - - /* get context -> get pkl. */ - hIMC = ImmGetContext( pParam->hwndActive ); - if ( hIMC == NULLIMC ) - return 0; - pIMC = IMM32_LockIMC( hIMC ); - if ( pIMC == NULL ) - { - ImmReleaseContext( pParam->hwndActive, hIMC ); - return 0; - } - pkl = pIMC->pkl; - - GetKeyboardState( bKeyState ); - if ( !pkl->handlers.pImeProcessKey - ( hIMC, wParam, lParam, bKeyState ) ) - { - lr = SendMessageA( pParam->hwndActive, WM_IME_KEYDOWN, - wParam, lParam ); - goto end; - } - - dwTransBufSize = 0; - nNumOfMsg = pkl->handlers.pImeToAsciiEx - ( wParam, (lParam>>16)&0xff, - bKeyState, &dwTransBufSize, - 0, /* FIXME!!! - 1 if a menu is active */ - hIMC ); - - /* FIXME - process generated messages */ - /* I cannot use ImmGenerateMessage() since - * the IME window must handle generated messages. */ - - /* NOTE - I must check pkl->fUnicode. */ - FIXME( "%d messages generated.\n", nNumOfMsg ); - - lr = 0; -end: - IMM32_UnlockIMC( hIMC ); - ImmReleaseContext( pParam->hwndActive, hIMC ); - - return lr; -} - -static -LRESULT IMM32_IMEWnd_WM_KEYUP( IMM32_IMEWNDPARAM* pParam, - WPARAM wParam, LPARAM lParam ) -{ - BYTE bKeyState[ 256 ]; - LRESULT lr; - HIMC hIMC; - IMM32_IMC* pIMC; - const IMM32_IMEKL* pkl; - - if ( pParam->hwndActive == (HWND)NULL ) - return 0; - - /* get context -> get pkl. */ - hIMC = ImmGetContext( pParam->hwndActive ); - if ( hIMC == NULLIMC ) - return 0; - pIMC = IMM32_LockIMC( hIMC ); - if ( pIMC == NULL ) - { - ImmReleaseContext( pParam->hwndActive, hIMC ); - return 0; - } - pkl = pIMC->pkl; - - GetKeyboardState( bKeyState ); - if ( !pkl->handlers.pImeProcessKey - ( hIMC, wParam, lParam, bKeyState ) ) - { - lr = SendMessageA( pParam->hwndActive, WM_IME_KEYUP, - wParam, lParam ); - goto end; - } - - lr = 0; -end: - IMM32_UnlockIMC( hIMC ); - ImmReleaseContext( pParam->hwndActive, hIMC ); - - return lr; -} - - -static -LRESULT CALLBACK IMM32_IMEWndProc( HWND hwnd, UINT nMsg, - WPARAM wParam, LPARAM lParam ) -{ - IMM32_IMEWNDPARAM* pParam = - (IMM32_IMEWNDPARAM*)GetWindowLongA( hwnd, 0L ); - - if ( nMsg == WM_CREATE ) - { - pParam = (IMM32_IMEWNDPARAM*)IMM32_HeapAlloc( - HEAP_ZERO_MEMORY, sizeof(IMM32_IMEWNDPARAM) ); - if ( pParam == NULL ) - return -1L; - SetWindowLongA( hwnd, 0L, (LONG)pParam ); - - /* Initialize pParam. */ - pParam->hwndSelf = hwnd; - pParam->hwndActive = (HWND)NULL; - pParam->dwBufUsed = 0; - - return 0; - } - else if ( nMsg == WM_DESTROY ) - { - /* Uninitialize pParam. */ - - IMM32_HeapFree( pParam ); - SetWindowLongA( hwnd, 0L, (LONG)NULL ); - return 0; - } - - if ( pParam == NULL ) - { - if ( IMM32_IsUIMessage( nMsg ) ) - return 0; - return DefWindowProcA( hwnd, nMsg, wParam, lParam ); - } - - /* FIXME - handle all messages. */ - /* FIXME - handle all notifications. */ - switch ( nMsg ) - { - case WM_KEYDOWN: - return IMM32_IMEWnd_WM_KEYDOWN( pParam, wParam, lParam ); - case WM_KEYUP: - return IMM32_IMEWnd_WM_KEYUP( pParam, wParam, lParam ); - case WM_IME_KEYDOWN: - ERR( "Why WM_IME_KEYDOWN is generated?\n" ); - return 0; - case WM_IME_KEYUP: - ERR( "Why WM_IME_KEYUP is generated?\n" ); - return 0; - case WM_IME_CHAR: - FIXME( "ignore WM_IME_CHAR - wParam %08x, lParam %08lx.\n", - wParam, lParam ); - return 0; - case WM_CHAR: - /* TranslateMessage don't support IME HKL. - FIXME? */ - FIXME( "ignore WM_CHAR - wParam %08x, lParam %08lx.\n", - wParam, lParam ); - return 0; - case WM_IME_CONTROL: - case WM_IME_REQUEST: - case WM_IME_STARTCOMPOSITION: - case WM_IME_ENDCOMPOSITION: - case WM_IME_COMPOSITION: - case WM_IME_SETCONTEXT: - case WM_IME_NOTIFY: - case WM_IME_COMPOSITIONFULL: - case WM_IME_SELECT: - case 0x287: /* What is this message? IMM32.DLL returns TRUE. */ - FIXME( "handle message %08x\n", nMsg ); - return 0; - } - - return DefWindowProcA( hwnd, nMsg, wParam, lParam ); -} - - -/*********************************************************************** - * IMM32_RegisterClass (internal) - */ -BOOL IMM32_RegisterIMEWndClass( HINSTANCE hInstDLL ) -{ - WNDCLASSA wc; - - /* SDK says the "IME" window class is a system global class. */ - wc.style = CS_GLOBALCLASS; - wc.lpfnWndProc = IMM32_IMEWndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = sizeof(LONG); - wc.hInstance = hInstDLL; - wc.hIcon = (HICON)NULL; - wc.hCursor = LoadCursorA((HINSTANCE)NULL,IDC_ARROWA); - wc.hbrBackground = (HBRUSH)NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = IMM32_szIMEClass; - if ( !RegisterClassA( &wc ) ) - return FALSE; - - return TRUE; -} - -/*********************************************************************** - * IMM32_UnregisterClass (internal) - */ -void IMM32_UnregisterIMEWndClass( HINSTANCE hInstDLL ) -{ - (void)UnregisterClassA( IMM32_szIMEClass, hInstDLL ); -} - -/*********************************************************************** - * IMM32_CreateDefaultIMEWnd (internal) - */ - -HWND IMM32_CreateDefaultIMEWnd( void ) -{ - return CreateWindowExA( 0L, - IMM32_szIMEClass, - IMM32_szIMEWindowName, - WS_POPUP | WS_CLIPSIBLINGS | WS_OVERLAPPED, - 0, 0, 0, 0, - (HWND)NULL, - (HMENU)NULL, - (HINSTANCE)GetModuleHandleA(NULL), - NULL ); -} - -static BOOL IMM32_IsUIMessage( UINT nMsg ) -{ - switch ( nMsg ) - { - case WM_IME_STARTCOMPOSITION: - case WM_IME_ENDCOMPOSITION: - case WM_IME_COMPOSITION: - case WM_IME_SETCONTEXT: - case WM_IME_NOTIFY: - case WM_IME_COMPOSITIONFULL: - case WM_IME_SELECT: - case 0x287: /* What is this message? IMM32.DLL returns TRUE. */ - return TRUE; - } - - return FALSE; -} - - -/*********************************************************************** - * ImmIsUIMessageA (IMM32.@) - */ -BOOL WINAPI ImmIsUIMessageA( - HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam) -{ - TRACE("(0x%08x, %d, %d, %ld)\n", - hwndIME, msg, wParam, lParam); - - if ( !IMM32_IsUIMessage( msg ) ) - return FALSE; - if ( hwndIME == (HWND)NULL ) - return TRUE; - - switch ( msg ) - { - case WM_IME_STARTCOMPOSITION: - case WM_IME_ENDCOMPOSITION: - case WM_IME_COMPOSITION: - case WM_IME_SETCONTEXT: - case WM_IME_NOTIFY: - case WM_IME_COMPOSITIONFULL: - case WM_IME_SELECT: - SendMessageA( hwndIME, msg, wParam, lParam ); - break; - case 0x287: /* What is this message? */ - FIXME("(0x%08x, %d, %d, %ld) - unknown message 0x287.\n", - hwndIME, msg, wParam, lParam); - SendMessageA( hwndIME, msg, wParam, lParam ); - break; - } - - return TRUE; -} - -/*********************************************************************** - * ImmIsUIMessageW (IMM32.@) - */ -BOOL WINAPI ImmIsUIMessageW( - HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam) -{ - TRACE("(0x%08x, %d, %d, %ld)\n", - hwndIME, msg, wParam, lParam); - - if ( !IMM32_IsUIMessage( msg ) ) - return FALSE; - if ( hwndIME == (HWND)NULL ) - return TRUE; - - switch ( msg ) - { - case WM_IME_STARTCOMPOSITION: - case WM_IME_ENDCOMPOSITION: - case WM_IME_COMPOSITION: - case WM_IME_SETCONTEXT: - case WM_IME_NOTIFY: - case WM_IME_COMPOSITIONFULL: - case WM_IME_SELECT: - SendMessageW( hwndIME, msg, wParam, lParam ); - break; - case 0x287: /* What is this message? */ - FIXME("(0x%08x, %d, %d, %ld) - unknown message 0x287.\n", - hwndIME, msg, wParam, lParam); - SendMessageW( hwndIME, msg, wParam, lParam ); - break; - } - - return TRUE; -} diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index 0e5dbaf98e1..a1f3b0af2ff 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -1,7 +1,8 @@ /* - * IMM32 stubs - please implement! + * IMM32 - Input Method contexts Manager ??? * - * Copyright 1998 Patrik Stridvall + * Copyright 1998 Patrik Stridvall + * Copyright 2002 Hidenori Takeshima * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -16,18 +17,25 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NOTE for implementors of forwarding to XIM/XIC: + * Implementing low-level APIs with XIM is too hard since + * XIM is a high-level interface. + * some comments are added for implementor with XIM. */ #include "winbase.h" #include "windef.h" #include "wingdi.h" #include "winuser.h" +#include "winnls.h" #include "winerror.h" #include "immddk.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(imm); + /*********************************************************************** * ImmAssociateContext (IMM32.@) */ @@ -35,6 +43,9 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC) { FIXME("(0x%08x, 0x%08x): stub\n",hWnd,hIMC); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + + /* changing contexts is hard -> return default dummy imc */ + return (HIMC)NULL; } @@ -44,6 +55,8 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC) BOOL WINAPI ImmConfigureIMEA( HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData) { + /* are any configurations needed? */ + FIXME("(0x%08x, 0x%08x, %ld, %p): stub\n", hKL, hWnd, dwMode, lpData ); @@ -57,6 +70,8 @@ BOOL WINAPI ImmConfigureIMEA( BOOL WINAPI ImmConfigureIMEW( HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData) { + /* are any configurations needed? */ + FIXME("(0x%08x, 0x%08x, %ld, %p): stub\n", hKL, hWnd, dwMode, lpData ); @@ -82,6 +97,7 @@ LRESULT WINAPI ImmEscapeA( HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData) { + /* hard to implement with XIM */ FIXME("(0x%08x, 0x%08x, %d, %p): stub\n", hKL, hIMC, uEscape, lpData ); @@ -96,6 +112,7 @@ LRESULT WINAPI ImmEscapeW( HKL hKL, HIMC hIMC, UINT uEscape, LPVOID lpData) { + /* hard to implement with XIM */ FIXME("(0x%08x, 0x%08x, %d, %p): stub\n", hKL, hIMC, uEscape, lpData ); @@ -110,6 +127,7 @@ DWORD WINAPI ImmGetCandidateListA( HIMC hIMC, DWORD deIndex, LPCANDIDATELIST lpCandList, DWORD dwBufLen) { + /* hard to implement with XIM */ FIXME("(0x%08x, %ld, %p, %ld): stub\n", hIMC, deIndex, lpCandList, dwBufLen @@ -124,6 +142,7 @@ DWORD WINAPI ImmGetCandidateListA( DWORD WINAPI ImmGetCandidateListCountA( HIMC hIMC, LPDWORD lpdwListCount) { + /* hard to implement with XIM */ FIXME("(0x%08x, %p): stub\n", hIMC, lpdwListCount); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return 0; @@ -135,6 +154,7 @@ DWORD WINAPI ImmGetCandidateListCountA( DWORD WINAPI ImmGetCandidateListCountW( HIMC hIMC, LPDWORD lpdwListCount) { + /* hard to implement with XIM */ FIXME("(0x%08x, %p): stub\n", hIMC, lpdwListCount); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return 0; @@ -147,6 +167,7 @@ DWORD WINAPI ImmGetCandidateListW( HIMC hIMC, DWORD deIndex, LPCANDIDATELIST lpCandList, DWORD dwBufLen) { + /* hard to implement with XIM */ FIXME("(0x%08x, %ld, %p, %ld): stub\n", hIMC, deIndex, lpCandList, dwBufLen @@ -161,6 +182,8 @@ DWORD WINAPI ImmGetCandidateListW( BOOL WINAPI ImmGetCandidateWindow( HIMC hIMC, DWORD dwBufLen, LPCANDIDATEFORM lpCandidate) { + /* return positions of 'candidate window' -> hard? */ + FIXME("(0x%08x, %ld, %p): stub\n", hIMC, dwBufLen, lpCandidate); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -171,6 +194,7 @@ BOOL WINAPI ImmGetCandidateWindow( */ BOOL WINAPI ImmGetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf) { + /* hard to implement with XIM */ FIXME("(0x%08x, %p): stub\n", hIMC, lplf); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -181,6 +205,7 @@ BOOL WINAPI ImmGetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf) */ BOOL WINAPI ImmGetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf) { + /* hard to implement with XIM */ FIXME("(0x%08x, %p): stub\n", hIMC, lplf); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -192,6 +217,7 @@ BOOL WINAPI ImmGetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf) LONG WINAPI ImmGetCompositionStringA( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen) { + /* hard to implement with XIM */ OSVERSIONINFOA version; FIXME("(0x%08x, %ld, %p, %ld): stub\n", hIMC, dwIndex, lpBuf, dwBufLen @@ -216,6 +242,7 @@ LONG WINAPI ImmGetCompositionStringW( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen) { + /* hard to implement with XIM */ OSVERSIONINFOA version; FIXME("(0x%08x, %ld, %p, %ld): stub\n", hIMC, dwIndex, lpBuf, dwBufLen @@ -238,6 +265,8 @@ LONG WINAPI ImmGetCompositionStringW( */ BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) { + /* return positions of 'composition window' -> hard? */ + FIXME("(0x%08x, %p): stub\n", hIMC, lpCompForm); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return 0; @@ -248,6 +277,8 @@ BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) */ HIMC WINAPI ImmGetContext(HWND hWnd) { + /* enter critical section of default context and return it */ + FIXME("(0x%08x): stub\n", hWnd); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return (HIMC)NULL; @@ -261,6 +292,7 @@ DWORD WINAPI ImmGetConversionListA( LPCSTR pSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag) { + /* hard to implement with XIM */ FIXME("(0x%08x, 0x%08x, %s, %p, %ld, %d): stub\n", hKL, hIMC, debugstr_a(pSrc), lpDst, dwBufLen, uFlag ); @@ -276,6 +308,7 @@ DWORD WINAPI ImmGetConversionListW( LPCWSTR pSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag) { + /* hard to implement with XIM */ FIXME("(0x%08x, 0x%08x, %s, %p, %ld, %d): stub\n", hKL, hIMC, debugstr_w(pSrc), lpDst, dwBufLen, uFlag ); @@ -289,6 +322,8 @@ DWORD WINAPI ImmGetConversionListW( BOOL WINAPI ImmGetConversionStatus( HIMC hIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence) { + /* hard -> pretend? */ + FIXME("(0x%08x, %p, %p): stub\n", hIMC, lpfdwConversion, lpfdwSentence ); @@ -301,6 +336,7 @@ BOOL WINAPI ImmGetConversionStatus( */ HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) { + /* hard to implement with XIM */ FIXME("(0x%08x): stub\n", hWnd); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return (HWND)NULL; @@ -337,6 +373,8 @@ UINT WINAPI ImmGetDescriptionW(HKL hKL, LPWSTR lpszDescription, UINT uBufLen) DWORD WINAPI ImmGetGuideLineA( HIMC hIMC, DWORD dwIndex, LPSTR lpBuf, DWORD dwBufLen) { + /* ??? hard?? */ + FIXME("(0x%08x, %ld, %s, %ld): stub\n", hIMC, dwIndex, debugstr_a(lpBuf), dwBufLen ); @@ -349,6 +387,8 @@ DWORD WINAPI ImmGetGuideLineA( */ DWORD WINAPI ImmGetGuideLineW(HIMC hIMC, DWORD dwIndex, LPWSTR lpBuf, DWORD dwBufLen) { + /* ??? hard?? */ + FIXME("(0x%08x, %ld, %s, %ld): stub\n", hIMC, dwIndex, debugstr_w(lpBuf), dwBufLen ); @@ -361,6 +401,8 @@ DWORD WINAPI ImmGetGuideLineW(HIMC hIMC, DWORD dwIndex, LPWSTR lpBuf, DWORD dwBu */ BOOL WINAPI ImmGetOpenStatus(HIMC hIMC) { + /* return whether XIC is activated */ + FIXME("(0x%08x): stub\n", hIMC); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -371,6 +413,8 @@ BOOL WINAPI ImmGetOpenStatus(HIMC hIMC) */ BOOL WINAPI ImmGetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos) { + /* hard??? */ + FIXME("(0x%08x, %p): stub\n", hIMC, lpptPos); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -381,6 +425,7 @@ BOOL WINAPI ImmGetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos) */ UINT WINAPI ImmGetVirtualKey(HWND hWnd) { + /* hard??? */ OSVERSIONINFOA version; FIXME("(0x%08x): stub\n", hWnd); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); @@ -404,6 +449,7 @@ UINT WINAPI ImmGetVirtualKey(HWND hWnd) BOOL WINAPI ImmNotifyIME( HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue) { + /* hard to implement with XIM */ FIXME("(0x%08x, %ld, %ld, %ld): stub\n", hIMC, dwAction, dwIndex, dwValue ); @@ -417,6 +463,7 @@ BOOL WINAPI ImmNotifyIME( BOOL WINAPI ImmRegisterWordA( HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszRegister) { + /* hard to implement with XIM */ FIXME("(0x%08x, %s, %ld, %s): stub\n", hKL, debugstr_a(lpszReading), dwStyle, debugstr_a(lpszRegister) ); @@ -430,6 +477,7 @@ BOOL WINAPI ImmRegisterWordA( BOOL WINAPI ImmRegisterWordW( HKL hKL, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszRegister) { + /* hard to implement with XIM */ FIXME("(0x%08x, %s, %ld, %s): stub\n", hKL, debugstr_w(lpszReading), dwStyle, debugstr_w(lpszRegister) ); @@ -442,6 +490,8 @@ BOOL WINAPI ImmRegisterWordW( */ BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC) { + /* release critical section of default context and return */ + FIXME("(0x%08x, 0x%08x): stub\n", hWnd, hIMC); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -453,6 +503,8 @@ BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC) BOOL WINAPI ImmSetCandidateWindow( HIMC hIMC, LPCANDIDATEFORM lpCandidate) { + /* hard??? */ + FIXME("(0x%08x, %p): stub\n", hIMC, lpCandidate); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -463,6 +515,7 @@ BOOL WINAPI ImmSetCandidateWindow( */ BOOL WINAPI ImmSetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf) { + /* hard to implement with XIM */ FIXME("(0x%08x, %p): stub\n", hIMC, lplf); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -473,6 +526,7 @@ BOOL WINAPI ImmSetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf) */ BOOL WINAPI ImmSetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf) { + /* hard to implement with XIM */ FIXME("(0x%08x, %p): stub\n", hIMC, lplf); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -486,6 +540,8 @@ BOOL WINAPI ImmSetCompositionStringA( LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen) { + /* hard??? */ + FIXME("(0x%08x, %ld, %p, %ld, %p, %ld): stub\n", hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen ); @@ -501,6 +557,8 @@ BOOL WINAPI ImmSetCompositionStringW( LPCVOID lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen) { + /* hard??? */ + FIXME("(0x%08x, %ld, %p, %ld, %p, %ld): stub\n", hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen ); @@ -514,6 +572,8 @@ BOOL WINAPI ImmSetCompositionStringW( BOOL WINAPI ImmSetCompositionWindow( HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) { + /* hard??? */ + FIXME("(0x%08x, %p): stub\n", hIMC, lpCompForm); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -525,6 +585,7 @@ BOOL WINAPI ImmSetCompositionWindow( BOOL WINAPI ImmSetConversionStatus( HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence) { + /* hard to implement with XIM? */ FIXME("(0x%08x, %ld, %ld): stub\n", hIMC, fdwConversion, fdwSentence ); @@ -537,6 +598,8 @@ BOOL WINAPI ImmSetConversionStatus( */ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen) { + /* activate/inactivate XIC */ + FIXME("(0x%08x, %d): stub\n", hIMC, fOpen); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -547,6 +610,8 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen) */ BOOL WINAPI ImmSetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos) { + /* hard??? */ + FIXME("(0x%08x, %p): stub\n", hIMC, lpptPos); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -557,6 +622,8 @@ BOOL WINAPI ImmSetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos) */ BOOL WINAPI ImmSimulateHotKey(HWND hWnd, DWORD dwHotKeyID) { + /* hard??? */ + FIXME("(0x%08x, %ld): stub\n", hWnd, dwHotKeyID); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -568,6 +635,7 @@ BOOL WINAPI ImmSimulateHotKey(HWND hWnd, DWORD dwHotKeyID) BOOL WINAPI ImmUnregisterWordA( HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszUnregister) { + /* hard to implement with XIM */ FIXME("(0x%08x, %s, %ld, %s): stub\n", hKL, debugstr_a(lpszReading), dwStyle, debugstr_a(lpszUnregister) ); @@ -581,6 +649,7 @@ BOOL WINAPI ImmUnregisterWordA( BOOL WINAPI ImmUnregisterWordW( HKL hKL, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszUnregister) { + /* hard to implement with XIM */ FIXME("(0x%08x, %s, %ld, %s): stub\n", hKL, debugstr_w(lpszReading), dwStyle, debugstr_w(lpszUnregister) ); @@ -593,6 +662,7 @@ BOOL WINAPI ImmUnregisterWordW( */ HWND WINAPI ImmCreateSoftKeyboard(UINT uType, HWND hOwner, int x, int y) { + /* hard to implement with XIM */ FIXME("(0x%08x, 0x%08x, %d, %d): stub\n", uType, (unsigned)hOwner, x, y); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return (HWND)NULL; @@ -603,6 +673,7 @@ HWND WINAPI ImmCreateSoftKeyboard(UINT uType, HWND hOwner, int x, int y) */ BOOL WINAPI ImmDestroySoftKeyboard(HWND hwndSoftKeyboard) { + /* hard to implement with XIM */ FIXME("(0x%08x): stub\n", (unsigned)hwndSoftKeyboard); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -613,6 +684,7 @@ BOOL WINAPI ImmDestroySoftKeyboard(HWND hwndSoftKeyboard) */ BOOL WINAPI ImmShowSoftKeyboard(HWND hwndSoftKeyboard, int nCmdShow) { + /* hard to implement with XIM */ FIXME("(0x%08x, %d): stub\n", (unsigned)hwndSoftKeyboard, nCmdShow); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; @@ -624,6 +696,8 @@ BOOL WINAPI ImmShowSoftKeyboard(HWND hwndSoftKeyboard, int nCmdShow) BOOL WINAPI ImmGetHotKey(DWORD dwHotKeyID, LPUINT lpuModifiers, LPUINT lpuVKey, LPHKL lphKL) { + /* hard??? */ + FIXME("(0x%08lx, %p, %p, %p): stub\n", dwHotKeyID, lpuModifiers, lpuVKey, lphKL); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); @@ -636,6 +710,8 @@ BOOL WINAPI ImmGetHotKey(DWORD dwHotKeyID, LPUINT lpuModifiers, BOOL WINAPI ImmSetHotKey(DWORD dwHotKeyID, UINT uModifiers, UINT uVKey, HKL hKL) { + /* hard??? */ + FIXME("(0x%08lx, 0x%08x, 0x%08x, 0x%08x): stub\n", dwHotKeyID, uModifiers, uVKey, (unsigned)hKL); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); @@ -647,10 +723,638 @@ BOOL WINAPI ImmSetHotKey(DWORD dwHotKeyID, UINT uModifiers, */ BOOL WINAPI ImmGenerateMessage(HIMC hIMC) { + /* hard to implement with XIM */ FIXME("(0x%08x): stub\n", (unsigned)hIMC); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; } +/*********************************************************************** + * ImmCreateContext (IMM32.@) + */ +HIMC WINAPI ImmCreateContext( void ) +{ + /* hard to implement with XIM??? */ + FIXME("(): stub\n"); + return (HIMC)NULL; +} + +/*********************************************************************** + * ImmDestroyContext (IMM32.@) + */ +BOOL WINAPI ImmDestroyContext( HIMC hIMC ) +{ + /* hard to implement with XIM??? */ + FIXME("(): stub\n"); + return FALSE; +} + +/*********************************************************************** + * ImmLockIMC (IMM32.@) + */ +LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + return NULL; +} + +/*********************************************************************** + * ImmUnlockIMC (IMM32.@) + */ +BOOL WINAPI ImmUnlockIMC(HIMC hIMC) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + return FALSE; +} + +/*********************************************************************** + * ImmGetIMCLockCount (IMM32.@) + */ +DWORD WINAPI ImmGetIMCLockCount(HIMC hIMC) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * IMM32_IsUIMessage (internal) + */ +static BOOL IMM32_IsUIMessage( UINT nMsg ) +{ + switch ( nMsg ) + { + case WM_IME_STARTCOMPOSITION: + case WM_IME_ENDCOMPOSITION: + case WM_IME_COMPOSITION: + case WM_IME_SETCONTEXT: + case WM_IME_NOTIFY: + case WM_IME_COMPOSITIONFULL: + case WM_IME_SELECT: + case 0x287: /* What is this message? IMM32.DLL returns TRUE. */ + return TRUE; + } + + return FALSE; +} +/*********************************************************************** + * ImmIsUIMessageA (IMM32.@) + */ +BOOL WINAPI ImmIsUIMessageA( + HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam) +{ + TRACE("(0x%08x, %d, %d, %ld)\n", + hwndIME, msg, wParam, lParam); + + if ( !IMM32_IsUIMessage( msg ) ) + return FALSE; + if ( hwndIME == (HWND)NULL ) + return TRUE; + + switch ( msg ) + { + case WM_IME_STARTCOMPOSITION: + case WM_IME_ENDCOMPOSITION: + case WM_IME_COMPOSITION: + case WM_IME_SETCONTEXT: + case WM_IME_NOTIFY: + case WM_IME_COMPOSITIONFULL: + case WM_IME_SELECT: + SendMessageA( hwndIME, msg, wParam, lParam ); + break; + case 0x287: /* What is this message? */ + FIXME("(0x%08x, %d, %d, %ld) - unknown message 0x287.\n", + hwndIME, msg, wParam, lParam); + SendMessageA( hwndIME, msg, wParam, lParam ); + break; + } + + return TRUE; +} + +/*********************************************************************** + * ImmIsUIMessageW (IMM32.@) + */ +BOOL WINAPI ImmIsUIMessageW( + HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam) +{ + TRACE("(0x%08x, %d, %d, %ld)\n", + hwndIME, msg, wParam, lParam); + + if ( !IMM32_IsUIMessage( msg ) ) + return FALSE; + if ( hwndIME == (HWND)NULL ) + return TRUE; + + switch ( msg ) + { + case WM_IME_STARTCOMPOSITION: + case WM_IME_ENDCOMPOSITION: + case WM_IME_COMPOSITION: + case WM_IME_SETCONTEXT: + case WM_IME_NOTIFY: + case WM_IME_COMPOSITIONFULL: + case WM_IME_SELECT: + SendMessageW( hwndIME, msg, wParam, lParam ); + break; + case 0x287: /* What is this message? */ + FIXME("(0x%08x, %d, %d, %ld) - unknown message 0x287.\n", + hwndIME, msg, wParam, lParam); + SendMessageW( hwndIME, msg, wParam, lParam ); + break; + } + + return TRUE; +} + + +/*********************************************************************** + * ImmInstallIMEA (IMM32.@) + */ +HKL WINAPI ImmInstallIMEA( + LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return (HKL)NULL; +} + +/*********************************************************************** + * ImmInstallIMEW (IMM32.@) + */ +HKL WINAPI ImmInstallIMEW( + LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return (HKL)NULL; +} + +/*********************************************************************** + * ImmIsIME (IMM32.@) + */ +BOOL WINAPI ImmIsIME(HKL hkl) +{ + /* hard to implement with XIM */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} + +/*********************************************************************** + * ImmGetIMEFileNameA (IMM32.@) + */ +UINT WINAPI ImmGetIMEFileNameA(HKL hkl, LPSTR lpszFileName, UINT uBufLen) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * ImmGetIMEFileNameW (IMM32.@) + */ +UINT WINAPI ImmGetIMEFileNameW(HKL hkl, LPWSTR lpszFileName, UINT uBufLen) +{ + /* don't need to implement unless use native drivers */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * ImmGetProperty (IMM32.@) + */ +DWORD WINAPI ImmGetProperty(HKL hkl, DWORD fdwIndex) +{ + /* hard to implement with XIM */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * ImmEnumRegisterWordA (IMM32.@) + */ +UINT WINAPI ImmEnumRegisterWordA( + HKL hkl, REGISTERWORDENUMPROCA lpfnEnumProc, + LPCSTR lpszReading, DWORD dwStyle, + LPCSTR lpszRegister, LPVOID lpData) +{ + /* hard to implement with XIM */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * ImmEnumRegisterWordW (IMM32.@) + */ +UINT WINAPI ImmEnumRegisterWordW( + HKL hkl, REGISTERWORDENUMPROCW lpfnEnumProc, + LPCWSTR lpszReading, DWORD dwStyle, + LPCWSTR lpszRegister, LPVOID lpData) +{ + /* hard to implement with XIM */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * ImmGetRegisterWordStyleA (IMM32.@) + */ +UINT WINAPI ImmGetRegisterWordStyleA( + HKL hkl, UINT nItem, LPSTYLEBUFA lpStyleBuf) +{ + /* hard to implement with XIM */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * ImmGetRegisterWordStyleW (IMM32.@) + */ +UINT WINAPI ImmGetRegisterWordStyleW( + HKL hkl, UINT nItem, LPSTYLEBUFW lpStyleBuf) +{ + /* hard to implement with XIM */ + FIXME("(): stub\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; +} + +/*********************************************************************** + * IMM32_HeapAlloc (internal) + */ +LPVOID IMM32_HeapAlloc( DWORD dwFlags, DWORD dwSize ) +{ + return HeapAlloc( GetProcessHeap(), dwFlags, dwSize ); +} + +/*********************************************************************** + * IMM32_HeapReAlloc (internal) + */ +LPVOID IMM32_HeapReAlloc( DWORD dwFlags, LPVOID lpv, DWORD dwSize ) +{ + if ( lpv == NULL ) + return IMM32_HeapAlloc( dwFlags, dwSize ); + return HeapReAlloc( GetProcessHeap(), dwFlags, lpv, dwSize ); +} + +/*********************************************************************** + * IMM32_HeapFree (internal) + */ +void IMM32_HeapFree( LPVOID lpv ) +{ + if ( lpv != NULL ) + HeapFree( GetProcessHeap(), 0, lpv ); +} + + +/*********************************************************************** + * IMM32_strlenAtoW (internal) + */ +INT IMM32_strlenAtoW( LPCSTR lpstr ) +{ + INT len; + + len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, NULL, 0 ); + return ( len > 0 ) ? (len-1) : 0; +} + +/*********************************************************************** + * IMM32_strlenWtoA (internal) + */ +INT IMM32_strlenWtoA( LPCWSTR lpwstr ) +{ + INT len; + + len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1, + NULL, 0, NULL, NULL ); + return ( len > 0 ) ? (len-1) : 0; +} + +/*********************************************************************** + * IMM32_strncpyAtoW (internal) + */ +LPWSTR IMM32_strncpyAtoW( LPWSTR lpwstr, LPCSTR lpstr, INT wbuflen ) +{ + INT len; + + len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, lpwstr, wbuflen ); + if ( len == 0 ) + *lpwstr = 0; + return lpwstr; +} + +/*********************************************************************** + * IMM32_strncpyWtoA (internal) + */ +LPSTR IMM32_strncpyWtoA( LPSTR lpstr, LPCWSTR lpwstr, INT abuflen ) +{ + INT len; + + len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1, + lpstr, abuflen, NULL, NULL ); + if ( len == 0 ) + *lpstr = 0; + return lpstr; +} + +/*********************************************************************** + * IMM32_strdupAtoW (internal) + */ +LPWSTR IMM32_strdupAtoW( LPCSTR lpstr ) +{ + INT len; + LPWSTR lpwstr = NULL; + + len = IMM32_strlenAtoW( lpstr ); + if ( len > 0 ) + { + lpwstr = (LPWSTR)IMM32_HeapAlloc( 0, sizeof(WCHAR)*(len+1) ); + if ( lpwstr != NULL ) + (void)IMM32_strncpyAtoW( lpwstr, lpstr, len+1 ); + } + + return lpwstr; +} + +/*********************************************************************** + * IMM32_strdupWtoA (internal) + */ +LPSTR IMM32_strdupWtoA( LPCWSTR lpwstr ) +{ + INT len; + LPSTR lpstr = NULL; + + len = IMM32_strlenWtoA( lpwstr ); + if ( len > 0 ) + { + lpstr = (LPSTR)IMM32_HeapAlloc( 0, sizeof(CHAR)*(len+1) ); + if ( lpstr != NULL ) + (void)IMM32_strncpyWtoA( lpstr, lpwstr, len+1 ); + } + + return lpstr; +} + + +#define IMM32_MOVEABLEMEM_LOCK_MAX ((DWORD)0xffffffff) + +typedef struct IMM32_tagMOVEABLEMEM +{ + DWORD dwLockCount; + DWORD dwSize; + LPVOID lpvMem; +} IMM32_MOVEABLEMEM; + +/*********************************************************************** + * IMM32_MoveableAlloc (internal) + */ +IMM32_MOVEABLEMEM* IMM32_MoveableAlloc( DWORD dwHeapFlags, DWORD dwHeapSize ) +{ + IMM32_MOVEABLEMEM* lpMoveable; + + lpMoveable = (IMM32_MOVEABLEMEM*) + IMM32_HeapAlloc( 0, sizeof( IMM32_MOVEABLEMEM ) ); + if ( lpMoveable != NULL ) + { + lpMoveable->dwLockCount = 0; + lpMoveable->dwSize = dwHeapSize; + lpMoveable->lpvMem = NULL; + + if ( dwHeapSize > 0 ) + { + lpMoveable->lpvMem = + IMM32_HeapAlloc( dwHeapFlags, dwHeapSize ); + if ( lpMoveable->lpvMem == NULL ) + { + IMM32_HeapFree( lpMoveable ); + lpMoveable = NULL; + } + } + } + + return lpMoveable; +} + +/*********************************************************************** + * IMM32_MoveableFree (internal) + */ +void IMM32_MoveableFree( IMM32_MOVEABLEMEM* lpMoveable ) +{ + IMM32_HeapFree( lpMoveable->lpvMem ); + IMM32_HeapFree( lpMoveable ); +} + +/*********************************************************************** + * IMM32_MoveableReAlloc (internal) + */ +BOOL IMM32_MoveableReAlloc( IMM32_MOVEABLEMEM* lpMoveable, + DWORD dwHeapFlags, DWORD dwHeapSize ) +{ + LPVOID lpv; + + if ( dwHeapSize > 0 ) + { + if ( lpMoveable->dwLockCount > 0 ) + dwHeapFlags |= HEAP_REALLOC_IN_PLACE_ONLY; + lpv = IMM32_HeapReAlloc( dwHeapFlags, + lpMoveable->lpvMem, dwHeapSize ); + if ( lpv == NULL ) + return FALSE; + } + else + { + IMM32_HeapFree( lpMoveable->lpvMem ); + lpv = NULL; + } + + lpMoveable->dwSize = dwHeapSize; + lpMoveable->lpvMem = lpv; + + return TRUE; +} + +/*********************************************************************** + * IMM32_MoveableLock (internal) + */ +LPVOID IMM32_MoveableLock( IMM32_MOVEABLEMEM* lpMoveable ) +{ + if ( lpMoveable->dwLockCount == IMM32_MOVEABLEMEM_LOCK_MAX ) + { + ERR( "lock count is 0xffffffff\n" ); + } + else + { + lpMoveable->dwLockCount ++; + } + + return lpMoveable->lpvMem; +} + +/*********************************************************************** + * IMM32_MoveableUnlock (internal) + */ +BOOL IMM32_MoveableUnlock( IMM32_MOVEABLEMEM* lpMoveable ) +{ + if ( lpMoveable->dwLockCount == 0 ) + return FALSE; + + if ( --lpMoveable->dwLockCount > 0 ) + return TRUE; + + return FALSE; +} + +/*********************************************************************** + * IMM32_MoveableGetLockCount (internal) + */ +DWORD IMM32_MoveableGetLockCount( IMM32_MOVEABLEMEM* lpMoveable ) +{ + return lpMoveable->dwLockCount; +} + +/*********************************************************************** + * IMM32_MoveableGetSize (internal) + */ +DWORD IMM32_MoveableGetSize( IMM32_MOVEABLEMEM* lpMoveable ) +{ + return lpMoveable->dwSize; +} + +/*********************************************************************** + * ImmCreateIMCC (IMM32.@) + */ +HIMCC WINAPI ImmCreateIMCC(DWORD dwSize) +{ + IMM32_MOVEABLEMEM* lpMoveable; + + TRACE("(%lu)\n", dwSize); + + /* implemented but don't need to implement unless use native drivers */ + + lpMoveable = IMM32_MoveableAlloc( HEAP_ZERO_MEMORY, dwSize ); + if ( lpMoveable == NULL ) + { + SetLastError(ERROR_OUTOFMEMORY); + return (HIMCC)NULL; + } + + return (HIMCC)lpMoveable; +} + +/*********************************************************************** + * ImmDestroyIMCC (IMM32.@) + */ +HIMCC WINAPI ImmDestroyIMCC(HIMCC hIMCC) +{ + TRACE("(0x%08x)\n", (unsigned)hIMCC); + + /* implemented but don't need to implement unless use native drivers */ + + IMM32_MoveableFree( (IMM32_MOVEABLEMEM*)hIMCC ); + return (HIMCC)NULL; +} + +/*********************************************************************** + * ImmLockIMCC (IMM32.@) + */ +LPVOID WINAPI ImmLockIMCC(HIMCC hIMCC) +{ + TRACE("(0x%08x)\n", (unsigned)hIMCC); + + /* implemented but don't need to implement unless use native drivers */ + + return IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMCC ); +} + +/*********************************************************************** + * ImmUnlockIMCC (IMM32.@) + */ +BOOL WINAPI ImmUnlockIMCC(HIMCC hIMCC) +{ + TRACE("(0x%08x)\n", (unsigned)hIMCC); + + /* implemented but don't need to implement unless use native drivers */ + + return IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMCC ); +} + +/*********************************************************************** + * ImmGetIMCCLockCount (IMM32.@) + */ +DWORD WINAPI ImmGetIMCCLockCount(HIMCC hIMCC) +{ + TRACE("(0x%08x)\n", (unsigned)hIMCC); + + /* implemented but don't need to implement unless use native drivers */ + + return IMM32_MoveableGetLockCount( (IMM32_MOVEABLEMEM*)hIMCC ); +} + +/*********************************************************************** + * ImmReSizeIMCC (IMM32.@) + */ +HIMCC WINAPI ImmReSizeIMCC(HIMCC hIMCC, DWORD dwSize) +{ + TRACE("(0x%08x,%lu)\n", (unsigned)hIMCC, dwSize); + + /* implemented but don't need to implement unless use native drivers */ + + if ( !IMM32_MoveableReAlloc( (IMM32_MOVEABLEMEM*)hIMCC, + HEAP_ZERO_MEMORY, dwSize ) ) + { + SetLastError(ERROR_OUTOFMEMORY); + return (HIMCC)NULL; + } + + return hIMCC; +} + +/*********************************************************************** + * ImmGetIMCCSize (IMM32.@) + */ +DWORD WINAPI ImmGetIMCCSize(HIMCC hIMCC) +{ + TRACE("(0x%08x)\n", (unsigned)hIMCC); + + /* implemented but don't need to implement unless use native drivers */ + + return IMM32_MoveableGetSize( (IMM32_MOVEABLEMEM*)hIMCC ); +} + + +/*********************************************************************** + * IMM32_DllMain + */ +BOOL WINAPI IMM32_DllMain( + HINSTANCE hInstDLL, + DWORD fdwReason, + LPVOID lpvReserved ) +{ + switch ( fdwReason ) + { + case DLL_PROCESS_ATTACH: + break; + case DLL_PROCESS_DETACH: + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + break; + } + + return TRUE; +} diff --git a/dlls/imm32/imm_private.h b/dlls/imm32/imm_private.h deleted file mode 100644 index 7603fcf2fa0..00000000000 --- a/dlls/imm32/imm_private.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * private header for implementing IMM. - * - * Copyright 2000 Hidenori Takeshima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -typedef struct IMM32_tagTHREADDATA IMM32_THREADDATA; - -struct IMM32_tagTHREADDATA -{ - HWND hwndIME; - HIMC hIMC; -}; - -typedef struct IMM32_tagMOVEABLEMEM IMM32_MOVEABLEMEM; - -/* IME APIs */ - -typedef BOOL (WINAPI *IMM32_pImeInquireA)(LPIMEINFO, LPSTR, LPCSTR); -typedef BOOL (WINAPI *IMM32_pImeInquireW)(LPIMEINFO, LPWSTR, LPCWSTR); - -typedef BOOL (WINAPI *IMM32_pImeConfigureA)(HKL, HWND, DWORD, LPVOID); -typedef BOOL (WINAPI *IMM32_pImeConfigureW)(HKL, HWND, DWORD, LPVOID); -typedef DWORD (WINAPI *IMM32_pImeConversionListA) - (HIMC, LPCSTR, LPCANDIDATELIST, DWORD, UINT); -typedef DWORD (WINAPI *IMM32_pImeConversionListW) - (HIMC, LPCWSTR, LPCANDIDATELIST, DWORD, UINT); -typedef BOOL (WINAPI *IMM32_pImeDestroy)(UINT); -typedef UINT (WINAPI *IMM32_pImeEnumRegisterWordA) - (REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID); -typedef UINT (WINAPI *IMM32_pImeEnumRegisterWordW) - (REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID); -typedef UINT (WINAPI *IMM32_pImeGetRegisterWordStyleA)(UINT, LPSTYLEBUFA); -typedef UINT (WINAPI *IMM32_pImeGetRegisterWordStyleW)(UINT, LPSTYLEBUFW); -typedef LRESULT (WINAPI *IMM32_pImeEscapeA)(HIMC, UINT, LPVOID); -typedef LRESULT (WINAPI *IMM32_pImeEscapeW)(HIMC, UINT, LPVOID); -typedef BOOL (WINAPI *IMM32_pImeProcessKey)(HIMC, UINT, LPARAM, CONST LPBYTE); -typedef BOOL (WINAPI *IMM32_pImeRegisterWordA)(LPCSTR, DWORD, LPCSTR); -typedef BOOL (WINAPI *IMM32_pImeRegisterWordW)(LPCWSTR, DWORD, LPCWSTR); -typedef BOOL (WINAPI *IMM32_pImeSelect)(HIMC, BOOL); -typedef BOOL (WINAPI *IMM32_pImeSetActiveContext)(HIMC, BOOL); -typedef BOOL (WINAPI *IMM32_pImeSetCompositionStringA) - (HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); -typedef BOOL (WINAPI *IMM32_pImeSetCompositionStringW) - (HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); -typedef UINT (WINAPI *IMM32_pImeToAsciiEx) - (UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC); -typedef BOOL (WINAPI *IMM32_pImeUnregisterWordA)(LPCSTR, DWORD, LPCSTR); -typedef BOOL (WINAPI *IMM32_pImeUnregisterWordW)(LPCWSTR, DWORD, LPCWSTR); -typedef BOOL (WINAPI *IMM32_pNotifyIME)(HIMC, DWORD, DWORD, DWORD); - -/* for Win98 and later */ -typedef DWORD (WINAPI *IMM32_pImeGetImeMenuItemsA) - (HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD); -typedef DWORD (WINAPI *IMM32_pImeGetImeMenuItemsW) - (HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD); - -struct IMM32_IME_EXPORTED_HANDLERS -{ - union - { - IMM32_pImeInquireA A; - IMM32_pImeInquireW W; - } pImeInquire; - - union - { - IMM32_pImeConfigureA A; - IMM32_pImeConfigureW W; - } pImeConfigure; - union - { - IMM32_pImeConversionListA A; - IMM32_pImeConversionListW W; - } pImeConversionList; - IMM32_pImeDestroy pImeDestroy; - union - { - IMM32_pImeEnumRegisterWordA A; - IMM32_pImeEnumRegisterWordW W; - } pImeEnumRegisterWord; - union - { - IMM32_pImeGetRegisterWordStyleA A; - IMM32_pImeGetRegisterWordStyleW W; - } pImeGetRegisterWordStyle; - union - { - IMM32_pImeEscapeA A; - IMM32_pImeEscapeW W; - } pImeEscape; - IMM32_pImeProcessKey pImeProcessKey; - union - { - IMM32_pImeRegisterWordA A; - IMM32_pImeRegisterWordW W; - } pImeRegisterWord; - IMM32_pImeSelect pImeSelect; - IMM32_pImeSetActiveContext pImeSetActiveContext; - union - { - IMM32_pImeSetCompositionStringA A; - IMM32_pImeSetCompositionStringW W; - } pImeSetCompositionString; - IMM32_pImeToAsciiEx pImeToAsciiEx; - union - { - IMM32_pImeUnregisterWordA A; - IMM32_pImeUnregisterWordW W; - } pImeUnregisterWord; - IMM32_pNotifyIME pNotifyIME; - - /* for Win98 and later */ - union - { - IMM32_pImeGetImeMenuItemsA A; - IMM32_pImeGetImeMenuItemsW W; - } pImeGetImeMenuItems; -}; - -typedef struct IMM32_tagIMEKL IMM32_IMEKL; -typedef struct IMM32_tagIMC IMM32_IMC; - -/* Win9x DDK says the UI class name can be up to 16 TCHARs. */ -#define IMM32_UICLASSNAME_MAX 16 - -struct IMM32_tagIMEKL -{ - IMM32_IMEKL* pNext; - HKL hkl; - BOOL fUnicode; - HINSTANCE hInstIME; - LPSTR pszIMEFileName; - IMEINFO imeinfo; - struct IMM32_IME_EXPORTED_HANDLERS handlers; - union - { - CHAR A[IMM32_UICLASSNAME_MAX]; - WCHAR W[IMM32_UICLASSNAME_MAX]; - } UIClassName; -}; - -struct IMM32_tagIMC -{ - INPUTCONTEXT context; - const IMM32_IMEKL* pkl; - BOOL fSelected; -}; - - - - - -/* main.c */ -LPVOID IMM32_HeapAlloc( DWORD dwFlags, DWORD dwSize ); -LPVOID IMM32_HeapReAlloc( DWORD dwFlags, LPVOID lpv, DWORD dwSize ); -void IMM32_HeapFree( LPVOID lpv ); -IMM32_THREADDATA* IMM32_GetThreadData( void ); -HIMC IMM32_GetDefaultContext( void ); -HWND IMM32_GetDefaultIMEWnd( void ); -void IMM32_Lock( void ); -void IMM32_Unlock( void ); - -/* memory.c */ -IMM32_MOVEABLEMEM* IMM32_MoveableAlloc( DWORD dwHeapFlags, DWORD dwHeapSize ); -void IMM32_MoveableFree( IMM32_MOVEABLEMEM* lpMoveable ); -BOOL IMM32_MoveableReAlloc( IMM32_MOVEABLEMEM* lpMoveable, - DWORD dwHeapFlags, DWORD dwHeapSize ); -LPVOID IMM32_MoveableLock( IMM32_MOVEABLEMEM* lpMoveable ); -BOOL IMM32_MoveableUnlock( IMM32_MOVEABLEMEM* lpMoveable ); -DWORD IMM32_MoveableGetLockCount( IMM32_MOVEABLEMEM* lpMoveable ); -DWORD IMM32_MoveableGetSize( IMM32_MOVEABLEMEM* lpMoveable ); - -/* string.c */ -INT IMM32_strlenAtoW( LPCSTR lpstr ); -INT IMM32_strlenWtoA( LPCWSTR lpwstr ); -LPWSTR IMM32_strncpyAtoW( LPWSTR lpwstr, LPCSTR lpstr, INT wbuflen ); -LPSTR IMM32_strncpyWtoA( LPSTR lpstr, LPCWSTR lpwstr, INT abuflen ); -LPWSTR IMM32_strdupAtoW( LPCSTR lpstr ); -LPSTR IMM32_strdupWtoA( LPCWSTR lpwstr ); - -/* imewnd.c */ -BOOL IMM32_RegisterIMEWndClass( HINSTANCE hInstDLL ); -void IMM32_UnregisterIMEWndClass( HINSTANCE hInstDLL ); -HWND IMM32_CreateDefaultIMEWnd( void ); - -/* imekl.c */ -const IMM32_IMEKL* IMM32_GetIME( HKL hkl ); -void IMM32_UnloadAllIMEs( void ); - -/* imc.c */ -IMM32_IMC* IMM32_LockIMC( HIMC hIMC ); -BOOL IMM32_UnlockIMC( HIMC hIMC ); - - diff --git a/dlls/imm32/immddk.h b/dlls/imm32/immddk.h index 662a8c215d3..e2f1780ab6c 100644 --- a/dlls/imm32/immddk.h +++ b/dlls/imm32/immddk.h @@ -23,34 +23,6 @@ #include "imm.h" -#define NULLIMC ((HIMC)0) - -/* offsets for WndExtra */ -#define IMMGWL_IMC 0 -#define IMMGWL_PRIVATE (sizeof(LONG)) - -/* INPUTCONTEXT.fdwInit */ -#define INIT_STATUSWNDPOS 0x00000001 -#define INIT_CONVERSION 0x00000002 -#define INIT_SENTENCE 0x00000004 -#define INIT_LOGFONT 0x00000008 -#define INIT_COMPFORM 0x00000010 -#define INIT_SOFTKBDPOS 0x00000020 - -/* IMEINFO.fdwProperty (low-order word) */ -#define IME_PROP_END_UNLOAD 0x00000001 -#define IME_PROP_KBD_CHAR_FIRST 0x00000002 -#define IME_PROP_IGNORE_UPKEYS 0x00000004 -#define IME_PROP_NEED_ALTKEY 0x00000008 -#define IME_PROP_NO_KEYS_ON_CLOSE 0x00000010 -/* IMEINFO.fdwProperty (high-order word) */ -#define IME_PROP_AT_CARET 0x00010000 -#define IME_PROP_SPECIAL_UI 0x00020000 -#define IME_PROP_CANDLIST_START_FROM_1 0x00040000 -#define IME_PROP_UNICODE 0x00080000 -#define IME_PROP_COMPLETE_ON_UNSELECT 0x00100000 - - /*** IMM and IME Structures ***/ typedef struct tagINPUTCONTEXT { diff --git a/dlls/imm32/main.c b/dlls/imm32/main.c deleted file mode 100644 index 0fa8f0a8273..00000000000 --- a/dlls/imm32/main.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * The entry point of IMM32.DLL. - * - * Copyright 2000 Hidenori Takeshima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include "winbase.h" -#include "windef.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "immddk.h" - -#include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imm); - -#include "imm_private.h" - -static HANDLE IMM32_hHeap; -static DWORD IMM32_dwTLSIndex; -static CRITICAL_SECTION IMM32_csIMM; - -static BOOL IMM32_InitProcessMem( void ); -static void IMM32_CleanupProcessMem( void ); -static void IMM32_InitThreadData( void ); -static void IMM32_CleanupThreadData( void ); - - -/*********************************************************************** - * IMM32_DllMain - */ -BOOL WINAPI IMM32_DllMain( - HINSTANCE hInstDLL, - DWORD fdwReason, - LPVOID lpvReserved ) -{ - switch ( fdwReason ) - { - case DLL_PROCESS_ATTACH: - IMM32_InitProcessMem(); - IMM32_RegisterIMEWndClass( hInstDLL ); - break; - case DLL_PROCESS_DETACH: - IMM32_UnloadAllIMEs(); - IMM32_UnregisterIMEWndClass( hInstDLL ); - IMM32_CleanupProcessMem(); - break; - case DLL_THREAD_ATTACH: - IMM32_InitThreadData(); - break; - case DLL_THREAD_DETACH: - IMM32_CleanupThreadData(); - break; - } - - return TRUE; -} - -static BOOL IMM32_InitProcessMem( void ) -{ - IMM32_hHeap = (HANDLE)NULL; - IMM32_dwTLSIndex = (DWORD)0xffffffff; - - IMM32_hHeap = HeapCreate( 0, 0x10000, 0 ); - if ( IMM32_hHeap == (HANDLE)NULL ) - { - ERR( "cannot allocate heap for IMM32.\n" ); - return FALSE; - } - - IMM32_dwTLSIndex = TlsAlloc(); - if ( IMM32_dwTLSIndex == (DWORD)0xffffffff ) - { - ERR( "cannot allocate a TLS for IMM.\n" ); - return FALSE; - } - - InitializeCriticalSection( &IMM32_csIMM ); - - return TRUE; -} - -static void IMM32_CleanupProcessMem( void ) -{ - DeleteCriticalSection( &IMM32_csIMM ); - - if ( IMM32_dwTLSIndex != (DWORD)0xffffffff ) - { - TlsFree( IMM32_dwTLSIndex ); - IMM32_dwTLSIndex = (DWORD)0xffffffff; - } - - if ( IMM32_hHeap != (HANDLE)NULL ) - { - (void)HeapDestroy( IMM32_hHeap ); - IMM32_hHeap = (HANDLE)NULL; - } -} - -LPVOID IMM32_HeapAlloc( DWORD dwFlags, DWORD dwSize ) -{ - return HeapAlloc( IMM32_hHeap, dwFlags, dwSize ); -} - -LPVOID IMM32_HeapReAlloc( DWORD dwFlags, LPVOID lpv, DWORD dwSize ) -{ - return HeapReAlloc( IMM32_hHeap, dwFlags, lpv, dwSize ); -} - -void IMM32_HeapFree( LPVOID lpv ) -{ - if ( lpv != NULL ) - HeapFree( IMM32_hHeap, 0, lpv ); -} - - -static void IMM32_InitThreadData( void ) -{ - TlsSetValue( IMM32_dwTLSIndex, NULL ); -} - -static void IMM32_CleanupThreadData( void ) -{ - IMM32_THREADDATA* pData; - - pData = (IMM32_THREADDATA*)TlsGetValue( IMM32_dwTLSIndex ); - if ( pData != NULL ) - { - /* Destroy Thread-local Data. */ - if ( pData->hwndIME != (HWND)NULL ) - DestroyWindow( pData->hwndIME ); - if ( pData->hIMC != NULLIMC ) - ImmDestroyContext( pData->hIMC ); - - IMM32_HeapFree( pData ); - TlsSetValue( IMM32_dwTLSIndex, NULL ); - } -} - -IMM32_THREADDATA* IMM32_GetThreadData( void ) -{ - IMM32_THREADDATA* pData; - - pData = (IMM32_THREADDATA*)TlsGetValue( IMM32_dwTLSIndex ); - if ( pData != NULL ) - return pData; - - pData = (IMM32_THREADDATA*) - IMM32_HeapAlloc( 0, sizeof(IMM32_THREADDATA) ); - if ( pData == NULL ) - return NULL; - - /* Initialize Thread-local Data. */ - pData->hwndIME = (HWND)NULL; - pData->hIMC = NULLIMC; - - TlsSetValue( IMM32_dwTLSIndex, pData ); - - return pData; -} - -HIMC IMM32_GetDefaultContext( void ) -{ - IMM32_THREADDATA* pData; - - pData = IMM32_GetThreadData(); - if ( pData == NULL ) - return NULLIMC; - if ( pData->hIMC == NULLIMC ) - pData->hIMC = ImmCreateContext(); - - return pData->hIMC; -} - -HWND IMM32_GetDefaultIMEWnd( void ) -{ - IMM32_THREADDATA* pData; - - pData = IMM32_GetThreadData(); - if ( pData == NULL ) - return NULLIMC; - if ( pData->hwndIME == (HWND)NULL ) - pData->hwndIME = IMM32_CreateDefaultIMEWnd(); - - return pData->hwndIME; -} - - -void IMM32_Lock( void ) -{ - EnterCriticalSection( &IMM32_csIMM ); -} - -void IMM32_Unlock( void ) -{ - LeaveCriticalSection( &IMM32_csIMM ); -} diff --git a/dlls/imm32/memory.c b/dlls/imm32/memory.c deleted file mode 100644 index 375caae0e4a..00000000000 --- a/dlls/imm32/memory.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * This file implements 'moveable' memory block. - * - * Copyright 2000 Hidenori Takeshima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include "winbase.h" -#include "windef.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "immddk.h" -#include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imm); - -#include "imm_private.h" - -#define IMM32_MOVEABLEMEM_LOCK_MAX ((DWORD)0xffffffff) - -struct IMM32_tagMOVEABLEMEM -{ - DWORD dwLockCount; - DWORD dwSize; - LPVOID lpvMem; -}; - -IMM32_MOVEABLEMEM* IMM32_MoveableAlloc( DWORD dwHeapFlags, DWORD dwHeapSize ) -{ - IMM32_MOVEABLEMEM* lpMoveable; - - lpMoveable = (IMM32_MOVEABLEMEM*) - IMM32_HeapAlloc( 0, sizeof( IMM32_MOVEABLEMEM ) ); - if ( lpMoveable != NULL ) - { - lpMoveable->dwLockCount = 0; - lpMoveable->dwSize = dwHeapSize; - lpMoveable->lpvMem = NULL; - - if ( dwHeapSize > 0 ) - { - lpMoveable->lpvMem = - IMM32_HeapAlloc( dwHeapFlags, dwHeapSize ); - if ( lpMoveable->lpvMem == NULL ) - { - IMM32_HeapFree( lpMoveable ); - lpMoveable = NULL; - } - } - } - - return lpMoveable; -} - -void IMM32_MoveableFree( IMM32_MOVEABLEMEM* lpMoveable ) -{ - IMM32_HeapFree( lpMoveable->lpvMem ); - IMM32_HeapFree( lpMoveable ); -} - -BOOL IMM32_MoveableReAlloc( IMM32_MOVEABLEMEM* lpMoveable, - DWORD dwHeapFlags, DWORD dwHeapSize ) -{ - LPVOID lpv; - - if ( dwHeapSize > 0 ) - { - if ( lpMoveable->dwLockCount > 0 ) - dwHeapFlags |= HEAP_REALLOC_IN_PLACE_ONLY; - lpv = IMM32_HeapReAlloc( dwHeapFlags, - lpMoveable->lpvMem, dwHeapSize ); - if ( lpv == NULL ) - return FALSE; - } - else - { - IMM32_HeapFree( lpMoveable->lpvMem ); - lpv = NULL; - } - - lpMoveable->dwSize = dwHeapSize; - lpMoveable->lpvMem = lpv; - - return TRUE; -} - -LPVOID IMM32_MoveableLock( IMM32_MOVEABLEMEM* lpMoveable ) -{ - if ( lpMoveable->dwLockCount == IMM32_MOVEABLEMEM_LOCK_MAX ) - { - ERR( "lock count is 0xffffffff\n" ); - } - else - { - lpMoveable->dwLockCount ++; - } - - return lpMoveable->lpvMem; -} - -BOOL IMM32_MoveableUnlock( IMM32_MOVEABLEMEM* lpMoveable ) -{ - if ( lpMoveable->dwLockCount == 0 ) - return FALSE; - - if ( --lpMoveable->dwLockCount > 0 ) - return TRUE; - - return FALSE; -} - -DWORD IMM32_MoveableGetLockCount( IMM32_MOVEABLEMEM* lpMoveable ) -{ - return lpMoveable->dwLockCount; -} - -DWORD IMM32_MoveableGetSize( IMM32_MOVEABLEMEM* lpMoveable ) -{ - return lpMoveable->dwSize; -} - - - -/*********************************************************************** - * ImmCreateIMCC (IMM32.@) - * - * Create IMCC(IMC Component). - */ -HIMCC WINAPI ImmCreateIMCC(DWORD dwSize) -{ - IMM32_MOVEABLEMEM* lpMoveable; - - TRACE("(%lu)\n", dwSize); - - lpMoveable = IMM32_MoveableAlloc( HEAP_ZERO_MEMORY, dwSize ); - if ( lpMoveable == NULL ) - { - SetLastError(ERROR_OUTOFMEMORY); - return (HIMCC)NULL; - } - - return (HIMCC)lpMoveable; -} - -/*********************************************************************** - * ImmDestroyIMCC (IMM32.@) - * - * Destroy IMCC(IMC Component). - */ -HIMCC WINAPI ImmDestroyIMCC(HIMCC hIMCC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMCC); - - IMM32_MoveableFree( (IMM32_MOVEABLEMEM*)hIMCC ); - return (HIMCC)NULL; -} - -/*********************************************************************** - * ImmLockIMCC (IMM32.@) - */ -LPVOID WINAPI ImmLockIMCC(HIMCC hIMCC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMCC); - - return IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMCC ); -} - -/*********************************************************************** - * ImmUnlockIMCC (IMM32.@) - */ -BOOL WINAPI ImmUnlockIMCC(HIMCC hIMCC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMCC); - - return IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMCC ); -} - -/*********************************************************************** - * ImmGetIMCCLockCount (IMM32.@) - */ -DWORD WINAPI ImmGetIMCCLockCount(HIMCC hIMCC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMCC); - - return IMM32_MoveableGetLockCount( (IMM32_MOVEABLEMEM*)hIMCC ); -} - -/*********************************************************************** - * ImmReSizeIMCC (IMM32.@) - */ -HIMCC WINAPI ImmReSizeIMCC(HIMCC hIMCC, DWORD dwSize) -{ - TRACE("(0x%08x,%lu)\n", (unsigned)hIMCC, dwSize); - - if ( !IMM32_MoveableReAlloc( (IMM32_MOVEABLEMEM*)hIMCC, - HEAP_ZERO_MEMORY, dwSize ) ) - { - SetLastError(ERROR_OUTOFMEMORY); - return (HIMCC)NULL; - } - - return hIMCC; -} - -/*********************************************************************** - * ImmGetIMCCSize (IMM32.@) - */ -DWORD WINAPI ImmGetIMCCSize(HIMCC hIMCC) -{ - TRACE("(0x%08x)\n", (unsigned)hIMCC); - - return IMM32_MoveableGetSize( (IMM32_MOVEABLEMEM*)hIMCC ); -} - - diff --git a/dlls/imm32/string.c b/dlls/imm32/string.c deleted file mode 100644 index a1ae2978bb3..00000000000 --- a/dlls/imm32/string.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Helper functions for ANSI<->UNICODE string conversion - * - * Copyright 2000 Hidenori Takeshima - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include "winbase.h" -#include "windef.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "winnls.h" -#include "immddk.h" -#include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imm); - -#include "imm_private.h" - - -INT IMM32_strlenAtoW( LPCSTR lpstr ) -{ - INT len; - - len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, NULL, 0 ); - return ( len > 0 ) ? (len-1) : 0; -} - -INT IMM32_strlenWtoA( LPCWSTR lpwstr ) -{ - INT len; - - len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1, - NULL, 0, NULL, NULL ); - return ( len > 0 ) ? (len-1) : 0; -} - -LPWSTR IMM32_strncpyAtoW( LPWSTR lpwstr, LPCSTR lpstr, INT wbuflen ) -{ - INT len; - - len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, lpwstr, wbuflen ); - if ( len == 0 ) - *lpwstr = 0; - return lpwstr; -} - -LPSTR IMM32_strncpyWtoA( LPSTR lpstr, LPCWSTR lpwstr, INT abuflen ) -{ - INT len; - - len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1, - lpstr, abuflen, NULL, NULL ); - if ( len == 0 ) - *lpstr = 0; - return lpstr; -} - -LPWSTR IMM32_strdupAtoW( LPCSTR lpstr ) -{ - INT len; - LPWSTR lpwstr = NULL; - - len = IMM32_strlenAtoW( lpstr ); - if ( len > 0 ) - { - lpwstr = (LPWSTR)IMM32_HeapAlloc( 0, sizeof(WCHAR)*(len+1) ); - if ( lpwstr != NULL ) - (void)IMM32_strncpyAtoW( lpwstr, lpstr, len+1 ); - } - - return lpwstr; -} - -LPSTR IMM32_strdupWtoA( LPCWSTR lpwstr ) -{ - INT len; - LPSTR lpstr = NULL; - - len = IMM32_strlenWtoA( lpwstr ); - if ( len > 0 ) - { - lpstr = (LPSTR)IMM32_HeapAlloc( 0, sizeof(CHAR)*(len+1) ); - if ( lpstr != NULL ) - (void)IMM32_strncpyWtoA( lpstr, lpwstr, len+1 ); - } - - return lpstr; -}