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.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42615 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -2127,8 +2127,20 @@ Window::AddWindowToStack(Window* window)
|
|||||||
if (stack == NULL)
|
if (stack == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// first collect dirt from the window to add
|
|
||||||
BRegion dirty;
|
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
|
||||||
::Decorator* otherDecorator = window->Decorator();
|
::Decorator* otherDecorator = window->Decorator();
|
||||||
if (otherDecorator != NULL)
|
if (otherDecorator != NULL)
|
||||||
dirty.Include(otherDecorator->TitleBarRect());
|
dirty.Include(otherDecorator->TitleBarRect());
|
||||||
|
|||||||
@@ -485,32 +485,31 @@ WindowArea::_UnsetNeighbourCorner(Corner* neighbour, Corner* opponent)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WindowArea::_MoveToSAT(SATWindow* topWindow)
|
WindowArea::_MoveToSAT(SATWindow* triggerWindow)
|
||||||
{
|
{
|
||||||
int32 workspace = topWindow->GetWindow()->CurrentWorkspace();
|
int32 workspace = triggerWindow->GetWindow()->CurrentWorkspace();
|
||||||
Desktop* desktop = topWindow->GetWindow()->Desktop();
|
Desktop* desktop = triggerWindow->GetWindow()->Desktop();
|
||||||
|
|
||||||
BRect frameSAT(LeftVar()->Value() - kMakePositiveOffset,
|
BRect frameSAT(LeftVar()->Value() - kMakePositiveOffset,
|
||||||
TopVar()->Value() - kMakePositiveOffset,
|
TopVar()->Value() - kMakePositiveOffset,
|
||||||
RightVar()->Value() - kMakePositiveOffset,
|
RightVar()->Value() - kMakePositiveOffset,
|
||||||
BottomVar()->Value() - kMakePositiveOffset);
|
BottomVar()->Value() - kMakePositiveOffset);
|
||||||
|
|
||||||
for (int32 i = 0; i < fWindowList.CountItems(); i++) {
|
SATWindow* topWindow = TopWindow();
|
||||||
SATWindow* window = fWindowList.ItemAt(i);
|
topWindow->AdjustSizeLimits(frameSAT);
|
||||||
window->AdjustSizeLimits(frameSAT);
|
|
||||||
|
|
||||||
BRect frame = window->CompleteWindowFrame();
|
BRect frame = topWindow->CompleteWindowFrame();
|
||||||
float deltaToX = round(frameSAT.left - frame.left);
|
float deltaToX = round(frameSAT.left - frame.left);
|
||||||
float deltaToY = round(frameSAT.top - frame.top);
|
float deltaToY = round(frameSAT.top - frame.top);
|
||||||
frame.OffsetBy(deltaToX, deltaToY);
|
frame.OffsetBy(deltaToX, deltaToY);
|
||||||
float deltaByX = round(frameSAT.right - frame.right);
|
float deltaByX = round(frameSAT.right - frame.right);
|
||||||
float deltaByY = round(frameSAT.bottom - frame.bottom);
|
float deltaByY = round(frameSAT.bottom - frame.bottom);
|
||||||
|
|
||||||
|
desktop->MoveWindowBy(topWindow->GetWindow(), deltaToX, deltaToY,
|
||||||
|
workspace);
|
||||||
|
// Update frame to the new position
|
||||||
|
desktop->ResizeWindowBy(topWindow->GetWindow(), deltaByX, deltaByY);
|
||||||
|
|
||||||
desktop->MoveWindowBy(window->GetWindow(), deltaToX, deltaToY,
|
|
||||||
workspace);
|
|
||||||
// Update frame to the new position
|
|
||||||
desktop->ResizeWindowBy(window->GetWindow(), deltaByX, deltaByY);
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateSizeConstaints(frameSAT);
|
UpdateSizeConstaints(frameSAT);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user