void WindowArea::_MoveToSAT(SATWindow* triggerWindow) { SATWindow* topWindow = TopWindow(); // if there is no window in the group we are done if (topWindow == NULL) return; BRect frameSAT(LeftVar()->Value() - kMakePositiveOffset, TopVar()->Value() - kMakePositiveOffset, RightVar()->Value() - kMakePositiveOffset, BottomVar()->Value() - kMakePositiveOffset); topWindow->AdjustSizeLimits(frameSAT); 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); int32 workspace = triggerWindow->GetWindow()->CurrentWorkspace(); Desktop* desktop = triggerWindow->GetWindow()->Desktop(); desktop->MoveWindowBy(topWindow->GetWindow(), deltaToX, deltaToY, workspace); // Update frame to the new position desktop->ResizeWindowBy(topWindow->GetWindow(), deltaByX, deltaByY); UpdateSizeConstaints(frameSAT); }