diff -r 0b3699f6c654 -r e36b2f4799c0 taskswitcher/server/src/tsscreenshotprovider.cpp --- a/taskswitcher/server/src/tsscreenshotprovider.cpp Fri Sep 17 08:32:18 2010 +0300 +++ b/taskswitcher/server/src/tsscreenshotprovider.cpp Mon Oct 04 00:38:31 2010 +0300 @@ -19,46 +19,104 @@ #include "tsscreenshotprovider.h" #include "tstaskmonitorglobals.h" #include "tsscreenshotmsg.h" +#include "tsidlist.h" const TUid KPluginUID = {0x200267AE}; +const TInt KSkippedApp [] = {0x20022F35 /* <-- hsapplication */}; // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -CTsScreenshotProvider* CTsScreenshotProvider::NewL( MTsDataStorage& aStorage ) +CTsScreenshotProvider* CTsScreenshotProvider::NewL( MTsDataStorage& aStorage, + MTsWindowGroupsMonitor& aMonitor) { - CTsScreenshotProvider *self = new (ELeave)CTsScreenshotProvider( aStorage ); + CTsScreenshotProvider *self = new (ELeave)CTsScreenshotProvider(aStorage, aMonitor); CleanupStack::PushL( self ); self->BaseConstructL(KPluginUID, KNullDesC8); + aMonitor.SubscribeL(*self); CleanupStack::Pop( self ); return self; } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CTsScreenshotProvider::CTsScreenshotProvider( MTsDataStorage& aStorage ) +CTsScreenshotProvider::CTsScreenshotProvider( MTsDataStorage& aStorage, + MTsWindowGroupsMonitor& aMonitor) : - iStorage(aStorage) + iStorage(aStorage), + iMonitor(aMonitor) { //No implementation required } +CTsScreenshotProvider::~CTsScreenshotProvider() + { + iMonitor.Cancel(*this); + } + // ----------------------------------------------------------------------------- -// +void CTsScreenshotProvider::HandleWindowGroupChanged( + MTsResourceManager &aResources, + const MTsRunningApplicationStorage& aStorage) + { + TRAP_IGNORE(HandleWindowGroupChangedL(aResources, aStorage);) + } + // ----------------------------------------------------------------------------- -// +/** + * Retrieve list of applications that shouldn't be displayed in taskswitcher + * and send it to module responsible for screenshot taking. + * Interface implementation. + * @see MTsWindowGroupsObserver::HandleWindowGroupChangedL + */ +void CTsScreenshotProvider::HandleWindowGroupChangedL( + MTsResourceManager& /*aResources*/, + const MTsRunningApplicationStorage& aStorage) + { + const TInt count(sizeof( KSkippedApp ) / sizeof(TInt)); + CTsIdList* list = CTsIdList::NewLC(); + list->AppendL(aStorage.BlockedWindowGroups());//filtered servers + for( TInt iter(0); iter < aStorage.Count(); ++iter ) + { + if(aStorage[iter].IsHiddenL()) + { + list->AppendL(aStorage[iter].WindowGroupId()); + } + else + { + for(TInt blocked(0); blocked < count; ++blocked) + { + if(aStorage[iter].UidL().iUid == KSkippedApp[blocked]) + { + list->AppendL(aStorage[iter].WindowGroupId()); + } + } + } + } + + RBuf8 message; + CleanupClosePushL(message); + message.CreateL(list->Size() + sizeof(TInt)); + + RDesWriteStream stream; + CleanupClosePushL(stream); + stream.Open(message); + stream.WriteInt32L(IgnoreWindowGroups); + stream << (*list); + CleanupStack::PopAndDestroy(&stream); + + SendMessage(message); + CleanupStack::PopAndDestroy(&message); + CleanupStack::PopAndDestroy(list); + } + +// ----------------------------------------------------------------------------- void CTsScreenshotProvider::HandleMessage( const TDesC8& aMsg ) { TRAP_IGNORE( HandleMessageL( aMsg ) ); } // ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// void CTsScreenshotProvider::HandleMessageL( const TDesC8& aMsg ) { RDesReadStream msgStream( aMsg ); @@ -78,7 +136,7 @@ //forward stream to storage iStorage.HandleDataL(msgStream.ReadInt32L(), msgStream); - CleanupStack::PopAndDestroy(screenshotMsg); + CleanupStack::PopAndDestroy(screenshotMsg); break; } @@ -93,9 +151,8 @@ break; } - default: User::Leave(KErrNotSupported); + default: User::Leave(KErrNotSupported); } - CleanupStack::PopAndDestroy(&msgStream); }