From: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/user32/tests/win.c | 11 ----------- dlls/win32u/window.c | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index 33f3b1212d1..354d6ed5ca3 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -14197,14 +14197,12 @@ 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); EnableWindow(hwnd2, FALSE); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); ok(!hwnd, "Unexpected value %p.\n", hwnd); EnableWindow(hwnd2, TRUE); 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); @@ -14214,20 +14212,16 @@ 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); EnableWindow(popup, FALSE); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == hwnd2, "Unexpected value %p.\n", hwnd); EnableWindow(popup, TRUE); 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); @@ -14235,26 +14229,21 @@ 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); ShowWindow(popup2, SW_SHOW); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == popup2, "Unexpected value %p.\n", hwnd); EnableWindow(popup2, FALSE); hwnd = GetWindow(parent, GW_ENABLEDPOPUP); - todo_wine ok(hwnd == popup, "Unexpected value %p.\n", hwnd); /* No longer a top-most window */ diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index c5c5d0522c8..f6373a77103 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -643,6 +643,27 @@ HWND get_window_relative( HWND hwnd, UINT rel ) { HWND retval = 0; + if (rel == GW_ENABLEDPOPUP) + { + HWND *list; + int i; + + if (NtUserGetAncestor( hwnd, GA_ROOT ) != hwnd) return NULL; + if (!(list = list_window_children( 0 ))) return NULL; + + for (i = 0; !retval && list[i]; i++) + { + if (get_window_relative( list[i], GW_OWNER ) != hwnd) continue; + if (!is_window_visible( list[i] )) continue; + if (!is_window_enabled( list[i] )) continue; + retval = list[i]; + } + + 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