user32: Don't use window's parent as an owner if WS_CHILD style is not set.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
47b2238b3d
commit
d13a44e4aa
|
@ -652,6 +652,31 @@ static void test_parent_owner(void)
|
||||||
DestroyWindow( child );
|
DestroyWindow( child );
|
||||||
DestroyWindow( test );
|
DestroyWindow( test );
|
||||||
DestroyWindow( owner );
|
DestroyWindow( owner );
|
||||||
|
|
||||||
|
/* Test that owner window takes into account WS_CHILD flag even if parent is set by SetParent. */
|
||||||
|
owner = create_tool_window( WS_VISIBLE | WS_OVERLAPPEDWINDOW, desktop );
|
||||||
|
SetParent(owner, hwndMain);
|
||||||
|
check_parents( owner, hwndMain, hwndMain, NULL, NULL, hwndMain, owner );
|
||||||
|
test = create_tool_window( WS_VISIBLE | WS_OVERLAPPEDWINDOW, owner );
|
||||||
|
check_parents( test, desktop, owner, NULL, owner, test, test );
|
||||||
|
DestroyWindow( owner );
|
||||||
|
DestroyWindow( test );
|
||||||
|
|
||||||
|
owner = create_tool_window( WS_VISIBLE | WS_CHILD, desktop );
|
||||||
|
SetParent(owner, hwndMain);
|
||||||
|
check_parents( owner, hwndMain, hwndMain, hwndMain, NULL, hwndMain, hwndMain );
|
||||||
|
test = create_tool_window( WS_VISIBLE | WS_OVERLAPPEDWINDOW, owner );
|
||||||
|
check_parents( test, desktop, hwndMain, NULL, hwndMain, test, test );
|
||||||
|
DestroyWindow( owner );
|
||||||
|
DestroyWindow( test );
|
||||||
|
|
||||||
|
owner = create_tool_window( WS_VISIBLE | WS_POPUP | WS_CHILD, desktop );
|
||||||
|
SetParent(owner, hwndMain);
|
||||||
|
check_parents( owner, hwndMain, hwndMain, NULL, NULL, hwndMain, owner );
|
||||||
|
test = create_tool_window( WS_VISIBLE | WS_OVERLAPPEDWINDOW, owner );
|
||||||
|
check_parents( test, desktop, owner, NULL, owner, test, test );
|
||||||
|
DestroyWindow( owner );
|
||||||
|
DestroyWindow( test );
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL CALLBACK enum_proc( HWND hwnd, LPARAM lParam)
|
static BOOL CALLBACK enum_proc( HWND hwnd, LPARAM lParam)
|
||||||
|
|
|
@ -1901,7 +1901,8 @@ DECL_HANDLER(create_window)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else /* owner must be a top-level window */
|
else /* owner must be a top-level window */
|
||||||
while (!is_desktop_window(owner->parent)) owner = owner->parent;
|
while ((owner->style & (WS_POPUP|WS_CHILD)) == WS_CHILD && !is_desktop_window(owner->parent))
|
||||||
|
owner = owner->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
atom = cls_name.len ? find_global_atom( NULL, &cls_name ) : req->atom;
|
atom = cls_name.len ? find_global_atom( NULL, &cls_name ) : req->atom;
|
||||||
|
|
Loading…
Reference in New Issue