From fc0c33529d38b0b03239cf461b2f302f0b0a77b5 Mon Sep 17 00:00:00 2001 From: Adi Oanca Date: Sun, 30 Oct 2005 20:05:18 +0000 Subject: [PATCH] Added support for BRoster::ActivateApp(). Code not tested yet, but it should work. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14579 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/AppServer.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/servers/app/AppServer.cpp b/src/servers/app/AppServer.cpp index ea18c4775d..a04301f42c 100644 --- a/src/servers/app/AppServer.cpp +++ b/src/servers/app/AppServer.cpp @@ -31,6 +31,8 @@ #include "HWInterface.h" #include "RegistrarDefs.h" #include "RGBColor.h" +#include "Layer.h" +#include "WinBorder.h" #include "RootLayer.h" #include "ScreenManager.h" #include "ServerApp.h" @@ -396,8 +398,32 @@ AppServer::_DispatchMessage(int32 code, BPrivate::LinkReceiver& msg) // activate one of the app's windows. if (error == B_OK) { - // TODO: ... error = B_BAD_TEAM_ID; + if (gDesktop->Lock() == B_OK) { + // search for an unhidden window to give focus to + int32 windowCount = gDesktop->WindowList().CountItems(); + Layer *layer; + for (int32 i = 0; i < windowCount; ++i) + // is this layer in fact a WinBorder? + if ((layer = static_cast(gDesktop->WindowList().ItemAtFast(i)))) { + WinBorder *winBorder = dynamic_cast(layer); + // if winBorder is valid and not hidden, then we've found our target + if (winBorder && !winBorder->IsHidden() + && winBorder->App()->ClientTeam() == team) { + if (gDesktop->ActiveRootLayer() + && gDesktop->ActiveRootLayer()->Lock() == B_OK) { + gDesktop->ActiveRootLayer()->SetActive(winBorder); + gDesktop->ActiveRootLayer()->Unlock(); + + if (gDesktop->ActiveRootLayer()->Active() == winBorder) + error = B_OK; + else + error = B_ERROR; + } + } + } + gDesktop->Unlock(); + } } // send the reply