Dmitry Timoshkov : user32: SetWindowPos() should check the final window position in screen coords before adding SWP_NOMOVE .
Alexandre Julliard
julliard at winehq.org
Mon Apr 2 13:14:52 CDT 2012
Module: wine
Branch: master
Commit: 38a76ecb0386d37d30b06b7947ed52be77ec9f1e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=38a76ecb0386d37d30b06b7947ed52be77ec9f1e
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Fri Mar 23 16:58:13 2012 +0800
user32: SetWindowPos() should check the final window position in screen coords before adding SWP_NOMOVE.
---
dlls/user32/winpos.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index 42f6b3e..c4b61a8 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)
More information about the wine-cvs
mailing list