Commit 03f8f85d authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

user32: Respect monitor work area when sizing or moving a top-level window.

This prevents dragging a window's title bar behind a menu bar across the top of a screen, for example.
parent 304ab65d
...@@ -2625,6 +2625,7 @@ void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam ) ...@@ -2625,6 +2625,7 @@ void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam )
BOOL moved = FALSE; BOOL moved = FALSE;
DWORD dwPoint = GetMessagePos (); DWORD dwPoint = GetMessagePos ();
BOOL DragFullWindows = TRUE; BOOL DragFullWindows = TRUE;
HMONITOR mon = 0;
if (IsZoomed(hwnd) || !IsWindowVisible(hwnd)) return; if (IsZoomed(hwnd) || !IsWindowVisible(hwnd)) return;
...@@ -2673,6 +2674,7 @@ void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam ) ...@@ -2673,6 +2674,7 @@ void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam )
{ {
parent = 0; parent = 0;
mouseRect = get_virtual_screen_rect(); mouseRect = get_virtual_screen_rect();
mon = MonitorFromPoint( pt, MONITOR_DEFAULTTONEAREST );
} }
if (ON_LEFT_BORDER(hittest)) if (ON_LEFT_BORDER(hittest))
...@@ -2749,6 +2751,24 @@ void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam ) ...@@ -2749,6 +2751,24 @@ void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam )
pt.y = max( pt.y, mouseRect.top ); pt.y = max( pt.y, mouseRect.top );
pt.y = min( pt.y, mouseRect.bottom ); pt.y = min( pt.y, mouseRect.bottom );
if (!parent)
{
HMONITOR newmon;
MONITORINFO info;
if ((newmon = MonitorFromPoint( pt, MONITOR_DEFAULTTONULL )))
mon = newmon;
info.cbSize = sizeof(info);
if (mon && GetMonitorInfoW( mon, &info ))
{
pt.x = max( pt.x, info.rcWork.left );
pt.x = min( pt.x, info.rcWork.right );
pt.y = max( pt.y, info.rcWork.top );
pt.y = min( pt.y, info.rcWork.bottom );
}
}
dx = pt.x - capturePoint.x; dx = pt.x - capturePoint.x;
dy = pt.y - capturePoint.y; dy = pt.y - capturePoint.y;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment