Alexandre Julliard : user32: The Z-order of owned windows doesn' t depend on them having the WS_POPUP style.
Alexandre Julliard
julliard at winehq.org
Wed Apr 14 11:24:55 CDT 2010
Module: wine
Branch: master
Commit: b6765134a3174d124d24f8ae3345755d21c70982
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b6765134a3174d124d24f8ae3345755d21c70982
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Apr 13 20:54:15 2010 +0200
user32: The Z-order of owned windows doesn't depend on them having the WS_POPUP style.
---
dlls/user32/tests/win.c | 13 +++++++------
dlls/user32/winpos.c | 7 +++----
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index e3bebe7..a295850 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -2181,7 +2181,7 @@ static void check_z_order_debug(HWND hwnd, HWND next, HWND prev, HWND owner,
hwnd, topmost ? "" : "NOT ");
}
-static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E)
+static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E, DWORD style)
{
HWND hwnd_A, hwnd_B, hwnd_C, hwnd_F;
@@ -2205,7 +2205,7 @@ static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E)
check_z_order(hwnd_D, hwnd_E, 0, 0, FALSE);
hwnd_C = CreateWindowEx(0, "MainWindowClass", NULL,
- WS_POPUP,
+ style,
100, 100, 100, 100,
hwnd_F, 0, GetModuleHandle(0), NULL);
trace("hwnd_C %p\n", hwnd_C);
@@ -2215,7 +2215,7 @@ static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E)
check_z_order(hwnd_C, hwnd_D, 0, hwnd_F, FALSE);
hwnd_B = CreateWindowEx(WS_EX_TOPMOST, "MainWindowClass", NULL,
- WS_POPUP,
+ style,
100, 100, 100, 100,
hwnd_F, 0, GetModuleHandle(0), NULL);
trace("hwnd_B %p\n", hwnd_B);
@@ -2226,7 +2226,7 @@ static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E)
check_z_order(hwnd_B, hwnd_C, 0, hwnd_F, TRUE);
hwnd_A = CreateWindowEx(WS_EX_TOPMOST, "MainWindowClass", NULL,
- WS_POPUP,
+ style,
100, 100, 100, 100,
0, 0, GetModuleHandle(0), NULL);
trace("hwnd_A %p\n", hwnd_A);
@@ -2262,7 +2262,7 @@ static void test_popup_zorder(HWND hwnd_D, HWND hwnd_E)
/* make hwnd_C owned by a topmost window */
DestroyWindow( hwnd_C );
hwnd_C = CreateWindowEx(0, "MainWindowClass", NULL,
- WS_POPUP,
+ style,
100, 100, 100, 100,
hwnd_A, 0, GetModuleHandle(0), NULL);
trace("hwnd_C %p\n", hwnd_C);
@@ -6073,7 +6073,8 @@ START_TEST(win)
test_NCRedraw();
test_children_zorder(hwndMain);
- test_popup_zorder(hwndMain2, hwndMain);
+ test_popup_zorder(hwndMain2, hwndMain, WS_POPUP);
+ test_popup_zorder(hwndMain2, hwndMain, 0);
test_keyboard_input(hwndMain);
test_mouse_input(hwndMain);
test_validatergn(hwndMain);
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index f8a3c41..dd529dc 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -1617,13 +1617,14 @@ static inline void get_valid_rects( const RECT *old_client, const RECT *new_clie
*/
static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter)
{
- LONG style = GetWindowLongW( hwnd, GWL_STYLE );
HWND owner, *list = NULL;
unsigned int i;
TRACE("(%p) hInsertAfter = %p\n", hwnd, hwndInsertAfter );
- if ((style & WS_POPUP) && (owner = GetWindow( hwnd, GW_OWNER )))
+ if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_CHILD) return hwndInsertAfter;
+
+ if ((owner = GetWindow( hwnd, GW_OWNER )))
{
/* make sure this popup stays above the owner */
@@ -1650,7 +1651,6 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter)
}
}
}
- else if (style & WS_CHILD) return hwndInsertAfter;
if (hwndInsertAfter == HWND_BOTTOM) goto done;
if (!list && !(list = WIN_ListChildren( GetDesktopWindow() ))) goto done;
@@ -1677,7 +1677,6 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter)
for ( ; list[i]; i++)
{
if (list[i] == hwnd) break;
- if (!(GetWindowLongW( list[i], GWL_STYLE ) & WS_POPUP)) continue;
if (GetWindow( list[i], GW_OWNER ) != hwnd) continue;
TRACE( "moving %p owned by %p after %p\n", list[i], hwnd, hwndInsertAfter );
SetWindowPos( list[i], hwndInsertAfter, 0, 0, 0, 0,
More information about the wine-cvs
mailing list