mirror of
https://github.com/reactos/reactos.git
synced 2025-01-03 21:09:19 +00:00
Autosyncing with Wine HEAD
svn path=/trunk/; revision=26083
This commit is contained in:
parent
958f8ca669
commit
aaf129ba9b
4 changed files with 101 additions and 17 deletions
|
@ -51,6 +51,7 @@ typedef struct tagInputContextData
|
|||
BOOL bOpen;
|
||||
BOOL bInternalState;
|
||||
BOOL bRead;
|
||||
BOOL bInComposition;
|
||||
LOGFONTW font;
|
||||
HFONT textfont;
|
||||
COMPOSITIONFORM CompForm;
|
||||
|
@ -60,6 +61,7 @@ static InputContextData *root_context = NULL;
|
|||
static HWND hwndDefault = NULL;
|
||||
static HANDLE hImeInst;
|
||||
static const WCHAR WC_IMECLASSNAME[] = {'I','M','E',0};
|
||||
static ATOM atIMEClass = 0;
|
||||
|
||||
/* MSIME messages */
|
||||
static UINT WM_MSIME_SERVICE;
|
||||
|
@ -109,12 +111,14 @@ static void IMM_Register(void)
|
|||
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW +1);
|
||||
wndClass.lpszMenuName = 0;
|
||||
wndClass.lpszClassName = WC_IMECLASSNAME;
|
||||
RegisterClassW(&wndClass);
|
||||
atIMEClass = RegisterClassW(&wndClass);
|
||||
}
|
||||
|
||||
static void IMM_Unregister(void)
|
||||
{
|
||||
UnregisterClassW(WC_IMECLASSNAME, NULL);
|
||||
if (atIMEClass) {
|
||||
UnregisterClassW(WC_IMECLASSNAME, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void IMM_RegisterMessages(void)
|
||||
|
@ -165,6 +169,18 @@ static void ImmInternalPostIMEMessage(UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
PostMessageW(target, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
static LRESULT ImmInternalSendIMENotify(WPARAM notify, LPARAM lParam)
|
||||
{
|
||||
HWND target;
|
||||
|
||||
target = root_context->hwnd;
|
||||
if (!target) target = GetFocus();
|
||||
|
||||
if (target)
|
||||
return SendMessageW(target, WM_IME_NOTIFY, notify, lParam);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ImmInternalSetOpenStatus(BOOL fOpen)
|
||||
{
|
||||
|
@ -198,7 +214,7 @@ static void ImmInternalSetOpenStatus(BOOL fOpen)
|
|||
else
|
||||
ShowWindow(hwndDefault, SW_SHOWNOACTIVATE);
|
||||
|
||||
SendMessageW(root_context->hwnd, WM_IME_NOTIFY, IMN_SETOPENSTATUS, 0);
|
||||
ImmInternalSendIMENotify(IMN_SETOPENSTATUS, 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -560,6 +576,21 @@ LONG WINAPI ImmGetCompositionStringA(
|
|||
}
|
||||
rc = sizeof(DWORD)*2;
|
||||
}
|
||||
else if (dwIndex == GCS_RESULTCLAUSE)
|
||||
{
|
||||
TRACE("GSC_RESULTCLAUSE %p %i\n", data->ResultString, data->dwResultStringSize);
|
||||
|
||||
rc = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)data->ResultString,
|
||||
data->dwResultStringSize/ sizeof(WCHAR), NULL,
|
||||
0, NULL, NULL);
|
||||
|
||||
if (dwBufLen >= sizeof(DWORD)*2)
|
||||
{
|
||||
((LPDWORD)lpBuf)[0] = 0;
|
||||
((LPDWORD)lpBuf)[1] = rc;
|
||||
}
|
||||
rc = sizeof(DWORD)*2;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("Unhandled index 0x%x\n",dwIndex);
|
||||
|
@ -1112,6 +1143,9 @@ BOOL WINAPI ImmNotifyIME(
|
|||
ImmInternalPostIMEMessage(WM_IME_COMPOSITION,
|
||||
root_context->ResultString[0],
|
||||
GCS_RESULTSTR|GCS_RESULTCLAUSE);
|
||||
|
||||
ImmInternalPostIMEMessage(WM_IME_ENDCOMPOSITION, 0, 0);
|
||||
root_context->bInComposition = FALSE;
|
||||
}
|
||||
break;
|
||||
case CPS_CONVERT:
|
||||
|
@ -1209,7 +1243,7 @@ BOOL WINAPI ImmSetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf)
|
|||
MultiByteToWideChar(CP_ACP, 0, lplf->lfFaceName, -1, data->font.lfFaceName,
|
||||
LF_FACESIZE);
|
||||
|
||||
SendMessageW(root_context->hwnd, WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
|
||||
ImmInternalSendIMENotify(IMN_SETCOMPOSITIONFONT, 0);
|
||||
|
||||
if (data->textfont)
|
||||
{
|
||||
|
@ -1233,7 +1267,7 @@ BOOL WINAPI ImmSetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf)
|
|||
return FALSE;
|
||||
|
||||
memcpy(&data->font,lplf,sizeof(LOGFONTW));
|
||||
SendMessageW(root_context->hwnd, WM_IME_NOTIFY, IMN_SETCOMPOSITIONFONT, 0);
|
||||
ImmInternalSendIMENotify(IMN_SETCOMPOSITIONFONT, 0);
|
||||
|
||||
if (data->textfont)
|
||||
{
|
||||
|
@ -1319,6 +1353,12 @@ BOOL WINAPI ImmSetCompositionStringW(
|
|||
|
||||
if (dwIndex == SCS_SETSTR)
|
||||
{
|
||||
if (!root_context->bInComposition)
|
||||
{
|
||||
ImmInternalPostIMEMessage(WM_IME_STARTCOMPOSITION, 0, 0);
|
||||
root_context->bInComposition = TRUE;
|
||||
}
|
||||
|
||||
flags = GCS_COMPSTR;
|
||||
|
||||
if (root_context->dwCompStringLength)
|
||||
|
@ -1378,7 +1418,7 @@ BOOL WINAPI ImmSetCompositionWindow(
|
|||
if (reshow)
|
||||
ShowWindow(hwndDefault,SW_SHOWNOACTIVATE);
|
||||
|
||||
SendMessageW(root_context->hwnd, WM_IME_NOTIFY,IMN_SETCOMPOSITIONWINDOW, 0);
|
||||
ImmInternalSendIMENotify(IMN_SETCOMPOSITIONWINDOW, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1406,14 +1446,8 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen)
|
|||
|
||||
if (hIMC == (HIMC)FROM_IME)
|
||||
{
|
||||
if (fOpen)
|
||||
ImmInternalPostIMEMessage(WM_IME_STARTCOMPOSITION, 0, 0);
|
||||
|
||||
ImmInternalSetOpenStatus(fOpen);
|
||||
|
||||
if (!fOpen)
|
||||
ImmInternalPostIMEMessage(WM_IME_ENDCOMPOSITION, 0, 0);
|
||||
|
||||
ImmInternalSendIMENotify(IMN_SETOPENSTATUS, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1489,6 +1523,29 @@ BOOL WINAPI ImmUnregisterWordW(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ImmGetImeMenuItemsA (IMM32.@)
|
||||
*/
|
||||
DWORD WINAPI ImmGetImeMenuItemsA( HIMC hIMC, DWORD dwFlags, DWORD dwType,
|
||||
LPIMEMENUITEMINFOA lpImeParentMenu, LPIMEMENUITEMINFOA lpImeMenu,
|
||||
DWORD dwSize)
|
||||
{
|
||||
FIXME("(%p, %i, %i, %p, %p, %i): stub\n", hIMC, dwFlags, dwType,
|
||||
lpImeParentMenu, lpImeMenu, dwSize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ImmGetImeMenuItemsW (IMM32.@)
|
||||
*/
|
||||
DWORD WINAPI ImmGetImeMenuItemsW( HIMC hIMC, DWORD dwFlags, DWORD dwType,
|
||||
LPIMEMENUITEMINFOW lpImeParentMenu, LPIMEMENUITEMINFOW lpImeMenu,
|
||||
DWORD dwSize)
|
||||
{
|
||||
FIXME("(%p, %i, %i, %p, %p, %i): stub\n", hIMC, dwFlags, dwType,
|
||||
lpImeParentMenu, lpImeMenu, dwSize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****
|
||||
* Internal functions to help with IME window management
|
||||
|
@ -1566,7 +1623,7 @@ static LRESULT WINAPI IME_WindowProc(HWND hwnd, UINT msg, WPARAM wParam,
|
|||
TRACE("IME message %s, 0x%x, 0x%x (%i)\n",
|
||||
"WM_IME_COMPOSITION", (UINT)wParam, (UINT)lParam,
|
||||
root_context->bRead);
|
||||
if ((lParam & GCS_RESULTSTR) && (!root_context->bRead))
|
||||
if (lParam & GCS_RESULTSTR)
|
||||
IMM_PostResult(root_context);
|
||||
else
|
||||
UpdateDataInDefaultIMEWindow(hwnd);
|
||||
|
|
|
@ -14,5 +14,6 @@
|
|||
<library>kernel32</library>
|
||||
<library>ntdll</library>
|
||||
<file>imm.c</file>
|
||||
<file>version.rc</file>
|
||||
<file>imm32.spec</file>
|
||||
</module>
|
||||
|
|
|
@ -43,10 +43,10 @@
|
|||
@ stub ImmGetIMCCSize
|
||||
@ stub ImmGetIMCLockCount
|
||||
@ stdcall ImmGetIMEFileNameA(long ptr long)
|
||||
@ stdcall ImmGetIMEFileNameW(long ptr long)
|
||||
@ stdcall ImmGetIMEFileNameW(long ptr long)
|
||||
@ stub ImmGetImeInfoEx
|
||||
@ stub ImmGetImeMenuItemsA
|
||||
@ stub ImmGetImeMenuItemsW
|
||||
@ stdcall ImmGetImeMenuItemsA(long long long ptr ptr long)
|
||||
@ stdcall ImmGetImeMenuItemsW(long long long ptr ptr long)
|
||||
@ stdcall ImmGetOpenStatus(long)
|
||||
@ stdcall ImmGetProperty(long long)
|
||||
@ stdcall ImmGetRegisterWordStyleA(long long ptr)
|
||||
|
|
26
reactos/dll/win32/imm32/version.rc
Normal file
26
reactos/dll/win32/imm32/version.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2007 Alexandre Julliard
|
||||
*
|
||||
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#define WINE_FILEDESCRIPTION_STR "Wine imm32"
|
||||
#define WINE_FILENAME_STR "imm32.dll"
|
||||
#define WINE_FILEVERSION 5,1,2600,2180
|
||||
#define WINE_FILEVERSION_STR "5.1.2600.2180"
|
||||
#define WINE_PRODUCTVERSION 5,1,2600,2180
|
||||
#define WINE_PRODUCTVERSION_STR "5.1.2600.2180"
|
||||
|
||||
#include "wine/wine_common_ver.rc"
|
Loading…
Reference in a new issue