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/tr…
==============================================================================
--- 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,