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)
|
if (hwndUI)
|
||||||
NtUserSetWindowLong(hwndUI, IMMGWL_IMC, (LONG_PTR)pimeui->hIMC, FALSE);
|
NtUserSetWindowLong(hwndUI, IMMGWLP_IMC, (LONG_PTR)pimeui->hIMC, FALSE);
|
||||||
|
|
||||||
Quit:
|
Quit:
|
||||||
IMM_FN(ImmUnlockImeDpi)(pImeDpi);
|
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);
|
return DefWindowProcA(hwnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
NtUserSetWindowFNID(hwnd, FNID_IME);
|
NtUserSetWindowFNID(hwnd, FNID_IME);
|
||||||
pimeui = HeapAlloc( GetProcessHeap(), 0, sizeof(IMEUI) );
|
pimeui = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMEUI));
|
||||||
pimeui->spwnd = pWnd;
|
pimeui->spwnd = pWnd;
|
||||||
SetWindowLongPtrW(hwnd, IMMGWLP_IMC, (LONG_PTR)pimeui);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1004,7 +1003,6 @@ ImeWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicod
|
||||||
|
|
||||||
case WM_NCDESTROY:
|
case WM_NCDESTROY:
|
||||||
HeapFree(GetProcessHeap(), 0, pimeui);
|
HeapFree(GetProcessHeap(), 0, pimeui);
|
||||||
SetWindowLongPtrW(hwnd, IMMGWLP_IMC, 0);
|
|
||||||
NtUserSetWindowFNID(hwnd, FNID_DESTROY);
|
NtUserSetWindowFNID(hwnd, FNID_DESTROY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <user32.h>
|
#include <user32.h>
|
||||||
|
#include <ddk/immdev.h>
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(user32);
|
WINE_DEFAULT_DEBUG_CHANNEL(user32);
|
||||||
|
|
||||||
|
@ -830,7 +831,6 @@ RealDefWindowProcA(HWND hWnd,
|
||||||
switch (Msg)
|
switch (Msg)
|
||||||
{
|
{
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
{
|
|
||||||
if ( Wnd &&
|
if ( Wnd &&
|
||||||
Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
|
Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
|
||||||
{
|
{
|
||||||
|
@ -854,7 +854,6 @@ RealDefWindowProcA(HWND hWnd,
|
||||||
Result = 1;
|
Result = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_GETTEXTLENGTH:
|
case WM_GETTEXTLENGTH:
|
||||||
{
|
{
|
||||||
|
@ -926,24 +925,18 @@ RealDefWindowProcA(HWND hWnd,
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_IME_KEYDOWN:
|
case WM_IME_KEYDOWN:
|
||||||
{
|
|
||||||
Result = PostMessageA(hWnd, WM_KEYDOWN, wParam, lParam);
|
Result = PostMessageA(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_KEYUP:
|
case WM_IME_KEYUP:
|
||||||
{
|
|
||||||
Result = PostMessageA(hWnd, WM_KEYUP, wParam, lParam);
|
Result = PostMessageA(hWnd, WM_KEYUP, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_CHAR:
|
case WM_IME_CHAR:
|
||||||
{
|
|
||||||
if (HIBYTE(wParam))
|
if (HIBYTE(wParam))
|
||||||
PostMessageA(hWnd, WM_CHAR, HIBYTE(wParam), lParam);
|
PostMessageA(hWnd, WM_CHAR, HIBYTE(wParam), lParam);
|
||||||
PostMessageA(hWnd, WM_CHAR, LOBYTE(wParam), lParam);
|
PostMessageA(hWnd, WM_CHAR, LOBYTE(wParam), lParam);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_COMPOSITION:
|
case WM_IME_COMPOSITION:
|
||||||
if (lParam & GCS_RESULTSTR)
|
if (lParam & GCS_RESULTSTR)
|
||||||
|
@ -987,26 +980,40 @@ RealDefWindowProcA(HWND hWnd,
|
||||||
case WM_IME_SELECT:
|
case WM_IME_SELECT:
|
||||||
case WM_IME_NOTIFY:
|
case WM_IME_NOTIFY:
|
||||||
case WM_IME_CONTROL:
|
case WM_IME_CONTROL:
|
||||||
{
|
|
||||||
HWND hwndIME;
|
|
||||||
|
|
||||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
|
||||||
if (hwndIME)
|
|
||||||
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_SETCONTEXT:
|
case WM_IME_SETCONTEXT:
|
||||||
|
NormalImeMsgHandling:
|
||||||
{
|
{
|
||||||
HWND hwndIME;
|
HWND hwndIME;
|
||||||
|
|
||||||
|
if (GetWin32ClientInfo()->dwTIFlags & TIF_DISABLEIME)
|
||||||
|
{
|
||||||
|
TRACE("This thread's IME is disabled\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
||||||
if (hwndIME)
|
if (!hwndIME)
|
||||||
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
{
|
||||||
|
ERR("hwndIME was NULL\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hwndIME == hWnd)
|
||||||
|
{
|
||||||
|
ImeWndProc_common(hwndIME, Msg, wParam, lParam, FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fall through */
|
case WM_IME_SYSTEM:
|
||||||
|
if (wParam == 4)
|
||||||
|
break;
|
||||||
|
|
||||||
|
goto NormalImeMsgHandling;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, FALSE);
|
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, FALSE);
|
||||||
}
|
}
|
||||||
|
@ -1038,7 +1045,6 @@ RealDefWindowProcW(HWND hWnd,
|
||||||
switch (Msg)
|
switch (Msg)
|
||||||
{
|
{
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
{
|
|
||||||
if ( Wnd &&
|
if ( Wnd &&
|
||||||
Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
|
Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
|
||||||
{
|
{
|
||||||
|
@ -1064,7 +1070,6 @@ RealDefWindowProcW(HWND hWnd,
|
||||||
Result = 1;
|
Result = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_GETTEXTLENGTH:
|
case WM_GETTEXTLENGTH:
|
||||||
{
|
{
|
||||||
|
@ -1117,33 +1122,25 @@ RealDefWindowProcW(HWND hWnd,
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_SETTEXT:
|
case WM_SETTEXT:
|
||||||
{
|
|
||||||
DefSetText(hWnd, (PCWSTR)lParam, FALSE);
|
DefSetText(hWnd, (PCWSTR)lParam, FALSE);
|
||||||
|
|
||||||
if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION)
|
if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION)
|
||||||
UserPaintCaption(Wnd, DC_TEXT);
|
UserPaintCaption(Wnd, DC_TEXT);
|
||||||
Result = 1;
|
Result = 1;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_CHAR:
|
case WM_IME_CHAR:
|
||||||
{
|
|
||||||
PostMessageW(hWnd, WM_CHAR, wParam, lParam);
|
PostMessageW(hWnd, WM_CHAR, wParam, lParam);
|
||||||
Result = 0;
|
Result = 0;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_KEYDOWN:
|
case WM_IME_KEYDOWN:
|
||||||
{
|
|
||||||
Result = PostMessageW(hWnd, WM_KEYDOWN, wParam, lParam);
|
Result = PostMessageW(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_KEYUP:
|
case WM_IME_KEYUP:
|
||||||
{
|
|
||||||
Result = PostMessageW(hWnd, WM_KEYUP, wParam, lParam);
|
Result = PostMessageW(hWnd, WM_KEYUP, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_COMPOSITION:
|
case WM_IME_COMPOSITION:
|
||||||
if (lParam & GCS_RESULTSTR)
|
if (lParam & GCS_RESULTSTR)
|
||||||
|
@ -1172,25 +1169,40 @@ RealDefWindowProcW(HWND hWnd,
|
||||||
case WM_IME_SELECT:
|
case WM_IME_SELECT:
|
||||||
case WM_IME_NOTIFY:
|
case WM_IME_NOTIFY:
|
||||||
case WM_IME_CONTROL:
|
case WM_IME_CONTROL:
|
||||||
{
|
|
||||||
HWND hwndIME;
|
|
||||||
|
|
||||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
|
||||||
if (hwndIME)
|
|
||||||
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WM_IME_SETCONTEXT:
|
case WM_IME_SETCONTEXT:
|
||||||
|
NormalImeMsgHandling:
|
||||||
{
|
{
|
||||||
HWND hwndIME;
|
HWND hwndIME;
|
||||||
|
|
||||||
|
if (GetWin32ClientInfo()->dwTIFlags & TIF_DISABLEIME)
|
||||||
|
{
|
||||||
|
TRACE("This thread's IME is disabled\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
|
||||||
if (hwndIME)
|
if (!hwndIME)
|
||||||
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
{
|
||||||
|
ERR("hwndIME was NULL\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hwndIME == hWnd)
|
||||||
|
{
|
||||||
|
ImeWndProc_common(hwndIME, Msg, wParam, lParam, TRUE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WM_IME_SYSTEM:
|
||||||
|
if (wParam == 4)
|
||||||
|
break;
|
||||||
|
|
||||||
|
goto NormalImeMsgHandling;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, TRUE);
|
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, TRUE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue