From 837ad4a36f7e824909b2d5d4cd0787c2ecbbf987 Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Mon, 25 Jul 2011 22:26:44 +0000 Subject: [PATCH] Activate only the top window in a group and not all windows. Fixes #6652 and #6616. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42487 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/decorators/SATDecorator/SATGroup.cpp | 7 +++++++ src/add-ons/decorators/SATDecorator/SATGroup.h | 1 + .../decorators/SATDecorator/StackAndTile.cpp | 15 ++++++--------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/add-ons/decorators/SATDecorator/SATGroup.cpp b/src/add-ons/decorators/SATDecorator/SATGroup.cpp index ab98faae02..209afea68c 100644 --- a/src/add-ons/decorators/SATDecorator/SATGroup.cpp +++ b/src/add-ons/decorators/SATDecorator/SATGroup.cpp @@ -78,6 +78,13 @@ WindowArea::MoveWindowToPosition(SATWindow* window, int32 index) } +SATWindow* +WindowArea::TopWindow() +{ + return fWindowLayerOrder.ItemAt(fWindowLayerOrder.CountItems() - 1); +} + + bool WindowArea::_AddWindow(SATWindow* window, SATWindow* after) { diff --git a/src/add-ons/decorators/SATDecorator/SATGroup.h b/src/add-ons/decorators/SATDecorator/SATGroup.h index 6324b3fe08..3f26050c6c 100644 --- a/src/add-ons/decorators/SATDecorator/SATGroup.h +++ b/src/add-ons/decorators/SATDecorator/SATGroup.h @@ -144,6 +144,7 @@ public: const SATWindowList& LayerOrder() { return fWindowLayerOrder; } bool MoveWindowToPosition(SATWindow* window, int32 index); + SATWindow* TopWindow(); Crossing* LeftTopCrossing() { return fLeftTopCrossing.Get(); } diff --git a/src/add-ons/decorators/SATDecorator/StackAndTile.cpp b/src/add-ons/decorators/SATDecorator/StackAndTile.cpp index 07d902d152..32a6f5be73 100644 --- a/src/add-ons/decorators/SATDecorator/StackAndTile.cpp +++ b/src/add-ons/decorators/SATDecorator/StackAndTile.cpp @@ -502,15 +502,12 @@ StackAndTile::_ActivateWindow(SATWindow* satWindow) 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());