mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 08:55:19 +00:00
[IMM32]
* Sync with Wine 1.5.19. svn path=/trunk/; revision=58284
This commit is contained in:
parent
17c3c78605
commit
a59dae7701
2 changed files with 86 additions and 13 deletions
|
@ -52,6 +52,7 @@ typedef struct _tagImmHkl{
|
||||||
IMEINFO imeInfo;
|
IMEINFO imeInfo;
|
||||||
WCHAR imeClassName[17]; /* 16 character max */
|
WCHAR imeClassName[17]; /* 16 character max */
|
||||||
ULONG uSelected;
|
ULONG uSelected;
|
||||||
|
HWND UIWnd;
|
||||||
|
|
||||||
/* Function Pointers */
|
/* Function Pointers */
|
||||||
MAKE_FUNCPTR(ImeInquire);
|
MAKE_FUNCPTR(ImeInquire);
|
||||||
|
@ -79,7 +80,6 @@ typedef struct tagInputContextData
|
||||||
INPUTCONTEXT IMC;
|
INPUTCONTEXT IMC;
|
||||||
|
|
||||||
ImmHkl *immKbd;
|
ImmHkl *immKbd;
|
||||||
HWND imeWnd;
|
|
||||||
UINT lastVK;
|
UINT lastVK;
|
||||||
} InputContextData;
|
} InputContextData;
|
||||||
|
|
||||||
|
@ -112,6 +112,10 @@ static const WCHAR szImeFileW[] = {'I','m','e',' ','F','i','l','e',0};
|
||||||
static const WCHAR szLayoutTextW[] = {'L','a','y','o','u','t',' ','T','e','x','t',0};
|
static const WCHAR szLayoutTextW[] = {'L','a','y','o','u','t',' ','T','e','x','t',0};
|
||||||
static const WCHAR szImeRegFmt[] = {'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','\\','K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','s','\\','%','0','8','l','x',0};
|
static const WCHAR szImeRegFmt[] = {'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','\\','K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','s','\\','%','0','8','l','x',0};
|
||||||
|
|
||||||
|
static const WCHAR szwIME[] = {'I','M','E',0};
|
||||||
|
|
||||||
|
static LRESULT WINAPI DefIME_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
||||||
|
LPARAM lParam);
|
||||||
|
|
||||||
#define is_himc_ime_unicode(p) (p->immKbd->imeInfo.fdwProperty & IME_PROP_UNICODE)
|
#define is_himc_ime_unicode(p) (p->immKbd->imeInfo.fdwProperty & IME_PROP_UNICODE)
|
||||||
#define is_kbd_ime_unicode(p) (p->imeInfo.fdwProperty & IME_PROP_UNICODE)
|
#define is_kbd_ime_unicode(p) (p->imeInfo.fdwProperty & IME_PROP_UNICODE)
|
||||||
|
@ -359,6 +363,8 @@ static void IMM_FreeAllImmHkl(void)
|
||||||
ptr->pImeDestroy(1);
|
ptr->pImeDestroy(1);
|
||||||
FreeLibrary(ptr->hIME);
|
FreeLibrary(ptr->hIME);
|
||||||
}
|
}
|
||||||
|
if (ptr->UIWnd)
|
||||||
|
DestroyWindow(ptr->UIWnd);
|
||||||
HeapFree(GetProcessHeap(),0,ptr);
|
HeapFree(GetProcessHeap(),0,ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -374,6 +380,21 @@ static void IMM_RegisterMessages(void)
|
||||||
WM_MSIME_DOCUMENTFEED = RegisterWindowMessageA("MSIMEDocumentFeed");
|
WM_MSIME_DOCUMENTFEED = RegisterWindowMessageA("MSIMEDocumentFeed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void IMM_RegisterIMEClass(void)
|
||||||
|
{
|
||||||
|
WNDCLASSW wndClass;
|
||||||
|
|
||||||
|
ZeroMemory(&wndClass, sizeof(WNDCLASSW));
|
||||||
|
|
||||||
|
wndClass.style = CS_GLOBALCLASS;
|
||||||
|
wndClass.lpfnWndProc = (WNDPROC) DefIME_WindowProc;
|
||||||
|
wndClass.cbWndExtra = 2 * sizeof(LONG_PTR);
|
||||||
|
wndClass.hCursor = LoadCursorW(NULL, (LPWSTR)IDC_ARROW);
|
||||||
|
wndClass.lpszClassName = szwIME;
|
||||||
|
|
||||||
|
RegisterClassW(&wndClass);
|
||||||
|
}
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved)
|
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
TRACE("%p, %x, %p\n",hInstDLL,fdwReason,lpReserved);
|
TRACE("%p, %x, %p\n",hInstDLL,fdwReason,lpReserved);
|
||||||
|
@ -384,6 +405,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved)
|
||||||
tlsIndex = TlsAlloc();
|
tlsIndex = TlsAlloc();
|
||||||
if (tlsIndex == TLS_OUT_OF_INDEXES)
|
if (tlsIndex == TLS_OUT_OF_INDEXES)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
IMM_RegisterIMEClass();
|
||||||
break;
|
break;
|
||||||
case DLL_THREAD_ATTACH:
|
case DLL_THREAD_ATTACH:
|
||||||
break;
|
break;
|
||||||
|
@ -394,6 +416,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved)
|
||||||
IMM_FreeThreadData();
|
IMM_FreeThreadData();
|
||||||
IMM_FreeAllImmHkl();
|
IMM_FreeAllImmHkl();
|
||||||
TlsFree(tlsIndex);
|
TlsFree(tlsIndex);
|
||||||
|
UnregisterClassW(szwIME, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -680,10 +703,6 @@ static BOOL IMM_DestroyContext(HIMC hIMC)
|
||||||
data->immKbd->pImeSelect(hIMC, FALSE);
|
data->immKbd->pImeSelect(hIMC, FALSE);
|
||||||
SendMessageW(data->IMC.hWnd, WM_IME_SELECT, FALSE, (LPARAM)GetKeyboardLayout(0));
|
SendMessageW(data->IMC.hWnd, WM_IME_SELECT, FALSE, (LPARAM)GetKeyboardLayout(0));
|
||||||
|
|
||||||
if (IMM_GetThreadData()->hwndDefault == data->imeWnd)
|
|
||||||
IMM_GetThreadData()->hwndDefault = NULL;
|
|
||||||
DestroyWindow(data->imeWnd);
|
|
||||||
|
|
||||||
ImmDestroyIMCC(data->IMC.hCompStr);
|
ImmDestroyIMCC(data->IMC.hCompStr);
|
||||||
ImmDestroyIMCC(data->IMC.hCandInfo);
|
ImmDestroyIMCC(data->IMC.hCandInfo);
|
||||||
ImmDestroyIMCC(data->IMC.hGuideLine);
|
ImmDestroyIMCC(data->IMC.hGuideLine);
|
||||||
|
@ -1492,6 +1511,9 @@ BOOL WINAPI ImmGetConversionStatus(
|
||||||
*/
|
*/
|
||||||
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
|
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
|
||||||
{
|
{
|
||||||
|
if (IMM_GetThreadData()->hwndDefault == NULL)
|
||||||
|
IMM_GetThreadData()->hwndDefault = CreateWindowExW( WS_EX_TOOLWINDOW,
|
||||||
|
szwIME, NULL, WS_POPUP, 0, 0, 1, 1, 0, 0, 0, 0);
|
||||||
TRACE("Default is %p\n",IMM_GetThreadData()->hwndDefault);
|
TRACE("Default is %p\n",IMM_GetThreadData()->hwndDefault);
|
||||||
return IMM_GetThreadData()->hwndDefault;
|
return IMM_GetThreadData()->hwndDefault;
|
||||||
}
|
}
|
||||||
|
@ -2264,16 +2286,16 @@ BOOL WINAPI ImmSetCompositionWindow(
|
||||||
|
|
||||||
data->IMC.cfCompForm = *lpCompForm;
|
data->IMC.cfCompForm = *lpCompForm;
|
||||||
|
|
||||||
if (IsWindowVisible(IMM_GetThreadData()->hwndDefault))
|
if (IsWindowVisible(data->immKbd->UIWnd))
|
||||||
{
|
{
|
||||||
reshow = TRUE;
|
reshow = TRUE;
|
||||||
ShowWindow(IMM_GetThreadData()->hwndDefault,SW_HIDE);
|
ShowWindow(data->immKbd->UIWnd,SW_HIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: this is a partial stub */
|
/* FIXME: this is a partial stub */
|
||||||
|
|
||||||
if (reshow)
|
if (reshow)
|
||||||
ShowWindow(IMM_GetThreadData()->hwndDefault,SW_SHOWNOACTIVATE);
|
ShowWindow(data->immKbd->UIWnd,SW_SHOWNOACTIVATE);
|
||||||
|
|
||||||
ImmInternalSendIMENotify(data, IMN_SETCOMPOSITIONWINDOW, 0);
|
ImmInternalSendIMENotify(data, IMN_SETCOMPOSITIONWINDOW, 0);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -2323,15 +2345,16 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen)
|
||||||
if (!data)
|
if (!data)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (data->imeWnd == NULL)
|
if (data->immKbd->UIWnd == NULL)
|
||||||
{
|
{
|
||||||
/* create the ime window */
|
/* create the ime window */
|
||||||
data->imeWnd = CreateWindowExW( WS_EX_TOOLWINDOW,
|
data->immKbd->UIWnd = CreateWindowExW( WS_EX_TOOLWINDOW,
|
||||||
data->immKbd->imeClassName, NULL, WS_POPUP, 0, 0, 1, 1, 0,
|
data->immKbd->imeClassName, NULL, WS_POPUP, 0, 0, 1, 1, 0,
|
||||||
0, data->immKbd->hIME, 0);
|
0, data->immKbd->hIME, 0);
|
||||||
SetWindowLongPtrW(data->imeWnd, IMMGWL_IMC, (LONG_PTR)data);
|
SetWindowLongPtrW(data->immKbd->UIWnd, IMMGWL_IMC, (LONG_PTR)data);
|
||||||
IMM_GetThreadData()->hwndDefault = data->imeWnd;
|
|
||||||
}
|
}
|
||||||
|
else if (fOpen)
|
||||||
|
SetWindowLongPtrW(data->immKbd->UIWnd, IMMGWL_IMC, (LONG_PTR)data);
|
||||||
|
|
||||||
if (!fOpen != !data->IMC.fOpen)
|
if (!fOpen != !data->IMC.fOpen)
|
||||||
{
|
{
|
||||||
|
@ -2857,3 +2880,53 @@ BOOL WINAPI ImmGetHotKey(DWORD hotkey, UINT *modifiers, UINT *key, HKL hkl)
|
||||||
FIXME("%x, %p, %p, %p: stub\n", hotkey, modifiers, key, hkl);
|
FIXME("%x, %p, %p, %p: stub\n", hotkey, modifiers, key, hkl);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Window Proc for the Default IME window class
|
||||||
|
*/
|
||||||
|
static LRESULT WINAPI DefIME_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case WM_CREATE:
|
||||||
|
case WM_NCCREATE:
|
||||||
|
return TRUE;
|
||||||
|
case WM_IME_STARTCOMPOSITION:
|
||||||
|
case WM_IME_ENDCOMPOSITION:
|
||||||
|
case WM_IME_COMPOSITION:
|
||||||
|
case WM_IME_SETCONTEXT:
|
||||||
|
case WM_IME_NOTIFY:
|
||||||
|
case WM_IME_CONTROL:
|
||||||
|
case WM_IME_COMPOSITIONFULL:
|
||||||
|
case WM_IME_SELECT:
|
||||||
|
case WM_IME_CHAR:
|
||||||
|
case WM_IME_REQUEST:
|
||||||
|
case WM_IME_KEYDOWN:
|
||||||
|
case WM_IME_KEYUP:
|
||||||
|
{
|
||||||
|
ImmHkl *immHkl = IMM_GetImmHkl(GetKeyboardLayout(0));
|
||||||
|
if (immHkl->UIWnd)
|
||||||
|
return SendMessageW(immHkl->UIWnd,uMsg,wParam,lParam);
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if ((uMsg == WM_MSIME_RECONVERTOPTIONS) ||
|
||||||
|
(uMsg == WM_MSIME_SERVICE) ||
|
||||||
|
(uMsg == WM_MSIME_MOUSE) ||
|
||||||
|
(uMsg == WM_MSIME_RECONVERTREQUEST) ||
|
||||||
|
(uMsg == WM_MSIME_RECONVERT) ||
|
||||||
|
(uMsg == WM_MSIME_QUERYPOSITION) ||
|
||||||
|
(uMsg == WM_MSIME_DOCUMENTFEED))
|
||||||
|
{
|
||||||
|
ImmHkl *immHkl = IMM_GetImmHkl(GetKeyboardLayout(0));
|
||||||
|
if (immHkl->UIWnd)
|
||||||
|
return SendMessageW(immHkl->UIWnd,uMsg,wParam,lParam);
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ reactos/dll/win32/iccvid # Synced to Wine-1.5.19
|
||||||
reactos/dll/win32/icmp # Synced to Wine-0_9_10
|
reactos/dll/win32/icmp # Synced to Wine-0_9_10
|
||||||
reactos/dll/win32/imaadp32.acm # Synced to Wine-1.5.4
|
reactos/dll/win32/imaadp32.acm # Synced to Wine-1.5.4
|
||||||
reactos/dll/win32/imagehlp # Synced to Wine-1.5.4
|
reactos/dll/win32/imagehlp # Synced to Wine-1.5.4
|
||||||
reactos/dll/win32/imm32 # Synced to Wine-1.5.4
|
reactos/dll/win32/imm32 # Synced to Wine-1.5.19
|
||||||
reactos/dll/win32/inetcomm # Synced to Wine-1.5.4
|
reactos/dll/win32/inetcomm # Synced to Wine-1.5.4
|
||||||
reactos/dll/win32/inetmib1 # Synced to Wine-1.5.4
|
reactos/dll/win32/inetmib1 # Synced to Wine-1.5.4
|
||||||
reactos/dll/win32/initpki # Synced to Wine-1.5.19
|
reactos/dll/win32/initpki # Synced to Wine-1.5.19
|
||||||
|
|
Loading…
Reference in a new issue