From 3110813c4e2fb883e46ccbb5863cece08e791332 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 23 Mar 2012 16:58:13 +0800 Subject: [PATCH] user32: SetWindowPos() should check the final window position in screen coords before adding SWP_NOMOVE. (cherry picked from commit 38a76ecb0386d37d30b06b7947ed52be77ec9f1e) --- dlls/user32/winpos.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c index 42f6b3e6c0f..c4b61a864d4 100644 --- a/dlls/user32/winpos.c +++ b/dlls/user32/winpos.c @@ -1849,6 +1849,7 @@ static BOOL fixup_flags( WINDOWPOS *winpos ) { HWND parent; RECT window_rect; + POINT pt; WND *wndPtr = WIN_GetPtr( winpos->hwnd ); BOOL ret = TRUE; @@ -1880,12 +1881,15 @@ static BOOL fixup_flags( WINDOWPOS *winpos ) if (!(winpos->flags & SWP_SHOWWINDOW)) winpos->flags |= SWP_NOREDRAW; } - WIN_GetRectangles( winpos->hwnd, COORDS_PARENT, &window_rect, NULL ); + WIN_GetRectangles( winpos->hwnd, COORDS_SCREEN, &window_rect, NULL ); if ((window_rect.right - window_rect.left == winpos->cx) && (window_rect.bottom - window_rect.top == winpos->cy)) winpos->flags |= SWP_NOSIZE; /* Already the right size */ - if ((window_rect.left == winpos->x) && (window_rect.top == winpos->y)) + pt.x = winpos->x; + pt.y = winpos->y; + ClientToScreen( parent, &pt ); + if ((window_rect.left == pt.x) && (window_rect.top == pt.y)) winpos->flags |= SWP_NOMOVE; /* Already the right position */ if ((wndPtr->dwStyle & (WS_POPUP | WS_CHILD)) != WS_CHILD) -- 2.11.4.GIT