Index: base/shell/explorer-new/traywnd.c =================================================================== --- base/shell/explorer-new/traywnd.c (revision 50446) +++ base/shell/explorer-new/traywnd.c (working copy) @@ -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 @@ -639,7 +640,61 @@ } } + 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; @@ -656,6 +711,8 @@ rcTray.bottom - rcTray.top, SWP_NOZORDER); + ITrayWindowImpl_ResizeWorkArea(This); + ITrayWindowImpl_ApplyClipping(This, TRUE); } @@ -1954,6 +2011,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,