taskswitcher/contextengine/tsfswserver/engine/src/tsfswdatalist.cpp
branchRCL_3
changeset 50 137ebc85284b
parent 47 7be2816dbabd
--- a/taskswitcher/contextengine/tsfswserver/engine/src/tsfswdatalist.cpp	Tue May 11 16:02:39 2010 +0300
+++ b/taskswitcher/contextengine/tsfswserver/engine/src/tsfswdatalist.cpp	Tue May 25 12:29:32 2010 +0300
@@ -28,7 +28,8 @@
 #include <featmgr.h>
 #include <apgwgnam.h>
 
-
+// Special case: ovi store secure widget UID
+const TUid KTsOviStoreSecureWidgetUid = { 0x2001A93E };
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -113,7 +114,8 @@
     if ( iTaskListDirty )
         {
         CollectTasksL();
-        // dirty flag is cleared in the above call
+        // clear dirty flag
+		SetDirty(EFalse);
         }
     
     // Get app icon for entries without screenshot,
@@ -153,8 +155,7 @@
 TBool CTsFswDataList::CollectTasksL()
     {
     // clear dirty flag
-    iTaskListDirty = EFalse;
-    TBool changed = EFalse;
+    TBool changed = iTaskListDirty;
     
     RTsFswArray newAppsList;
     RTsFswArray newWidgetsList;
@@ -206,9 +207,9 @@
 // CTsFswDataList::SetDirty()
 // --------------------------------------------------------------------------
 //
-void CTsFswDataList::SetDirty()
+void CTsFswDataList::SetDirty(TBool aDirty)
     {
-    iTaskListDirty = ETrue;
+    iTaskListDirty = aDirty;
     }
 
 // --------------------------------------------------------------------------
@@ -252,15 +253,19 @@
     {
     TBool changed = EFalse;
     CFbsBitmap** bmp = iScreenshots.Find( aId );
+
     if ( bmp )
         {
+        changed |= AssignScreenshotHandle( aId, 0 );
+        changed |= RemoveScreenshotFromParent( (*bmp)->Handle());
         delete *bmp;
         iScreenshots.Remove( aId );
-        changed = AssignScreenshotHandle( aId, 0 );
         }
     return changed;
     }
 
+
+
 // --------------------------------------------------------------------------
 // CTsFswDataList::FindScreenshotByWgId
 // --------------------------------------------------------------------------
@@ -276,10 +281,11 @@
 // CTsFswDataList::MoveEntryAtStart
 // --------------------------------------------------------------------------
 //
-void CTsFswDataList::MoveEntryAtStart(TInt aAppId, TBool aWidget)
+TBool CTsFswDataList::MoveEntryAtStart(TInt aAppId, TBool aWidget)
     {
     TSLOG_CONTEXT( MoveEntryAtStart, TSLOG_LOCAL );
     
+    TBool wasMoved(EFalse);
     TInt appId(0);
     //check embeded case
     if( !aWidget )
@@ -302,15 +308,19 @@
  
     for ( TInt i = 0; i < iData.Count(); ++i )
         {
-        if( iData[i]->AppUid().iUid == appId && iData[i]->Widget() == aWidget)
+        if( iData[i]->AppUid().iUid == appId &&
+            ((iData[i]->Widget() == aWidget) || (iData[i]->AppUid() == KTsOviStoreSecureWidgetUid )))
             {
             CTsFswEntry* entry = iData[i];
             iData.Remove(i);
             iData.Insert(entry, 0);
+            SetDirty(ETrue);
+            wasMoved = ETrue;
             break;
             }
         }
     TSLOG_OUT();
+    return wasMoved;
     }
 
 // --------------------------------------------------------------------------
@@ -629,13 +639,14 @@
     aAsigned = EFalse;
     for (TInt i = 0, ie = iData.Count(); i != ie; ++i)
         {
-        if (iData[i]->Widget())
+        if (iData[i]->Widget() || iData[i]->AppUid() == KTsOviStoreSecureWidgetUid )
             {
             TInt widgetId = iData[i]->AppUid().iUid;
             if (widgetId == aWgIdForScreenshot)
                 {
                 iData[i]->SetScreenshotHandle(aBitmapHandle);
                 aAsigned = ETrue;
+                SetDirty(ETrue);
                 break;
                 }  
 			continue;          
@@ -645,6 +656,7 @@
             {
             iData[i]->SetScreenshotHandle(aBitmapHandle);
             aAsigned = ETrue;
+            SetDirty(ETrue);          
             break;
             }
         }
@@ -800,4 +812,24 @@
     return appUid;
     }
 
+// --------------------------------------------------------------------------
+// CTsFswDataList::RemoveScreenshotFromParent
+// --------------------------------------------------------------------------
+//
+TBool CTsFswDataList::RemoveScreenshotFromParent( TInt aBmpHandle )
+    {
+    TBool changed(EFalse);
+    for( TInt i = 0; i < iData.Count(); ++i)
+        {
+        if ( !iData[i]->Widget() && iData[i]->ScreenshotHandle() == aBmpHandle )
+            {
+            changed = ETrue;
+            iData[i]->SetScreenshotHandle(
+                    LookupScreenshotHandle( iData[i]->WgId()) );
+            }
+        }
+    return changed;
+    }
+
+
 // end of file