Author: czeidler Date: 2011-08-10 03:49:00 +0200 (Wed, 10 Aug 2011) New Revision: 42615 Changeset: https://dev.haiku-os.org/changeset/42615 Modified: haiku/trunk/src/servers/app/Window.cpp haiku/trunk/src/servers/app/stackandtile/SATGroup.cpp Log: When stacking windows, move the new window to the parent position and size. Simplify the part in S&T that took care of it before. Modified: haiku/trunk/src/servers/app/Window.cpp =================================================================== --- haiku/trunk/src/servers/app/Window.cpp 2011-08-10 00:20:03 UTC (rev 42614) +++ haiku/trunk/src/servers/app/Window.cpp 2011-08-10 01:49:00 UTC (rev 42615) @@ -2127,8 +2127,20 @@ if (stack == NULL) return false; + BRegion dirty; + // move window to the own position + BRect ownFrame = Frame(); + BRect frame = window->Frame(); + float deltaToX = round(ownFrame.left - frame.left); + float deltaToY = round(ownFrame.top - frame.top); + frame.OffsetBy(deltaToX, deltaToY); + float deltaByX = round(ownFrame.right - frame.right); + float deltaByY = round(ownFrame.bottom - frame.bottom); + dirty.Include(&window->VisibleRegion()); + window->MoveBy(deltaToX, deltaToY, false); + window->ResizeBy(deltaByX, deltaByY, &dirty, false); + // first collect dirt from the window to add - BRegion dirty; ::Decorator* otherDecorator = window->Decorator(); if (otherDecorator != NULL) dirty.Include(otherDecorator->TitleBarRect()); Modified: haiku/trunk/src/servers/app/stackandtile/SATGroup.cpp =================================================================== --- haiku/trunk/src/servers/app/stackandtile/SATGroup.cpp 2011-08-10 00:20:03 UTC (rev 42614) +++ haiku/trunk/src/servers/app/stackandtile/SATGroup.cpp 2011-08-10 01:49:00 UTC (rev 42615) @@ -485,33 +485,32 @@ void -WindowArea::_MoveToSAT(SATWindow* topWindow) +WindowArea::_MoveToSAT(SATWindow* triggerWindow) { - int32 workspace = topWindow->GetWindow()->CurrentWorkspace(); - Desktop* desktop = topWindow->GetWindow()->Desktop(); + int32 workspace = triggerWindow->GetWindow()->CurrentWorkspace(); + Desktop* desktop = triggerWindow->GetWindow()->Desktop(); BRect frameSAT(LeftVar()->Value() - kMakePositiveOffset, TopVar()->Value() - kMakePositiveOffset, RightVar()->Value() - kMakePositiveOffset, BottomVar()->Value() - kMakePositiveOffset); - for (int32 i = 0; i < fWindowList.CountItems(); i++) { - SATWindow* window = fWindowList.ItemAt(i); - window->AdjustSizeLimits(frameSAT); + SATWindow* topWindow = TopWindow(); + topWindow->AdjustSizeLimits(frameSAT); - BRect frame = window->CompleteWindowFrame(); - float deltaToX = round(frameSAT.left - frame.left); - float deltaToY = round(frameSAT.top - frame.top); - frame.OffsetBy(deltaToX, deltaToY); - float deltaByX = round(frameSAT.right - frame.right); - float deltaByY = round(frameSAT.bottom - frame.bottom); + BRect frame = topWindow->CompleteWindowFrame(); + float deltaToX = round(frameSAT.left - frame.left); + float deltaToY = round(frameSAT.top - frame.top); + frame.OffsetBy(deltaToX, deltaToY); + float deltaByX = round(frameSAT.right - frame.right); + float deltaByY = round(frameSAT.bottom - frame.bottom); - desktop->MoveWindowBy(window->GetWindow(), deltaToX, deltaToY, - workspace); - // Update frame to the new position - desktop->ResizeWindowBy(window->GetWindow(), deltaByX, deltaByY); - } + desktop->MoveWindowBy(topWindow->GetWindow(), deltaToX, deltaToY, + workspace); + // Update frame to the new position + desktop->ResizeWindowBy(topWindow->GetWindow(), deltaByX, deltaByY); + UpdateSizeConstaints(frameSAT); }