mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 19:26:32 +00:00
[IMM32]
* Sync with Wine 1.7.27. CORE-8540 svn path=/trunk/; revision=64371
This commit is contained in:
+173
-76
@@ -35,6 +35,7 @@
|
||||
#include <winnls.h>
|
||||
#include <winreg.h>
|
||||
#include <wine/list.h>
|
||||
#include <wine/unicode.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(imm);
|
||||
|
||||
@@ -75,8 +76,11 @@ typedef struct tagInputContextData
|
||||
|
||||
ImmHkl *immKbd;
|
||||
UINT lastVK;
|
||||
DWORD magic;
|
||||
} InputContextData;
|
||||
|
||||
#define WINE_IMC_VALID_MAGIC 0x56434D49
|
||||
|
||||
typedef struct _tagTRANSMSG {
|
||||
UINT message;
|
||||
WPARAM wParam;
|
||||
@@ -243,35 +247,36 @@ static void IMM_FreeThreadData(void)
|
||||
}
|
||||
}
|
||||
|
||||
static HMODULE LoadDefaultWineIME(void)
|
||||
static HMODULE load_graphics_driver(void)
|
||||
{
|
||||
char buffer[MAX_PATH], libname[32], *name, *next;
|
||||
HMODULE module = 0;
|
||||
static const WCHAR display_device_guid_propW[] = {
|
||||
'_','_','w','i','n','e','_','d','i','s','p','l','a','y','_',
|
||||
'd','e','v','i','c','e','_','g','u','i','d',0 };
|
||||
static const WCHAR key_pathW[] = {
|
||||
'S','y','s','t','e','m','\\',
|
||||
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
||||
'C','o','n','t','r','o','l','\\',
|
||||
'V','i','d','e','o','\\','{',0};
|
||||
static const WCHAR displayW[] = {'}','\\','0','0','0','0',0};
|
||||
static const WCHAR driverW[] = {'G','r','a','p','h','i','c','s','D','r','i','v','e','r',0};
|
||||
|
||||
HMODULE ret = 0;
|
||||
HKEY hkey;
|
||||
DWORD size;
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR key[(sizeof(key_pathW) + sizeof(displayW)) / sizeof(WCHAR) + 40];
|
||||
UINT guid_atom = HandleToULong( GetPropW( GetDesktopWindow(), display_device_guid_propW ));
|
||||
|
||||
TRACE("Attempting to fall back to wine default IME\n");
|
||||
|
||||
strcpy( buffer, "x11" ); /* default value */
|
||||
/* @@ Wine registry key: HKCU\Software\Wine\Drivers */
|
||||
if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Drivers", &hkey ))
|
||||
{
|
||||
DWORD type, count = sizeof(buffer);
|
||||
RegQueryValueExA( hkey, "Ime", 0, &type, (LPBYTE) buffer, &count );
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
name = buffer;
|
||||
while (name)
|
||||
{
|
||||
next = strchr( name, ',' );
|
||||
if (next) *next++ = 0;
|
||||
|
||||
snprintf( libname, sizeof(libname), "wine%s.drv", name );
|
||||
if ((module = LoadLibraryA( libname )) != 0) break;
|
||||
name = next;
|
||||
}
|
||||
|
||||
return module;
|
||||
if (!guid_atom) return 0;
|
||||
memcpy( key, key_pathW, sizeof(key_pathW) );
|
||||
if (!GlobalGetAtomNameW( guid_atom, key + strlenW(key), 40 )) return 0;
|
||||
strcatW( key, displayW );
|
||||
if (RegOpenKeyW( HKEY_LOCAL_MACHINE, key, &hkey )) return 0;
|
||||
size = sizeof(path);
|
||||
if (!RegQueryValueExW( hkey, driverW, NULL, NULL, (BYTE *)path, &size )) ret = LoadLibraryW( path );
|
||||
RegCloseKey( hkey );
|
||||
TRACE( "%s %p\n", debugstr_w(path), ret );
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ImmHkl loading and freeing */
|
||||
@@ -294,8 +299,7 @@ static ImmHkl *IMM_GetImmHkl(HKL hkl)
|
||||
|
||||
ptr->hkl = hkl;
|
||||
if (ImmGetIMEFileNameW(hkl, filename, MAX_PATH)) ptr->hIME = LoadLibraryW(filename);
|
||||
if (!ptr->hIME)
|
||||
ptr->hIME = LoadDefaultWineIME();
|
||||
if (!ptr->hIME) ptr->hIME = load_graphics_driver();
|
||||
if (ptr->hIME)
|
||||
{
|
||||
LOAD_FUNCPTR(ImeInquire);
|
||||
@@ -452,16 +456,34 @@ static HIMCC ImmCreateBlankCompStr(void)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static InputContextData* get_imc_data(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
|
||||
if (hIMC == NULL)
|
||||
return NULL;
|
||||
|
||||
if(IsBadReadPtr(data, sizeof(InputContextData)) || data->magic != WINE_IMC_VALID_MAGIC)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return NULL;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ImmAssociateContext (IMM32.@)
|
||||
*/
|
||||
HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
|
||||
{
|
||||
HIMC old = NULL;
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p):\n", hWnd, hIMC);
|
||||
|
||||
if(hIMC && !data)
|
||||
return NULL;
|
||||
|
||||
if (!IMM_GetThreadData()->defaultContext)
|
||||
IMM_GetThreadData()->defaultContext = ImmCreateContext();
|
||||
|
||||
@@ -642,6 +664,7 @@ HIMC WINAPI ImmCreateContext(void)
|
||||
InputContextData *new_context;
|
||||
LPGUIDELINE gl;
|
||||
LPCANDIDATEINFO ci;
|
||||
int i;
|
||||
|
||||
new_context = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(InputContextData));
|
||||
|
||||
@@ -669,9 +692,15 @@ HIMC WINAPI ImmCreateContext(void)
|
||||
gl->dwSize = sizeof(GUIDELINE);
|
||||
ImmUnlockIMCC(new_context->IMC.hGuideLine);
|
||||
|
||||
for (i = 0; i < sizeof(new_context->IMC.cfCandForm) / sizeof(CANDIDATEFORM); i++)
|
||||
new_context->IMC.cfCandForm[i].dwIndex = ~0u;
|
||||
|
||||
/* Initialize the IME Private */
|
||||
new_context->IMC.hPrivate = ImmCreateIMCC(new_context->immKbd->imeInfo.dwPrivateDataSize);
|
||||
|
||||
new_context->IMC.fdwConversion = new_context->immKbd->imeInfo.fdwConversionCaps;
|
||||
new_context->IMC.fdwSentence = new_context->immKbd->imeInfo.fdwSentenceCaps;
|
||||
|
||||
if (!new_context->immKbd->pImeSelect(new_context, TRUE))
|
||||
{
|
||||
TRACE("Selection of IME failed\n");
|
||||
@@ -683,29 +712,32 @@ HIMC WINAPI ImmCreateContext(void)
|
||||
new_context->immKbd->uSelected++;
|
||||
TRACE("Created context %p\n",new_context);
|
||||
|
||||
new_context->magic = WINE_IMC_VALID_MAGIC;
|
||||
return new_context;
|
||||
}
|
||||
|
||||
static BOOL IMM_DestroyContext(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("Destroying %p\n",hIMC);
|
||||
|
||||
if (hIMC)
|
||||
{
|
||||
data->immKbd->uSelected --;
|
||||
data->immKbd->pImeSelect(hIMC, FALSE);
|
||||
SendMessageW(data->IMC.hWnd, WM_IME_SELECT, FALSE, (LPARAM)GetKeyboardLayout(0));
|
||||
if (!data)
|
||||
return FALSE;
|
||||
|
||||
ImmDestroyIMCC(data->IMC.hCompStr);
|
||||
ImmDestroyIMCC(data->IMC.hCandInfo);
|
||||
ImmDestroyIMCC(data->IMC.hGuideLine);
|
||||
ImmDestroyIMCC(data->IMC.hPrivate);
|
||||
ImmDestroyIMCC(data->IMC.hMsgBuf);
|
||||
data->immKbd->uSelected --;
|
||||
data->immKbd->pImeSelect(hIMC, FALSE);
|
||||
SendMessageW(data->IMC.hWnd, WM_IME_SELECT, FALSE, (LPARAM)GetKeyboardLayout(0));
|
||||
|
||||
ImmDestroyIMCC(data->IMC.hCompStr);
|
||||
ImmDestroyIMCC(data->IMC.hCandInfo);
|
||||
ImmDestroyIMCC(data->IMC.hGuideLine);
|
||||
ImmDestroyIMCC(data->IMC.hPrivate);
|
||||
ImmDestroyIMCC(data->IMC.hMsgBuf);
|
||||
|
||||
data->magic = 0;
|
||||
HeapFree(GetProcessHeap(),0,data);
|
||||
|
||||
HeapFree(GetProcessHeap(),0,data);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -885,7 +917,7 @@ DWORD WINAPI ImmGetCandidateListA(
|
||||
HIMC hIMC, DWORD dwIndex,
|
||||
LPCANDIDATELIST lpCandList, DWORD dwBufLen)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
LPCANDIDATEINFO candinfo;
|
||||
LPCANDIDATELIST candlist;
|
||||
DWORD ret = 0;
|
||||
@@ -924,7 +956,7 @@ done:
|
||||
DWORD WINAPI ImmGetCandidateListCountA(
|
||||
HIMC hIMC, LPDWORD lpdwListCount)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
LPCANDIDATEINFO candinfo;
|
||||
DWORD ret, count;
|
||||
|
||||
@@ -956,7 +988,7 @@ DWORD WINAPI ImmGetCandidateListCountA(
|
||||
DWORD WINAPI ImmGetCandidateListCountW(
|
||||
HIMC hIMC, LPDWORD lpdwListCount)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
LPCANDIDATEINFO candinfo;
|
||||
DWORD ret, count;
|
||||
|
||||
@@ -989,7 +1021,7 @@ DWORD WINAPI ImmGetCandidateListW(
|
||||
HIMC hIMC, DWORD dwIndex,
|
||||
LPCANDIDATELIST lpCandList, DWORD dwBufLen)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
LPCANDIDATEINFO candinfo;
|
||||
LPCANDIDATELIST candlist;
|
||||
DWORD ret = 0;
|
||||
@@ -1028,7 +1060,7 @@ done:
|
||||
BOOL WINAPI ImmGetCandidateWindow(
|
||||
HIMC hIMC, DWORD dwIndex, LPCANDIDATEFORM lpCandidate)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("%p, %d, %p\n", hIMC, dwIndex, lpCandidate);
|
||||
|
||||
@@ -1038,6 +1070,9 @@ BOOL WINAPI ImmGetCandidateWindow(
|
||||
if ( dwIndex >= (sizeof(data->IMC.cfCandForm) / sizeof(CANDIDATEFORM)) )
|
||||
return FALSE;
|
||||
|
||||
if (data->IMC.cfCandForm[dwIndex].dwIndex != dwIndex)
|
||||
return FALSE;
|
||||
|
||||
*lpCandidate = data->IMC.cfCandForm[dwIndex];
|
||||
|
||||
return TRUE;
|
||||
@@ -1068,7 +1103,7 @@ BOOL WINAPI ImmGetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf)
|
||||
*/
|
||||
BOOL WINAPI ImmGetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p):\n", hIMC, lplf);
|
||||
|
||||
@@ -1247,7 +1282,7 @@ static LONG ImmGetCompositionStringT( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf,
|
||||
DWORD dwBufLen, BOOL unicode)
|
||||
{
|
||||
LONG rc = 0;
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
LPCOMPOSITIONSTRING compstr;
|
||||
LPBYTE compdata;
|
||||
|
||||
@@ -1359,7 +1394,7 @@ LONG WINAPI ImmGetCompositionStringW(
|
||||
*/
|
||||
BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p)\n", hIMC, lpCompForm);
|
||||
|
||||
@@ -1367,7 +1402,7 @@ BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)
|
||||
return FALSE;
|
||||
|
||||
*lpCompForm = data->IMC.cfCompForm;
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -1486,7 +1521,7 @@ DWORD WINAPI ImmGetConversionListW(
|
||||
BOOL WINAPI ImmGetConversionStatus(
|
||||
HIMC hIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("%p %p %p\n", hIMC, lpfdwConversion, lpfdwSentence);
|
||||
|
||||
@@ -1526,6 +1561,8 @@ UINT WINAPI ImmGetDescriptionA(
|
||||
|
||||
/* find out how many characters in the unicode buffer */
|
||||
len = ImmGetDescriptionW( hKL, NULL, 0 );
|
||||
if (!len)
|
||||
return 0;
|
||||
|
||||
/* allocate a buffer of that size */
|
||||
buf = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof (WCHAR) );
|
||||
@@ -1541,7 +1578,10 @@ UINT WINAPI ImmGetDescriptionA(
|
||||
|
||||
HeapFree( GetProcessHeap(), 0, buf );
|
||||
|
||||
return len;
|
||||
if (len == 0)
|
||||
return 0;
|
||||
|
||||
return len - 1;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -1553,6 +1593,7 @@ UINT WINAPI ImmGetDescriptionW(HKL hKL, LPWSTR lpszDescription, UINT uBufLen)
|
||||
|
||||
FIXME("(%p, %p, %d): semi stub\n", hKL, lpszDescription, uBufLen);
|
||||
|
||||
if (!hKL) return 0;
|
||||
if (!uBufLen) return lstrlenW( name );
|
||||
lstrcpynW( lpszDescription, name, uBufLen );
|
||||
return lstrlenW( lpszDescription );
|
||||
@@ -1667,7 +1708,7 @@ UINT WINAPI ImmGetIMEFileNameW(HKL hKL, LPWSTR lpszFileName, UINT uBufLen)
|
||||
*/
|
||||
BOOL WINAPI ImmGetOpenStatus(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
static int i;
|
||||
|
||||
if (!data)
|
||||
@@ -1770,7 +1811,7 @@ UINT WINAPI ImmGetRegisterWordStyleW(
|
||||
*/
|
||||
BOOL WINAPI ImmGetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p)\n", hIMC, lpptPos);
|
||||
|
||||
@@ -1966,13 +2007,21 @@ BOOL WINAPI ImmIsUIMessageW(
|
||||
BOOL WINAPI ImmNotifyIME(
|
||||
HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %d, %d, %d)\n",
|
||||
hIMC, dwAction, dwIndex, dwValue);
|
||||
|
||||
if (!data || ! data->immKbd->pNotifyIME)
|
||||
if (hIMC == NULL)
|
||||
{
|
||||
SetLastError(ERROR_SUCCESS);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!data || ! data->immKbd->pNotifyIME)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return data->immKbd->pNotifyIME(hIMC,dwAction,dwIndex,dwValue);
|
||||
}
|
||||
@@ -2042,11 +2091,11 @@ BOOL WINAPI ImmRegisterWordW(
|
||||
*/
|
||||
BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC)
|
||||
{
|
||||
static int shown = 0;
|
||||
static BOOL shown = FALSE;
|
||||
|
||||
if (!shown) {
|
||||
FIXME("(%p, %p): stub\n", hWnd, hIMC);
|
||||
shown = 1;
|
||||
shown = TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@@ -2056,9 +2105,11 @@ BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC)
|
||||
*/
|
||||
LRESULT WINAPI ImmRequestMessageA(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("%p %ld %ld\n", hIMC, wParam, wParam);
|
||||
if (!data)
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
|
||||
if (data && IsWindow(data->IMC.hWnd))
|
||||
return SendMessageA(data->IMC.hWnd, WM_IME_REQUEST, wParam, lParam);
|
||||
@@ -2071,10 +2122,13 @@ LRESULT WINAPI ImmRequestMessageA(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
||||
*/
|
||||
LRESULT WINAPI ImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("%p %ld %ld\n", hIMC, wParam, wParam);
|
||||
|
||||
if (!data)
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
|
||||
if (data && IsWindow(data->IMC.hWnd))
|
||||
return SendMessageW(data->IMC.hWnd, WM_IME_REQUEST, wParam, lParam);
|
||||
|
||||
@@ -2087,7 +2141,7 @@ LRESULT WINAPI ImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
||||
BOOL WINAPI ImmSetCandidateWindow(
|
||||
HIMC hIMC, LPCANDIDATEFORM lpCandidate)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p)\n", hIMC, lpCandidate);
|
||||
|
||||
@@ -2115,11 +2169,14 @@ BOOL WINAPI ImmSetCandidateWindow(
|
||||
*/
|
||||
BOOL WINAPI ImmSetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
TRACE("(%p, %p)\n", hIMC, lplf);
|
||||
|
||||
if (!data || !lplf)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
memcpy(&data->IMC.lfFont.W,lplf,sizeof(LOGFONTA));
|
||||
MultiByteToWideChar(CP_ACP, 0, lplf->lfFaceName, -1, data->IMC.lfFont.W.lfFaceName,
|
||||
@@ -2135,11 +2192,14 @@ BOOL WINAPI ImmSetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf)
|
||||
*/
|
||||
BOOL WINAPI ImmSetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
TRACE("(%p, %p)\n", hIMC, lplf);
|
||||
|
||||
if (!data || !lplf)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
data->IMC.lfFont.W = *lplf;
|
||||
ImmNotifyIME(hIMC, NI_CONTEXTUPDATED, 0, IMC_SETCOMPOSITIONFONT);
|
||||
@@ -2161,7 +2221,7 @@ BOOL WINAPI ImmSetCompositionStringA(
|
||||
WCHAR *CompBuffer = NULL;
|
||||
WCHAR *ReadBuffer = NULL;
|
||||
BOOL rc;
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %d, %p, %d, %p, %d):\n",
|
||||
hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen);
|
||||
@@ -2216,7 +2276,7 @@ BOOL WINAPI ImmSetCompositionStringW(
|
||||
CHAR *CompBuffer = NULL;
|
||||
CHAR *ReadBuffer = NULL;
|
||||
BOOL rc;
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %d, %p, %d, %p, %d):\n",
|
||||
hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen);
|
||||
@@ -2269,7 +2329,7 @@ BOOL WINAPI ImmSetCompositionWindow(
|
||||
HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)
|
||||
{
|
||||
BOOL reshow = FALSE;
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p)\n", hIMC, lpCompForm);
|
||||
TRACE("\t%x, (%i,%i), (%i,%i - %i,%i)\n",lpCompForm->dwStyle,
|
||||
@@ -2277,7 +2337,10 @@ BOOL WINAPI ImmSetCompositionWindow(
|
||||
lpCompForm->rcArea.left, lpCompForm->rcArea.bottom, lpCompForm->rcArea.right);
|
||||
|
||||
if (!data)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
data->IMC.cfCompForm = *lpCompForm;
|
||||
|
||||
@@ -2303,12 +2366,15 @@ BOOL WINAPI ImmSetConversionStatus(
|
||||
HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence)
|
||||
{
|
||||
DWORD oldConversion, oldSentence;
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("%p %d %d\n", hIMC, fdwConversion, fdwSentence);
|
||||
|
||||
if (!data)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( fdwConversion != data->IMC.fdwConversion )
|
||||
{
|
||||
@@ -2333,12 +2399,15 @@ BOOL WINAPI ImmSetConversionStatus(
|
||||
*/
|
||||
BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("%p %d\n", hIMC, fOpen);
|
||||
|
||||
if (!data)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (data->immKbd->UIWnd == NULL)
|
||||
{
|
||||
@@ -2366,12 +2435,15 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen)
|
||||
*/
|
||||
BOOL WINAPI ImmSetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
TRACE("(%p, %p)\n", hIMC, lpptPos);
|
||||
|
||||
if (!data || !lpptPos)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
TRACE("\t(%i,%i)\n", lpptPos->x, lpptPos->y);
|
||||
|
||||
@@ -2489,9 +2561,16 @@ DWORD WINAPI ImmGetImeMenuItemsA( HIMC hIMC, DWORD dwFlags, DWORD dwType,
|
||||
LPIMEMENUITEMINFOA lpImeParentMenu, LPIMEMENUITEMINFOA lpImeMenu,
|
||||
DWORD dwSize)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
TRACE("(%p, %i, %i, %p, %p, %i):\n", hIMC, dwFlags, dwType,
|
||||
lpImeParentMenu, lpImeMenu, dwSize);
|
||||
|
||||
if (!data)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (data->immKbd->hIME && data->immKbd->pImeGetImeMenuItems)
|
||||
{
|
||||
if (!is_himc_ime_unicode(data) || (!lpImeParentMenu && !lpImeMenu))
|
||||
@@ -2553,9 +2632,16 @@ DWORD WINAPI ImmGetImeMenuItemsW( HIMC hIMC, DWORD dwFlags, DWORD dwType,
|
||||
LPIMEMENUITEMINFOW lpImeParentMenu, LPIMEMENUITEMINFOW lpImeMenu,
|
||||
DWORD dwSize)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
TRACE("(%p, %i, %i, %p, %p, %i):\n", hIMC, dwFlags, dwType,
|
||||
lpImeParentMenu, lpImeMenu, dwSize);
|
||||
|
||||
if (!data)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (data->immKbd->hIME && data->immKbd->pImeGetImeMenuItems)
|
||||
{
|
||||
if (is_himc_ime_unicode(data) || (!lpImeParentMenu && !lpImeMenu))
|
||||
@@ -2613,7 +2699,7 @@ DWORD WINAPI ImmGetImeMenuItemsW( HIMC hIMC, DWORD dwFlags, DWORD dwType,
|
||||
*/
|
||||
LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
if (!data)
|
||||
return NULL;
|
||||
@@ -2626,7 +2712,10 @@ LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC)
|
||||
*/
|
||||
BOOL WINAPI ImmUnlockIMC(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
if (!data)
|
||||
return FALSE;
|
||||
if (data->dwLock)
|
||||
data->dwLock--;
|
||||
return TRUE;
|
||||
@@ -2637,7 +2726,9 @@ BOOL WINAPI ImmUnlockIMC(HIMC hIMC)
|
||||
*/
|
||||
DWORD WINAPI ImmGetIMCLockCount(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
if (!data)
|
||||
return 0;
|
||||
return data->dwLock;
|
||||
}
|
||||
|
||||
@@ -2702,7 +2793,13 @@ DWORD WINAPI ImmGetIMCCSize(HIMCC imcc)
|
||||
*/
|
||||
BOOL WINAPI ImmGenerateMessage(HIMC hIMC)
|
||||
{
|
||||
InputContextData *data = hIMC;
|
||||
InputContextData *data = get_imc_data(hIMC);
|
||||
|
||||
if (!data)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
TRACE("%i messages queued\n",data->IMC.dwNumMsgBuf);
|
||||
if (data->IMC.dwNumMsgBuf > 0)
|
||||
|
||||
@@ -85,7 +85,7 @@ reactos/dll/win32/icmp # Out of sync
|
||||
reactos/dll/win32/ieframe # Synced to Wine-1.7.27
|
||||
reactos/dll/win32/imaadp32.acm # Synced to Wine-1.7.17
|
||||
reactos/dll/win32/imagehlp # Synced to Wine-1.7.17
|
||||
reactos/dll/win32/imm32 # Synced to Wine-1.7.17
|
||||
reactos/dll/win32/imm32 # Synced to Wine-1.7.27
|
||||
reactos/dll/win32/inetcomm # Synced to Wine-1.7.17
|
||||
reactos/dll/win32/inetmib1 # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/initpki # Synced to Wine-1.7.17
|
||||
|
||||
Reference in New Issue
Block a user