Author: mjmartin Date: Sun Jan 30 03:56:40 2011 New Revision: 50568
URL: http://svn.reactos.org/svn/reactos?rev=50568&view=rev Log: [EXPLORER_NEW] Implement resizing the work area. Patch by greenie (greenie__ at hotmail dot com)
See issue #5846 for more details.
Modified: trunk/reactos/base/shell/explorer-new/traywnd.c
Modified: trunk/reactos/base/shell/explorer-new/traywnd.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/explorer-new/tra... ============================================================================== --- trunk/reactos/base/shell/explorer-new/traywnd.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/explorer-new/traywnd.c [iso-8859-1] Sun Jan 30 03:56:40 2011 @@ -59,6 +59,7 @@
DWORD Position; HMONITOR Monitor; + HMONITOR PreviousMonitor; DWORD DraggingPosition; HMONITOR DraggingMonitor;
@@ -230,7 +231,7 @@ MONITORINFO mi;
mi.cbSize = sizeof(mi); - if (!GetMonitorInfo(This->Monitor, + if (!GetMonitorInfo(hMonitor, &mi)) { /* Hm, the monitor is gone? Try to find a monitor where it @@ -640,6 +641,57 @@ }
static VOID +ITrayWindowImpl_ResizeWorkArea(IN OUT ITrayWindowImpl *This) +{ + RECT rcTray,rcWorkArea; + + /* If monitor has changed then fix the previous monitors work area */ + if(This->PreviousMonitor!=This->Monitor) + { + ITrayWindowImpl_GetScreenRect(This, + This->PreviousMonitor, + &rcWorkArea); + SystemParametersInfo(SPI_SETWORKAREA, + 1, + &rcWorkArea, + SPIF_SENDCHANGE); + } + + rcTray = This->rcTrayWnd[This->Position]; + + ITrayWindowImpl_GetScreenRect(This, + This->Monitor, + &rcWorkArea); + This->PreviousMonitor=This->Monitor; + + /* If AutoHide is false then change the workarea to exclude the area that + the taskbar covers. */ + if(!This->AutoHide) + { + switch(This->Position) + { + case ABE_TOP: + rcWorkArea.top=rcTray.bottom; + break; + case ABE_LEFT: + rcWorkArea.left=rcTray.right; + break; + case ABE_RIGHT: + rcWorkArea.right=rcTray.left; + break; + case ABE_BOTTOM: + rcWorkArea.bottom=rcTray.top; + break; + } + } + + SystemParametersInfo(SPI_SETWORKAREA, + 1, + &rcWorkArea, + SPIF_SENDCHANGE); +} + +static VOID ITrayWindowImpl_CheckTrayWndPosition(IN OUT ITrayWindowImpl *This) { RECT rcTray; @@ -655,6 +707,8 @@ rcTray.right - rcTray.left, rcTray.bottom - rcTray.top, SWP_NOZORDER); + + ITrayWindowImpl_ResizeWorkArea(This);
ITrayWindowImpl_ApplyClipping(This, TRUE); @@ -1954,6 +2008,7 @@
if (wParam == SIZE_RESTORED && lParam == 0) { + ITrayWindowImpl_ResizeWorkArea(This); /* Clip the tray window on multi monitor systems so the edges can't overlap into another monitor */ ITrayWindowImpl_ApplyClipping(This,