[PATCH 0/2] MR9388: user32/tests: Add some tests for GetWindow(GW_ENABLEDPOPUP).
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9388
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/user32/tests/win.c | 60 +++++++++++++++++++++++++++++++++++++++++ include/winuser.h | 1 + 2 files changed, 61 insertions(+) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index a3953377558..ad49db58811 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -14174,6 +14174,65 @@ static void test_tile_windows(void) DestroyWindow(parent); } +static void test_GW_ENABLEDPOPUP(void) +{ + HWND parent, hwnd, hwnd2; + HWND popup, popup2; + + parent = CreateWindowA("static", "parent", WS_OVERLAPPEDWINDOW, 0, 0, 600, 300, NULL, 0, 0, NULL); + ok(!!parent, "failed to create window, error %lu\n", GetLastError()); + + SetLastError(0xdeadbeef); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + ok(!hwnd, "Unexpected value %p.\n", hwnd); + ok(GetLastError() == 0xdeadbeef, "Unexpected error %ld.\n", GetLastError()); + + hwnd2 = CreateWindowA("static", "owned1", WS_OVERLAPPEDWINDOW, 0, 0, 600, 300, parent, 0, 0, NULL); + ok(!!hwnd2, "failed to create window, error %lu\n", GetLastError()); + ok(GetWindow(hwnd2, GW_OWNER) == parent, "Unexpected owner.\n"); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + ok(!hwnd, "Unexpected value %p.\n", hwnd); + ShowWindow(hwnd2, SW_SHOW); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); + + popup = CreateWindowA("static", "popup", WS_POPUP, 0, 0, 16, 16, parent, 0, 0, NULL); + ok(!!popup, "Failed to create window, error %lu.\n", GetLastError()); + ok(GetWindow(popup, GW_OWNER) == parent, "Unexpected owner.\n"); + ok(IsWindowEnabled(popup), "Unexpected state.\n"); + ok(!IsWindowVisible(popup), "Unexpected state.\n"); + + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); + + ShowWindow(popup, SW_SHOW); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == popup, "Unexpected value %p.\n", hwnd); + + popup2 = CreateWindowA("static", "popup2", WS_POPUP, 0, 0, 16, 16, parent, 0, 0, NULL); + ok(!!popup2, "Failed to create window, error %lu.\n", GetLastError()); + ok(GetWindow(popup2, GW_OWNER) == parent, "Unexpected owner.\n"); + + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == popup, "Unexpected value %p.\n", hwnd); + + ShowWindow(popup2, SW_SHOW); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == popup2, "Unexpected value %p.\n", hwnd); + + ShowWindow(popup2, SW_HIDE); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == popup, "Unexpected value %p.\n", hwnd); + + DestroyWindow(parent); +} + START_TEST(win) { char **argv; @@ -14369,6 +14428,7 @@ START_TEST(win) test_startupinfo_showwindow(argv); test_cascade_windows(); test_tile_windows(); + test_GW_ENABLEDPOPUP(); /* add the tests above this line */ if (hhook) UnhookWindowsHookEx(hhook); diff --git a/include/winuser.h b/include/winuser.h index 8aea860b9c5..b74bc3fd6a6 100644 --- a/include/winuser.h +++ b/include/winuser.h @@ -1251,6 +1251,7 @@ typedef struct tagSTYLESTRUCT { #define GW_HWNDPREV 3 #define GW_OWNER 4 #define GW_CHILD 5 +#define GW_ENABLEDPOPUP 6 /* GetAncestor() constants */ #define GA_PARENT 1 -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9388
From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/user32/tests/win.c | 6 ------ dlls/win32u/window.c | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index ad49db58811..4957bb46314 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -14194,7 +14194,6 @@ static void test_GW_ENABLEDPOPUP(void) ok(!hwnd, "Unexpected value %p.\n", hwnd); ShowWindow(hwnd2, SW_SHOW); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); popup = CreateWindowA("static", "popup", WS_POPUP, 0, 0, 16, 16, parent, 0, 0, NULL); @@ -14204,12 +14203,10 @@ static void test_GW_ENABLEDPOPUP(void) ok(!IsWindowVisible(popup), "Unexpected state.\n"); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); ShowWindow(popup, SW_SHOW); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == popup, "Unexpected value %p.\n", hwnd); popup2 = CreateWindowA("static", "popup2", WS_POPUP, 0, 0, 16, 16, parent, 0, 0, NULL); @@ -14217,17 +14214,14 @@ static void test_GW_ENABLEDPOPUP(void) ok(GetWindow(popup2, GW_OWNER) == parent, "Unexpected owner.\n"); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == popup, "Unexpected value %p.\n", hwnd); ShowWindow(popup2, SW_SHOW); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == popup2, "Unexpected value %p.\n", hwnd); ShowWindow(popup2, SW_HIDE); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == popup, "Unexpected value %p.\n", hwnd); DestroyWindow(parent); diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index c5c5d0522c8..0bc00df857f 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -643,6 +643,28 @@ HWND get_window_relative( HWND hwnd, UINT rel ) { HWND retval = 0; + if (rel == GW_ENABLEDPOPUP) + { + HWND *list; + int i; + + if (!(list = list_window_children( 0 ))) return NULL; + + for (i = 0; list[i]; i++) + { + if (get_window_relative( list[i], GW_OWNER ) != hwnd) continue; + if (is_window_visible( list[i] )) + { + retval = list[i]; + break; + } + } + + free(list); + + return retval; + } + if (rel == GW_OWNER) /* this one may be available locally */ { WND *win = get_win_ptr( hwnd ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9388
Windows CI failures are in unrelated tests that are executed earlier. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9388#note_121071
Piotr Caban (@piotr) commented about dlls/user32/tests/win.c:
+ ok(!!parent, "failed to create window, error %lu\n", GetLastError()); + + SetLastError(0xdeadbeef); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + ok(!hwnd, "Unexpected value %p.\n", hwnd); + ok(GetLastError() == 0xdeadbeef, "Unexpected error %ld.\n", GetLastError()); + + hwnd2 = CreateWindowA("static", "owned1", WS_OVERLAPPEDWINDOW, 0, 0, 600, 300, parent, 0, 0, NULL); + ok(!!hwnd2, "failed to create window, error %lu\n", GetLastError()); + ok(GetWindow(hwnd2, GW_OWNER) == parent, "Unexpected owner.\n"); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + ok(!hwnd, "Unexpected value %p.\n", hwnd); + ShowWindow(hwnd2, SW_SHOW); + hwnd = GetWindow(parent, GW_ENABLEDPOPUP); + todo_wine + ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); It doesn't work for disabled windows:
```suggestion:-0+0 ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); EnableWindow(hwnd2, FALSE); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); ok(!hwnd, "Unexpected value %p.\n", hwnd); EnableWindow(hwnd2, TRUE); ``` -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9388#note_121075
participants (3)
-
Nikolay Sivov -
Nikolay Sivov (@nsivov) -
Piotr Caban (@piotr)