coreapplicationuis/SysAp/Src/SysApTaskList.cpp
changeset 48 2222076f5c60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/SysApTaskList.cpp	Wed Jun 23 18:22:59 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "SysApTaskList.h"
+#include <apgwgnam.h>
+
+CSysApTaskList* CSysApTaskList::NewL(RWsSession& aWsSession)
+	{
+	CSysApTaskList* self = NewLC(aWsSession);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+ CSysApTaskList* CSysApTaskList::NewLC(RWsSession& aWsSession)
+	{
+	CSysApTaskList* self = new(ELeave) CSysApTaskList(aWsSession);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSysApTaskList::CSysApTaskList(RWsSession& aWsSession)
+: iWs(aWsSession)
+	{
+	}
+
+void CSysApTaskList::ConstructL()
+	{
+	UpdateListL();
+	}
+
+ CSysApTaskList::~CSysApTaskList()
+	{
+	iWgs.Close();
+	}
+
+ void CSysApTaskList::UpdateListL()
+	{
+	User::LeaveIfError(iWs.WindowGroupList(0, &iWgs));
+	}
+
+ const RArray<RWsSession::TWindowGroupChainInfo>& CSysApTaskList::WgArray() const
+	{
+	return iWgs;
+	}
+
+ TApaTask CSysApTaskList::FindRootApp(TUid aAppUid) const
+	{
+	TApaTask task(iWs);
+	task.SetWgId(0);		// initialise task to non-existant task
+	// wgId = 0 tells FindAppByUid to start looking for apps
+	TInt wgId=0;
+	FOREVER
+		{
+	 	CApaWindowGroupName::FindByAppUid(aAppUid, iWs, wgId);
+	 	// KErrNotFound means that no more apps can be found
+	 	if (wgId == KErrNotFound)
+	 		break;
+	 	if (IsRootWindowGroup(wgId))
+	 		{
+	 		// Found a root wg with the right app UID, return it.
+	 		task.SetWgId(wgId);
+	 		break;
+	 		}
+		}
+	return task;
+	}
+
+ TBool CSysApTaskList::IsRootWindowGroup(TInt aWgId) const
+	{
+	TInt count = iWgs.Count();
+	for (TInt ii=0; ii<count; ii++)
+		{
+        const RWsSession::TWindowGroupChainInfo& info = iWgs[ii];
+        // find the window group id and check that it has no parent
+        if (info.iId == aWgId)
+        	return (info.iParentId <= 0);
+		}
+	return EFalse;
+	}
+
+ TInt CSysApTaskList::FindParentWgId(TInt aWgId) const
+	{
+	TInt count = iWgs.Count();
+	for (TInt ii=0; ii<count; ii++)
+		{
+        const RWsSession::TWindowGroupChainInfo& info = iWgs[ii];
+        if (info.iId == aWgId && info.iParentId > 0 && info.iParentId != info.iId)
+        	return info.iParentId;
+		}
+	return 0;
+	}
+
+ TInt CSysApTaskList::FindChildWgId(TInt aWgId) const
+	{
+	TInt count = iWgs.Count();
+	for (TInt ii=0; ii<count; ii++)
+		{
+        const RWsSession::TWindowGroupChainInfo& info = iWgs[ii];
+        if (info.iParentId == aWgId && info.iId > 0 && info.iParentId != info.iId)
+        	return info.iId;
+		}
+	return 0;
+	}
+
+
+
+
+