diff -r 0b3699f6c654 -r e36b2f4799c0 taskswitcher/utils/src/tswindowgroupsmonitor.cpp --- a/taskswitcher/utils/src/tswindowgroupsmonitor.cpp Fri Sep 17 08:32:18 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* - * 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 "tswindowgroupsobserver.h" -#include - -const int KOrdinalPositionNoZOrder(-1); -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CTsWindowGroupsMonitor* CTsWindowGroupsMonitor::NewL(MTsResourceManager &resources) -{ - CTsWindowGroupsMonitor* self = new (ELeave) CTsWindowGroupsMonitor(resources); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CTsWindowGroupsMonitor::CTsWindowGroupsMonitor(MTsResourceManager &resources) -: - CActive(EPriorityStandard), - mResources(resources) -{ - CActiveScheduler::Add(this); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::ConstructL() -{ - - // Initial window group - mWg = RWindowGroup (mResources.WsSession()); - User::LeaveIfError (mWg.Construct ((TUint32)&mWg, EFalse)); - mWg.SetOrdinalPosition (KOrdinalPositionNoZOrder); - mWg.EnableReceiptOfFocus (EFalse); - - // Hide window - CApaWindowGroupName* wn = CApaWindowGroupName::NewLC(mResources.WsSession()); - wn->SetHidden (ETrue); - wn->SetWindowGroupName (mWg); - CleanupStack::PopAndDestroy (wn); - - // Window group change event - User::LeaveIfError (mWg.EnableGroupListChangeEvents()); - Subscribe(); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CTsWindowGroupsMonitor::~CTsWindowGroupsMonitor() -{ - CActive::Cancel(); - mWg.Close(); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::SubscribeL(MTsWindowGroupsObserver &observer) -{ - const TInt offset(mObservers.Find(&observer)); - KErrNotFound == offset ? mObservers.InsertL(&observer, 0) : - User::Leave(KErrAlreadyExists); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::Cancel(MTsWindowGroupsObserver & observer) -{ - const TInt offset(mObservers.Find(&observer)); - if (KErrNotFound != offset) { - mObservers.Remove(offset); - } -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::RunL() -{ - User::LeaveIfError(iStatus.Int()); - ProvideEventL(); - Subscribe(); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::DoCancel() -{ - if (IsActive()) { - mResources.WsSession().EventReadyCancel(); - } -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CTsWindowGroupsMonitor::RunError(TInt error) -{ - if (!IsActive() && KErrCancel != error) { - Subscribe(); - } - return KErrNone; -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::Subscribe() -{ - mResources.WsSession().EventReady( &iStatus ); - SetActive(); -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::ProvideEventL() -{ - TWsEvent wsEvent; - mResources.WsSession().GetEvent(wsEvent); - for (TInt iter(0); iter < mObservers.Count(); ++iter) { - ProvideEventL(wsEvent, *mObservers[iter]); - } -} - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CTsWindowGroupsMonitor::ProvideEventL(TWsEvent event, - MTsWindowGroupsObserver &observer) -{ - RArray wgInfo; - CleanupClosePushL(wgInfo); - switch(event.Type()) { - case EEventWindowGroupListChanged: - User::LeaveIfError(mResources.WsSession().WindowGroupList(0, &wgInfo)); - observer.HandleWindowGroupChanged(mResources, wgInfo.Array()); - break; - } - CleanupStack::PopAndDestroy(&wgInfo); -}