ByeongSik Jeon : user32: Post the WM_KEY{DOWN|UP} message whenWM_IME_KEY{DOWN|UP} message is generated by IME .
Alexandre Julliard
julliard at winehq.org
Thu May 1 06:38:44 CDT 2008
Module: wine
Branch: master
Commit: 64e64d657c77ee015d234ef504d57cf702aed356
URL: http://source.winehq.org/git/wine.git/?a=commit;h=64e64d657c77ee015d234ef504d57cf702aed356
Author: ByeongSik Jeon <bsjeon at hanmail.net>
Date: Wed Apr 30 20:50:19 2008 +0900
user32: Post the WM_KEY{DOWN|UP} message whenWM_IME_KEY{DOWN|UP} message is generated by IME.
---
dlls/user32/defwnd.c | 12 ++++++-
dlls/user32/tests/msg.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 81 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index 9d72f9a..ba07ebb 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -843,11 +843,11 @@ LRESULT WINAPI DefWindowProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
break;
case WM_IME_KEYDOWN:
- result = SendMessageA( hwnd, WM_KEYDOWN, wParam, lParam );
+ result = PostMessageA( hwnd, WM_KEYDOWN, wParam, lParam );
break;
case WM_IME_KEYUP:
- result = SendMessageA( hwnd, WM_KEYUP, wParam, lParam );
+ result = PostMessageA( hwnd, WM_KEYUP, wParam, lParam );
break;
case WM_IME_STARTCOMPOSITION:
@@ -993,6 +993,14 @@ LRESULT WINAPI DefWindowProcW(
PostMessageW( hwnd, WM_CHAR, wParam, lParam );
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_SETCONTEXT:
{
HWND hwndIME;
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 7f54e61..6d1acb1 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -5067,6 +5067,76 @@ static void test_combobox_messages(void)
DestroyWindow(parent);
}
+/****************** WM_IME_KEYDOWN message test *******************/
+
+static const struct message WmImeKeydownMsgSeq_0[] =
+{
+ { WM_IME_KEYDOWN, wparam, VK_RETURN },
+ { WM_CHAR, wparam, 'A' },
+ { 0 }
+};
+
+static const struct message WmImeKeydownMsgSeq_1[] =
+{
+ { WM_KEYDOWN, wparam, VK_RETURN },
+ { WM_CHAR, wparam, VK_RETURN },
+ { 0 }
+};
+
+static LRESULT WINAPI wmime_keydown_procA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ struct message msg;
+
+ trace("wmime_keydown_procA: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
+
+ msg.message = message;
+ msg.flags = wparam|lparam;
+ msg.wParam = wParam;
+ msg.lParam = lParam;
+ add_message(&msg);
+
+ return DefWindowProcA(hwnd, message, wParam, lParam);
+}
+
+static void register_wmime_keydown_class(void)
+{
+ WNDCLASSA cls;
+
+ ZeroMemory(&cls, sizeof(WNDCLASSA));
+ cls.lpfnWndProc = wmime_keydown_procA;
+ cls.hInstance = GetModuleHandleA(0);
+ cls.lpszClassName = "wmime_keydown_class";
+ if (!RegisterClassA(&cls)) assert(0);
+}
+
+void test_wmime_keydown_message(void)
+{
+ HWND hwnd;
+ MSG msg;
+
+ trace("Message sequences by WM_IME_KEYDOWN\n");
+
+ register_wmime_keydown_class();
+ hwnd = CreateWindowExA(0, "wmime_keydown_class", NULL, WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, 0,
+ NULL, NULL, 0);
+ flush_events();
+ flush_sequence();
+
+ SendMessage(hwnd, WM_IME_KEYDOWN, VK_RETURN, 0x1c0001);
+ SendMessage(hwnd, WM_CHAR, 'A', 1);
+ ok_sequence(WmImeKeydownMsgSeq_0, "WM_IME_KEYDOWN 0", FALSE);
+
+ while ( PeekMessage(&msg, 0, 0, 0, PM_REMOVE) )
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ ok_sequence(WmImeKeydownMsgSeq_1, "WM_IME_KEYDOWN 1", FALSE);
+
+ DestroyWindow(hwnd);
+}
+
/************* painting message test ********************/
void dump_region(HRGN hrgn)
@@ -10353,6 +10423,7 @@ START_TEST(msg)
test_static_messages();
test_listbox_messages();
test_combobox_messages();
+ test_wmime_keydown_message();
test_paint_messages();
test_interthread_messages();
test_message_conversion();
More information about the wine-cvs
mailing list