Author: czeidler Date: 2010-08-23 08:27:08 +0200 (Mon, 23 Aug 2010) New Revision: 38313 Changeset: http://dev.haiku-os.org/changeset/38313 Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp Log: - Update the size constraints when a window has been resized. - Remove superflouse and wrong SetRange. Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp =================================================================== --- haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp 2010-08-23 06:21:55 UTC (rev 38312) +++ haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp 2010-08-23 06:27:08 UTC (rev 38313) @@ -90,6 +90,29 @@ void +SATWindow::UpdateGroupWindowsSize() +{ + SATGroup* group = GetGroup(); + if (!group) + return; + + for (int i = 0; i < group->CountItems(); i++) { + SATWindow* window = group->WindowAt(i); + if (window == this) + continue; + window->UpdateWindowSize(); + } +} + + +void +SATWindow::UpdateWindowSize() +{ + fGroupCookie->UpdateWindowSize(); +} + + +void SATWindow::MoveWindowToSAT(int32 workspace) { fGroupCookie->MoveWindow(workspace); @@ -458,6 +481,17 @@ } +void +GroupCookie::UpdateWindowSize() +{ + BRect frame = fSATWindow->CompleteWindowFrame(); + + // adjust window size soft constraints + widthConstraint->SetRightSide(frame.Width()); + heightConstraint->SetRightSide(frame.Height()); +} + + bool GroupCookie::Init(SATGroup* group, WindowArea* area) { @@ -474,11 +508,6 @@ rightBorder = linearSpec->AddVariable(); bottomBorder = linearSpec->AddVariable(); - leftBorder->SetRange(-DBL_MAX, DBL_MAX); - topBorder->SetRange(-DBL_MAX, DBL_MAX); - rightBorder->SetRange(-DBL_MAX, DBL_MAX); - bottomBorder->SetRange(-DBL_MAX, DBL_MAX); - if (!leftBorder || !topBorder || !rightBorder || !bottomBorder) { // clean up Uninit(); Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h =================================================================== --- haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h 2010-08-23 06:21:55 UTC (rev 38312) +++ haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h 2010-08-23 06:27:08 UTC (rev 38313) @@ -32,6 +32,7 @@ void DoGroupLayout(SATWindow* triggerWindow); void MoveWindow(int32 workspace); + void UpdateWindowSize(); SATGroup* GetGroup() { return fSATGroup.Get(); } @@ -84,6 +85,9 @@ bool PropagateToGroup(SATGroup* group, WindowArea* area); + void UpdateGroupWindowsSize(); + void UpdateWindowSize(); + //! Move the window to the tab's position. void MoveWindowToSAT(int32 workspace); Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp =================================================================== --- haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp 2010-08-23 06:21:55 UTC (rev 38312) +++ haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp 2010-08-23 06:27:08 UTC (rev 38313) @@ -165,16 +165,27 @@ return; if (SATKeyPressed()) - satWindow->FindSnappingCandidates(); - else - satWindow->DoGroupLayout(); + satWindow->FindSnappingCandidates(); + else + satWindow->DoGroupLayout(); } void StackAndTile::WindowResized(Window* window) { - WindowMoved(window); + SATWindow* satWindow = GetSATWindow(window); + if (!satWindow) + return; + + if (SATKeyPressed()) + satWindow->FindSnappingCandidates(); + else { + satWindow->DoGroupLayout(); + // after solve the layout update the size constraints of all windows in + // the group + satWindow->UpdateGroupWindowsSize(); + } } @@ -185,7 +196,6 @@ if (!satWindow) return; _ActivateWindow(satWindow); - }