user32: Make the GetWindowPlacement test pass for tool windows.
Dmitry Timoshkov
dmitry at codeweavers.com
Thu Sep 11 00:35:55 CDT 2008
---
dlls/user32/tests/monitor.c | 5 +----
dlls/user32/winpos.c | 15 +++++++++++++++
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index a66868f..74d1e47 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -361,10 +361,7 @@ static void test_work_area(void)
wp.rcNormalPosition.left, wp.rcNormalPosition.top,
wp.rcNormalPosition.right, wp.rcNormalPosition.bottom);
OffsetRect(&wp.rcNormalPosition, rc_work.left, rc_work.top);
- if (!EqualRect(&mi.rcMonitor, &mi.rcWork)) /* FIXME: remove once Wine is fixed */
- todo_wine ok(EqualRect(&rc_normal, &wp.rcNormalPosition), "normal pos is different\n");
- else
- ok(EqualRect(&rc_normal, &wp.rcNormalPosition), "normal pos is different\n");
+ ok(EqualRect(&rc_normal, &wp.rcNormalPosition), "normal pos is different\n");
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index 21e1554..e977c2c 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -1216,6 +1216,21 @@ BOOL WINAPI GetWindowPlacement( HWND hwnd, WINDOWPLACEMENT *wndpl )
wndpl->rcNormalPosition = pWnd->normal_rect;
WIN_ReleasePtr( pWnd );
+ if (!(GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_TOOLWINDOW))
+ {
+ HWND parent = GetParent( hwnd );
+ if (!parent || parent == GetDesktopWindow())
+ {
+ HMONITOR hmon;
+ MONITORINFO mi;
+
+ hmon = MonitorFromRect( &wndpl->rcNormalPosition, MONITOR_DEFAULTTOPRIMARY );
+ mi.cbSize = sizeof(mi);
+ GetMonitorInfoW( hmon, &mi );
+ OffsetRect( &wndpl->rcNormalPosition, -mi.rcWork.left, -mi.rcWork.top );
+ }
+ }
+
TRACE( "%p: returning min %d,%d max %d,%d normal %s\n",
hwnd, wndpl->ptMinPosition.x, wndpl->ptMinPosition.y,
wndpl->ptMaxPosition.x, wndpl->ptMaxPosition.y,
--
1.6.0.1
More information about the wine-patches
mailing list