--- 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);
}