mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 13:34:53 +00:00
[USER32] RealDefWindowProcA/W WM_IME_SYSTEM handling (#4607)
- Add WM_IME_SYSTEM message handling on RealDefWindowProcA and RealDefWindowProcW functions. - Improve WM_IME_... messages handling. - s/IMMGWL_IMC/IMMGWLP_IMC/ - Don't set IMMGWLP_IMC value to the default IME window. CORE-11700
This commit is contained in:
parent
eb674f353e
commit
60be15ff5d
|
@ -331,7 +331,7 @@ static HWND User32CreateImeUIWindow(PIMEUI pimeui, HKL hKL)
|
|||
}
|
||||
|
||||
if (hwndUI)
|
||||
NtUserSetWindowLong(hwndUI, IMMGWL_IMC, (LONG_PTR)pimeui->hIMC, FALSE);
|
||||
NtUserSetWindowLong(hwndUI, IMMGWLP_IMC, (LONG_PTR)pimeui->hIMC, FALSE);
|
||||
|
||||
Quit:
|
||||
IMM_FN(ImmUnlockImeDpi)(pImeDpi);
|
||||
|
@ -935,9 +935,8 @@ ImeWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicod
|
|||
return DefWindowProcA(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
NtUserSetWindowFNID(hwnd, FNID_IME);
|
||||
pimeui = HeapAlloc( GetProcessHeap(), 0, sizeof(IMEUI) );
|
||||
pimeui = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMEUI));
|
||||
pimeui->spwnd = pWnd;
|
||||
SetWindowLongPtrW(hwnd, IMMGWLP_IMC, (LONG_PTR)pimeui);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1004,7 +1003,6 @@ ImeWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicod
|
|||
|
||||
case WM_NCDESTROY:
|
||||
HeapFree(GetProcessHeap(), 0, pimeui);
|
||||
SetWindowLongPtrW(hwnd, IMMGWLP_IMC, 0);
|
||||
NtUserSetWindowFNID(hwnd, FNID_DESTROY);
|
||||
break;
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
*/
|
||||
|
||||
#include <user32.h>
|
||||
#include <ddk/immdev.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(user32);
|
||||
|
||||
|
@ -830,7 +831,6 @@ RealDefWindowProcA(HWND hWnd,
|
|||
switch (Msg)
|
||||
{
|
||||
case WM_NCCREATE:
|
||||
{
|
||||
if ( Wnd &&
|
||||
Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
|
||||
{
|
||||
|
@ -854,7 +854,6 @@ RealDefWindowProcA(HWND hWnd,
|
|||
Result = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_GETTEXTLENGTH:
|
||||
{
|
||||
|
@ -926,24 +925,18 @@ RealDefWindowProcA(HWND hWnd,
|
|||
}
|
||||
|
||||
case WM_IME_KEYDOWN:
|
||||
{
|
||||
Result = PostMessageA(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_KEYUP:
|
||||
{
|
||||
Result = PostMessageA(hWnd, WM_KEYUP, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_CHAR:
|
||||
{
|
||||
if (HIBYTE(wParam))
|
||||
PostMessageA(hWnd, WM_CHAR, HIBYTE(wParam), lParam);
|
||||
PostMessageA(hWnd, WM_CHAR, LOBYTE(wParam), lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_COMPOSITION:
|
||||
if (lParam & GCS_RESULTSTR)
|
||||
|
@ -987,26 +980,40 @@ RealDefWindowProcA(HWND hWnd,
|
|||
case WM_IME_SELECT:
|
||||
case WM_IME_NOTIFY:
|
||||
case WM_IME_CONTROL:
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
||||
if (hwndIME)
|
||||
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_SETCONTEXT:
|
||||
NormalImeMsgHandling:
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
if (GetWin32ClientInfo()->dwTIFlags & TIF_DISABLEIME)
|
||||
{
|
||||
TRACE("This thread's IME is disabled\n");
|
||||
break;
|
||||
}
|
||||
|
||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
||||
if (hwndIME)
|
||||
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
||||
if (!hwndIME)
|
||||
{
|
||||
ERR("hwndIME was NULL\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (hwndIME == hWnd)
|
||||
{
|
||||
ImeWndProc_common(hwndIME, Msg, wParam, lParam, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fall through */
|
||||
case WM_IME_SYSTEM:
|
||||
if (wParam == 4)
|
||||
break;
|
||||
|
||||
goto NormalImeMsgHandling;
|
||||
|
||||
default:
|
||||
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, FALSE);
|
||||
}
|
||||
|
@ -1038,7 +1045,6 @@ RealDefWindowProcW(HWND hWnd,
|
|||
switch (Msg)
|
||||
{
|
||||
case WM_NCCREATE:
|
||||
{
|
||||
if ( Wnd &&
|
||||
Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
|
||||
{
|
||||
|
@ -1064,7 +1070,6 @@ RealDefWindowProcW(HWND hWnd,
|
|||
Result = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_GETTEXTLENGTH:
|
||||
{
|
||||
|
@ -1117,33 +1122,25 @@ RealDefWindowProcW(HWND hWnd,
|
|||
}
|
||||
|
||||
case WM_SETTEXT:
|
||||
{
|
||||
DefSetText(hWnd, (PCWSTR)lParam, FALSE);
|
||||
|
||||
if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION)
|
||||
UserPaintCaption(Wnd, DC_TEXT);
|
||||
Result = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_CHAR:
|
||||
{
|
||||
PostMessageW(hWnd, WM_CHAR, wParam, lParam);
|
||||
Result = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_KEYDOWN:
|
||||
{
|
||||
Result = PostMessageW(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_KEYUP:
|
||||
{
|
||||
Result = PostMessageW(hWnd, WM_KEYUP, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_COMPOSITION:
|
||||
if (lParam & GCS_RESULTSTR)
|
||||
|
@ -1172,25 +1169,40 @@ RealDefWindowProcW(HWND hWnd,
|
|||
case WM_IME_SELECT:
|
||||
case WM_IME_NOTIFY:
|
||||
case WM_IME_CONTROL:
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
||||
if (hwndIME)
|
||||
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_SETCONTEXT:
|
||||
NormalImeMsgHandling:
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
if (GetWin32ClientInfo()->dwTIFlags & TIF_DISABLEIME)
|
||||
{
|
||||
TRACE("This thread's IME is disabled\n");
|
||||
break;
|
||||
}
|
||||
|
||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
||||
if (hwndIME)
|
||||
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
||||
if (!hwndIME)
|
||||
{
|
||||
ERR("hwndIME was NULL\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (hwndIME == hWnd)
|
||||
{
|
||||
ImeWndProc_common(hwndIME, Msg, wParam, lParam, TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_SYSTEM:
|
||||
if (wParam == 4)
|
||||
break;
|
||||
|
||||
goto NormalImeMsgHandling;
|
||||
|
||||
default:
|
||||
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, TRUE);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue