Alex Henrie : user32: Translate WM_(NC) XBUTTONUP to WM_APPCOMMAND in DefWindowProc.
Alexandre Julliard
julliard at winehq.org
Thu Jul 20 12:11:29 CDT 2017
Module: wine
Branch: stable
Commit: 5e5661324016aec2fcdd5af369bf6bd08d2b894a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5e5661324016aec2fcdd5af369bf6bd08d2b894a
Author: Alex Henrie <alexhenrie24 at gmail.com>
Date: Wed Feb 22 23:17:07 2017 -0700
user32: Translate WM_(NC)XBUTTONUP to WM_APPCOMMAND in DefWindowProc.
Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 2799be180439a09588888b0ce5854faef8fe4a4a)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/user32/defwnd.c | 9 +++++++++
dlls/user32/tests/msg.c | 28 ++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index e62f021..6fbaf1e 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -291,6 +291,15 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
*/
break;
+ case WM_XBUTTONUP:
+ case WM_NCXBUTTONUP:
+ if (HIWORD(wParam) == XBUTTON1 || HIWORD(wParam) == XBUTTON2)
+ {
+ SendMessageW(hwnd, WM_APPCOMMAND, (WPARAM)hwnd,
+ MAKELPARAM(LOWORD(wParam), FAPPCOMMAND_MOUSE | HIWORD(wParam)));
+ }
+ break;
+
case WM_CONTEXTMENU:
if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_CHILD)
SendMessageW( GetParent(hwnd), msg, wParam, lParam );
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index cd757b8..eba949b 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -14308,6 +14308,18 @@ static const struct message NCRBUTTONDOWNSeq[] =
{ 0 }
};
+static const struct message NCXBUTTONUPSeq1[] =
+{
+ { WM_APPCOMMAND, sent|lparam, /*hwnd*/0, MAKELPARAM(0, FAPPCOMMAND_MOUSE | APPCOMMAND_BROWSER_BACKWARD) },
+ { 0 }
+};
+
+static const struct message NCXBUTTONUPSeq2[] =
+{
+ { WM_APPCOMMAND, sent|lparam, /*hwnd*/0, MAKELPARAM(0, FAPPCOMMAND_MOUSE | APPCOMMAND_BROWSER_FORWARD) },
+ { 0 }
+};
+
struct rbuttonup_thread_data
{
HWND hwnd;
@@ -14367,6 +14379,22 @@ static void test_defwinproc(void)
DefWindowProcA( hwnd, WM_NCRBUTTONDOWN, HTCAPTION, MAKELPARAM(x, y));
ok_sequence(NCRBUTTONDOWNSeq, "WM_NCRBUTTONDOWN on caption", FALSE);
+ res = DefWindowProcA(hwnd, WM_NCXBUTTONUP, 0, MAKELPARAM(x, y));
+ ok(!res, "WM_NCXBUTTONUP returned %ld\n", res);
+ ok_sequence(WmEmptySeq, "WM_NCXBUTTONUP without button", FALSE);
+
+ res = DefWindowProcA(hwnd, WM_NCXBUTTONUP, MAKEWPARAM(0, XBUTTON1), MAKELPARAM(x, y));
+ ok(!res, "WM_NCXBUTTONUP returned %ld\n", res);
+ ok_sequence(NCXBUTTONUPSeq1, "WM_NCXBUTTONUP with XBUTTON1", FALSE);
+
+ res = DefWindowProcA(hwnd, WM_NCXBUTTONUP, MAKEWPARAM(0, XBUTTON2), MAKELPARAM(x, y));
+ ok(!res, "WM_NCXBUTTONUP returned %ld\n", res);
+ ok_sequence(NCXBUTTONUPSeq2, "WM_NCXBUTTONUP with XBUTTON2", FALSE);
+
+ res = DefWindowProcA(hwnd, WM_NCXBUTTONUP, MAKEWPARAM(0, 3), MAKELPARAM(x, y));
+ ok(!res, "WM_NCXBUTTONUP returned %ld\n", res);
+ ok_sequence(WmEmptySeq, "WM_NCXBUTTONUP with invalid button", FALSE);
+
SetEvent( data.wndproc_finished );
WaitForSingleObject( thread, 1000 );
CloseHandle( data.wndproc_finished );
More information about the wine-cvs
mailing list