diff -r 000000000000 -r d6fe6244b863 memspyui/memspywindowserverhelper/src/MemSpyEngineHelperWindowServerImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memspyui/memspywindowserverhelper/src/MemSpyEngineHelperWindowServerImpl.cpp Tue Feb 02 00:17:27 2010 +0200 @@ -0,0 +1,232 @@ +/* +* 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 "MemSpyEngineHelperWindowServerImpl.h" + +// System includes +#include +#include + +// ============================= LOCAL FUNCTIONS =============================== + +EXPORT_C MMemSpyEngineHelperWindowServer* NewMemSpyEngineHelperWindowServerImplL() + { + return CMemSpyEngineHelperWindowServerImpl::NewL(); + } + + +// ============================ MEMBER FUNCTIONS =============================== + +CMemSpyEngineHelperWindowServerImpl::CMemSpyEngineHelperWindowServerImpl() + { + } + + +CMemSpyEngineHelperWindowServerImpl::~CMemSpyEngineHelperWindowServerImpl() + { + iWsSession.Close(); + } + + +void CMemSpyEngineHelperWindowServerImpl::ConstructL() + { + User::LeaveIfError( iWsSession.Connect() ); + } + + +EXPORT_C CMemSpyEngineHelperWindowServerImpl* CMemSpyEngineHelperWindowServerImpl::NewL() + { + CMemSpyEngineHelperWindowServerImpl* self = new(ELeave) CMemSpyEngineHelperWindowServerImpl(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +EXPORT_C MMemSpyEngineWindowGroupList* CMemSpyEngineHelperWindowServerImpl::WindowGroupListL() + { + CMemSpyEngineWindowGroupListImpl* list = CMemSpyEngineWindowGroupListImpl::NewLC(); + // + RArray groups; + CleanupClosePushL( groups ); + // + GetWindowGroupListL( groups ); + // + const TInt count = groups.Count(); + for( TInt i = 0; i < count; i++ ) + { + list->AddItemL( groups[ i ] ); + } + // + CleanupStack::PopAndDestroy( &groups ); + + // Done + CleanupStack::Pop( list ); + return list; + } + + +EXPORT_C void CMemSpyEngineHelperWindowServerImpl::GetWindowGroupListL( RArray& aWindowGroups ) + { + TInt count; + User::LeaveIfError( count = iWsSession.NumWindowGroups() ); + RArray array; + CleanupClosePushL( array ); + User::LeaveIfError( iWsSession.WindowGroupList( &array ) ); + for (TInt i =0; i < count; i++ ) + { + TMemSpyEngineWindowGroupBasicInfo group; + group.iId = array[i].iId; + TThreadId threadId; + RThread thread; + iWsSession.GetWindowGroupClientThreadId( array[i].iId, threadId ); + group.iThreadId = threadId; + group.iOrdinalPosition = i; + if ( !thread.Open( threadId ) ) + { + _LIT( KLineFormatSpec, "%d\t%S" ); + group.iFullName.Format( KLineFormatSpec, group.iId, &thread.Name() ); + } + else + { + _LIT( KLineFormatSpec, "%d\t" ); + group.iFullName.Format( KLineFormatSpec, group.iId ); + } + thread.Close(); + aWindowGroups.AppendL( group ); + } + CleanupStack::PopAndDestroy( &array ); + } + + +EXPORT_C void CMemSpyEngineHelperWindowServerImpl::GetWindowGroupDetailsL( TInt aWindowGroupId, TMemSpyEngineWindowGroupDetails& aWindowGroupDetails ) + { + TThreadId threadId; + RThread thread; + iWsSession.GetWindowGroupClientThreadId( aWindowGroupId, threadId ); + aWindowGroupDetails.iThreadId = threadId; + aWindowGroupDetails.iId = aWindowGroupId; + if ( !thread.Open( threadId ) ) + { + aWindowGroupDetails.iFullName.Copy( thread.Name() ); + } + else + { + aWindowGroupDetails.iFullName.Copy( _L("") ); + } + thread.Close(); + aWindowGroupDetails.iPriority = iWsSession.GetWindowGroupOrdinalPriority( aWindowGroupId ); + aWindowGroupDetails.iWindowGroupHandle = iWsSession.GetWindowGroupHandle( aWindowGroupId ); + CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC( iWsSession, aWindowGroupId ); + aWindowGroupDetails.iUID = wgName->AppUid(); + aWindowGroupDetails.iIsBusy = wgName->IsBusy(); + aWindowGroupDetails.iIsSystem = wgName->IsSystem(); + aWindowGroupDetails.iIsHidden = wgName->Hidden(); + aWindowGroupDetails.iCaption = wgName->Caption(); + aWindowGroupDetails.iDocName = wgName->DocName(); + CleanupStack::PopAndDestroy( wgName ); + } + + +EXPORT_C void CMemSpyEngineHelperWindowServerImpl::SwitchToL( TInt aWindowGroupId ) + { + TApaTask task( iWsSession ); + CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC( iWsSession, aWindowGroupId ); + task.SetWgId( aWindowGroupId ); + if ( wgName->Hidden() ) + { + User::Leave( KErrGeneral ); + } + if ( !task.Exists() ) + { + User::Leave( KErrNotFound ); + } + task.BringToForeground(); + CleanupStack::PopAndDestroy( wgName ); + } + + + + + + + + + +CMemSpyEngineWindowGroupListImpl::CMemSpyEngineWindowGroupListImpl() + { + } + + +CMemSpyEngineWindowGroupListImpl::~CMemSpyEngineWindowGroupListImpl() + { + iItems.Close(); + } + + +void CMemSpyEngineWindowGroupListImpl::ConstructL() + { + } + + +CMemSpyEngineWindowGroupListImpl* CMemSpyEngineWindowGroupListImpl::NewLC() + { + CMemSpyEngineWindowGroupListImpl* self = new(ELeave) CMemSpyEngineWindowGroupListImpl(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +EXPORT_C TInt CMemSpyEngineWindowGroupListImpl::Count() const + { + return iItems.Count(); + } + + +EXPORT_C const TMemSpyEngineWindowGroupBasicInfo& CMemSpyEngineWindowGroupListImpl::At( TInt aIndex ) const + { + return iItems[ aIndex ]; + } + + +EXPORT_C TInt CMemSpyEngineWindowGroupListImpl::ItemIndex( const TMemSpyEngineWindowGroupBasicInfo& /*aEntry*/ ) const + { + TInt ret = KErrNotFound; + return ret; + } + + +void CMemSpyEngineWindowGroupListImpl::AddItemL( TMemSpyEngineWindowGroupBasicInfo& aItem ) + { + iItems.AppendL( aItem ); + } + + +EXPORT_C TInt CMemSpyEngineWindowGroupListImpl::MdcaCount() const + { + return Count(); + } + + +EXPORT_C TPtrC CMemSpyEngineWindowGroupListImpl::MdcaPoint( TInt aIndex ) const + { + return TPtrC( At( aIndex ).iFullName ); + } + +