Author: czeidler Date: 2011-07-26 00:26:44 +0200 (Tue, 26 Jul 2011) New Revision: 42487 Changeset: https://dev.haiku-os.org/changeset/42487 Ticket: https://dev.haiku-os.org/ticket/6616 Ticket: https://dev.haiku-os.org/ticket/6652 Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.cpp haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.h haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp Log: Activate only the top window in a group and not all windows. Fixes #6652 and #6616. Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.cpp =================================================================== --- haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.cpp 2011-07-25 22:26:35 UTC (rev 42486) +++ haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.cpp 2011-07-25 22:26:44 UTC (rev 42487) @@ -78,6 +78,13 @@ } +SATWindow* +WindowArea::TopWindow() +{ + return fWindowLayerOrder.ItemAt(fWindowLayerOrder.CountItems() - 1); +} + + bool WindowArea::_AddWindow(SATWindow* window, SATWindow* after) { Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.h =================================================================== --- haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.h 2011-07-25 22:26:35 UTC (rev 42486) +++ haiku/trunk/src/add-ons/decorators/SATDecorator/SATGroup.h 2011-07-25 22:26:44 UTC (rev 42487) @@ -144,6 +144,7 @@ const SATWindowList& LayerOrder() { return fWindowLayerOrder; } bool MoveWindowToPosition(SATWindow* window, int32 index); + SATWindow* TopWindow(); Crossing* LeftTopCrossing() { return fLeftTopCrossing.Get(); } Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp =================================================================== --- haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp 2011-07-25 22:26:35 UTC (rev 42486) +++ haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp 2011-07-25 22:26:44 UTC (rev 42487) @@ -502,15 +502,12 @@ return; area->MoveToTopLayer(satWindow); - //desktop->ActivateWindow(satWindow->GetWindow()); - - WindowIterator iter(group); - for (SATWindow* listWindow = iter.NextWindow(); listWindow != NULL; - listWindow = iter.NextWindow()) { - if (listWindow != satWindow) - //desktop->SendWindowBehind(listWindow->GetWindow(), - // satWindow->GetWindow()); - desktop->ActivateWindow(listWindow->GetWindow()); + const WindowAreaList& areas = group->GetAreaList() ; + for (int32 i = 0; i < areas.CountItems(); i++) { + WindowArea* currentArea = areas.ItemAt(i); + if (currentArea == area) + continue; + desktop->ActivateWindow(currentArea->TopWindow()->GetWindow()); } desktop->ActivateWindow(satWindow->GetWindow());