diff --git a/src/add-ons/decorators/SATDecorator/SATGroup.h b/src/add-ons/decorators/SATDecorator/SATGroup.h index da0b48df76..a8e499114b 100644 --- a/src/add-ons/decorators/SATDecorator/SATGroup.h +++ b/src/add-ons/decorators/SATDecorator/SATGroup.h @@ -253,6 +253,7 @@ private: protected: SATWindowList fSATWindowList; + LinearSpec fLinearSpec; private: diff --git a/src/add-ons/decorators/SATDecorator/SATWindow.cpp b/src/add-ons/decorators/SATDecorator/SATWindow.cpp index 76216527c7..cbe749662f 100644 --- a/src/add-ons/decorators/SATDecorator/SATWindow.cpp +++ b/src/add-ons/decorators/SATDecorator/SATWindow.cpp @@ -456,6 +456,14 @@ SATWindow::JoinCandidates() } +void +SATWindow::DoWindowLayout() +{ + for (int i = 0; i < fSATSnappingBehaviourList.CountItems(); i++) + fSATSnappingBehaviourList.ItemAt(i)->DoWindowLayout(); +} + + void SATWindow::DoGroupLayout() { @@ -464,8 +472,7 @@ SATWindow::DoGroupLayout() fGroupCookie->DoGroupLayout(this); - for (int i = 0; i < fSATSnappingBehaviourList.CountItems(); i++) - fSATSnappingBehaviourList.ItemAt(i)->DoGroupLayout(); + DoWindowLayout(); } diff --git a/src/add-ons/decorators/SATDecorator/SATWindow.h b/src/add-ons/decorators/SATDecorator/SATWindow.h index b637e5823d..086914f595 100644 --- a/src/add-ons/decorators/SATDecorator/SATWindow.h +++ b/src/add-ons/decorators/SATDecorator/SATWindow.h @@ -100,6 +100,7 @@ public: void FindSnappingCandidates(); bool JoinCandidates(); + void DoWindowLayout(); void DoGroupLayout(); //! \return the complete window frame including the Decorator diff --git a/src/add-ons/decorators/SATDecorator/StackAndTile.cpp b/src/add-ons/decorators/SATDecorator/StackAndTile.cpp index 7687e2bfa3..08dc7c15ef 100644 --- a/src/add-ons/decorators/SATDecorator/StackAndTile.cpp +++ b/src/add-ons/decorators/SATDecorator/StackAndTile.cpp @@ -185,6 +185,17 @@ StackAndTile::WindowResized(Window* window) // after solve the layout update the size constraints of all windows in // the group satWindow->UpdateGroupWindowsSize(); + + // Do a window layout for all windows. TODO: mybe do it a bit more + // efficient + SATGroup* group = satWindow->GetGroup(); + if (!group) + return; + for (int i = 0; i < group->CountItems(); i++) { + SATWindow* listWindow = group->WindowAt(i); + if (listWindow != satWindow) + listWindow->DoWindowLayout(); + } } } @@ -357,15 +368,18 @@ StackAndTile::_ActivateWindow(SATWindow* satWindow) if (!desktop) return; - desktop->ActivateWindow(satWindow->GetWindow()); + //desktop->ActivateWindow(satWindow->GetWindow()); for (int i = 0; i < group->CountItems(); i++) { SATWindow* listWindow = group->WindowAt(i); if (listWindow == satWindow) continue; - desktop->SendWindowBehind(listWindow->GetWindow(), - satWindow->GetWindow()); + //desktop->SendWindowBehind(listWindow->GetWindow(), + // satWindow->GetWindow()); + desktop->ActivateWindow(listWindow->GetWindow()); } + + desktop->ActivateWindow(satWindow->GetWindow()); } diff --git a/src/add-ons/decorators/SATDecorator/StackAndTile.h b/src/add-ons/decorators/SATDecorator/StackAndTile.h index 29ccfb8366..ee12748606 100644 --- a/src/add-ons/decorators/SATDecorator/StackAndTile.h +++ b/src/add-ons/decorators/SATDecorator/StackAndTile.h @@ -127,7 +127,7 @@ public: virtual bool JoinCandidates() = 0; /*! Update the window tab values, solve the layout and move all windows in the group accordantly. */ - virtual void DoGroupLayout() = 0; + virtual void DoWindowLayout() = 0; virtual void RemovedFromArea(WindowArea* area) {} virtual void TabLocationMoved(float location, bool shifting) {} }; diff --git a/src/add-ons/decorators/SATDecorator/Stacking.cpp b/src/add-ons/decorators/SATDecorator/Stacking.cpp index 50a562ef0f..ca2d3fce98 100644 --- a/src/add-ons/decorators/SATDecorator/Stacking.cpp +++ b/src/add-ons/decorators/SATDecorator/Stacking.cpp @@ -254,7 +254,7 @@ SATStacking::JoinCandidates() void -SATStacking::DoGroupLayout() +SATStacking::DoWindowLayout() { _AdjustWindowTabs(); } diff --git a/src/add-ons/decorators/SATDecorator/Stacking.h b/src/add-ons/decorators/SATDecorator/Stacking.h index fe4c43bda8..55457f3ce6 100644 --- a/src/add-ons/decorators/SATDecorator/Stacking.h +++ b/src/add-ons/decorators/SATDecorator/Stacking.h @@ -30,7 +30,8 @@ public: bool FindSnappingCandidates(SATGroup* group); bool JoinCandidates(); - void DoGroupLayout(); + void DoWindowLayout(); + void RemovedFromArea(WindowArea* area); void TabLocationMoved(float location, bool shifting); diff --git a/src/add-ons/decorators/SATDecorator/Tiling.cpp b/src/add-ons/decorators/SATDecorator/Tiling.cpp index 4de5225d1a..d613bb6cba 100644 --- a/src/add-ons/decorators/SATDecorator/Tiling.cpp +++ b/src/add-ons/decorators/SATDecorator/Tiling.cpp @@ -79,7 +79,7 @@ SATTiling::JoinCandidates() void -SATTiling::DoGroupLayout() +SATTiling::DoWindowLayout() { } diff --git a/src/add-ons/decorators/SATDecorator/Tiling.h b/src/add-ons/decorators/SATDecorator/Tiling.h index e70a2d8f8f..ac48aef5a0 100644 --- a/src/add-ons/decorators/SATDecorator/Tiling.h +++ b/src/add-ons/decorators/SATDecorator/Tiling.h @@ -22,7 +22,7 @@ public: bool FindSnappingCandidates(SATGroup* group); bool JoinCandidates(); - void DoGroupLayout(); + void DoWindowLayout(); private: bool _FindFreeAreaInGroup(SATGroup* group);