From 280defcfcf478d825bd565e7af292ef217aef7fe Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 23 Oct 2006 14:04:52 +0200 Subject: [PATCH] user: Maximize windows to the right monitor on multi-monitor setups. --- dlls/user/winpos.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/dlls/user/winpos.c b/dlls/user/winpos.c index c9307cd6873..9e91bc4dfb7 100644 --- a/dlls/user/winpos.c +++ b/dlls/user/winpos.c @@ -727,6 +727,7 @@ void WINPOS_GetMinMaxInfo( HWND hwnd, POINT *maxSize, POINT *maxPos, { LPINTERNALPOS lpPos; MINMAXINFO MinMax; + HMONITOR monitor; INT xinc, yinc; LONG style = GetWindowLongA( hwnd, GWL_STYLE ); LONG exstyle = GetWindowLongA( hwnd, GWL_EXSTYLE ); @@ -759,8 +760,8 @@ void WINPOS_GetMinMaxInfo( HWND hwnd, POINT *maxSize, POINT *maxPos, } MinMax.ptMinTrackSize.x = GetSystemMetrics(SM_CXMINTRACK); MinMax.ptMinTrackSize.y = GetSystemMetrics(SM_CYMINTRACK); - MinMax.ptMaxTrackSize.x = GetSystemMetrics(SM_CXSCREEN) + 2*GetSystemMetrics(SM_CXFRAME); - MinMax.ptMaxTrackSize.y = GetSystemMetrics(SM_CYSCREEN) + 2*GetSystemMetrics(SM_CYFRAME); + MinMax.ptMaxTrackSize.x = GetSystemMetrics(SM_CXMAXTRACK); + MinMax.ptMaxTrackSize.y = GetSystemMetrics(SM_CYMAXTRACK); if (HAS_DLGFRAME( style, exstyle )) { @@ -798,6 +799,28 @@ void WINPOS_GetMinMaxInfo( HWND hwnd, POINT *maxSize, POINT *maxPos, SendMessageW( hwnd, WM_GETMINMAXINFO, 0, (LPARAM)&MinMax ); + /* if the app didn't change the values, adapt them for the current monitor */ + + if ((monitor = MonitorFromWindow( hwnd, MONITOR_DEFAULTTOPRIMARY ))) + { + MONITORINFO mon_info; + + mon_info.cbSize = sizeof(mon_info); + GetMonitorInfoW( monitor, &mon_info ); + + if (MinMax.ptMaxSize.x == GetSystemMetrics(SM_CXSCREEN) && + MinMax.ptMaxSize.y == GetSystemMetrics(SM_CYSCREEN)) + { + MinMax.ptMaxSize.x = mon_info.rcWork.right - mon_info.rcWork.left; + MinMax.ptMaxSize.y = mon_info.rcWork.bottom - mon_info.rcWork.top; + } + if (MinMax.ptMaxPosition.x == -xinc && MinMax.ptMaxPosition.y == -yinc) + { + MinMax.ptMaxPosition.x = mon_info.rcWork.left - xinc; + MinMax.ptMaxPosition.y = mon_info.rcWork.top - yinc; + } + } + /* Some sanity checks */ TRACE("%d %d / %d %d / %d %d / %d %d\n",