From: Alanas alanas.00@mail.ru
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57178 --- dlls/comctl32/tests/toolbar.c | 46 +++++++++++++++++++++++++++++++++-- dlls/comctl32/toolbar.c | 2 +- 2 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c index 7c886e1f88f..e86852d30bb 100644 --- a/dlls/comctl32/tests/toolbar.c +++ b/dlls/comctl32/tests/toolbar.c @@ -179,7 +179,24 @@ static BOOL equal_dc(HDC hdc1, HDC hdc2, int width, int height)
static void *alloced_str;
-static LRESULT parent_wnd_notify(LPARAM lParam) +#ifdef _WIN64 +#define forward_test_idFrom 0x466e20495bc54f0d +#define forward_test_return 0xdef293ec10fc0b87 +#else +#define forward_test_idFrom 0xe7f4c2cc +#define forward_test_return 0xa66b3c5a +#endif +#define forward_test_code 0x61a59ebb +static _Bool forward_test; +static const NMHDR forward_test_nmhdr = { + // .hwndFrom should not be accessed + .hwndFrom = NULL, + // .idFrom and .code are random and don't mean anything + .idFrom = forward_test_idFrom, + .code = forward_test_code +}; + +static LRESULT parent_wnd_notify(WPARAM wParam, LPARAM lParam) { NMHDR *hdr = (NMHDR *)lParam; NMTBHOTITEM *nmhi; @@ -371,6 +388,12 @@ static LRESULT parent_wnd_notify(LPARAM lParam)
return 0; } + case forward_test_code: + ok(hdr == &forward_test_nmhdr, "didn't expect WM_NOTIFY message ((NMHDR*)lParam)->code == forward_test_code && (NMHDR*)lParam != &forward_test_nmhdr\n"); + ok(forward_test, "didn't expect WM_NOTIFY message ((NMHDR*)lParam)->code == forward_test_code && !forward_test\n"); + ok(wParam == forward_test_idFrom, "wParam == 0x%Ix\n", wParam); + forward_test = FALSE; + return forward_test_return; } return 0; } @@ -428,7 +451,7 @@ static LRESULT CALLBACK parent_wnd_proc(HWND hWnd, UINT message, WPARAM wParam, switch (message) { case WM_NOTIFY: - return parent_wnd_notify(lParam); + return parent_wnd_notify(wParam, lParam); }
defwndproc_counter++; @@ -2833,6 +2856,24 @@ static void test_BTNS_SEP(void) DestroyWindow(hwnd); }
+static void test_WM_NOTIFY_forwarding_to_parent(void) +{ + HWND toolbar = NULL; + LRESULT ret; +#ifdef _WIN64 + const WPARAM unused_wParam = 0x9c15b293ef1d1a25; +#else + const WPARAM unused_wParam = 0x5d0b6232; +#endif + rebuild_toolbar(&toolbar); + forward_test = TRUE; + ret = SendMessageA(toolbar, WM_NOTIFY, unused_wParam, (LPARAM)&forward_test_nmhdr); + ok(ret == forward_test_return, "SendMessageA returned 0x%Ix\n", ret); + ok(!forward_test, "toolbar didn't forward WM_NOTIFY to parent\n"); + forward_test = FALSE; + DestroyWindow(toolbar); +} + START_TEST(toolbar) { ULONG_PTR ctx_cookie; @@ -2884,6 +2925,7 @@ START_TEST(toolbar) test_drawtext_flags(); test_imagelist(); test_BTNS_SEP(); + test_WM_NOTIFY_forwarding_to_parent();
if (!load_v6_module(&ctx_cookie, &ctx)) return; diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c index 690a02db6ee..d12cd25715c 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -6360,7 +6360,7 @@ TOOLBAR_Notify (TOOLBAR_INFO *infoPtr, LPNMHDR lpnmh) return 0;
default: - return 0; + return SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, lpnmh->idFrom, (LPARAM)lpnmh); } }