--- a/photosgallery/viewframework/medialists/src/glxmedialist.cpp Tue May 11 16:13:40 2010 +0300
+++ b/photosgallery/viewframework/medialists/src/glxmedialist.cpp Tue May 25 12:42:31 2010 +0300
@@ -39,6 +39,17 @@
#include "mglxmedialistobserver.h"
#include "glxmediastaticitemdefs.h"
+/**
+ * Min & Max wait interval for a modify event, in microseconds
+ * This is to allow thumbnail manager to procees the event first.
+ */
+const TInt KModifyEventMinWaitInterval = 2000000;
+const TInt KModifyEventMaxWaitInterval = 3000000;
+/**
+ * Maximum items count for minimum wait interval.
+ */
+const TInt KMaxItemsCount = 500;
+
namespace NGlxMediaList
{
/**
@@ -1288,6 +1299,7 @@
iMediaListArray = CGlxMediaListArray::InstanceL();
iCountAttributes.AppendL(KGlxMediaCollectionPluginSpecificSubTitle);
iCountAttributes.AppendL(KGlxMediaGeneralSlideshowableContent);
+ iCountAttributes.AppendL(KMPXMediaGeneralCount);
}
// -----------------------------------------------------------------------------
@@ -1510,6 +1522,32 @@
}
CleanupStack::PopAndDestroy(&itemIndices);
+
+ RPointerArray<CGlxMediaList>& mediaLists = iMediaListArray->Array();
+ TInt listCount = mediaLists.Count();
+ GLX_DEBUG2("ML:HandleItemModifiedL listCount=%d", listCount);
+ if (listCount > 0)
+ {
+ CGlxMediaList* mediaList = mediaLists[listCount-1];
+ // Force a delay to allow TNM to process the modified event
+ if (mediaList == this)
+ {
+ GLX_DEBUG3("ML:HandleItemModifiedL(wait) listCount=%d, Id=%d",
+ listCount, id.Value());
+ TTimeIntervalMicroSeconds32 timeout;
+ timeout = (mediaList->Count() > KMaxItemsCount ?
+ KModifyEventMaxWaitInterval : KModifyEventMinWaitInterval );
+ RTimer timer;
+ CleanupClosePushL(timer);
+ TRequestStatus status;
+ timer.CreateLocal();
+ timer.After(status, timeout);
+ // User::WaitForRequest() will add codescanner warning but is necessary
+ // as User::WaitForAnyRequest() cannot be used in this case
+ User::WaitForRequest(status);
+ CleanupStack::PopAndDestroy(&timer);
+ }
+ }
}
}
@@ -1847,17 +1885,8 @@
void CGlxMediaList::CancelPreviousRequests()
{
- TRACER("CGlxMediaList::CancelPreviousRequests");
-
- TInt focusIndex = FocusIndex();
-
- if(focusIndex >= KErrNone)
- {
- if(!Item(focusIndex).Properties())
- {
- // If media is NULL, cancel the previous pending request.
- // Place a new request for the item in focus, to fetch the media attributes
- iManager->CancelPreviousRequest();
- }
- }
- }
+ TRACER("CGlxMediaList::CancelPreviousRequests");
+ // Cancel the previous pending request.
+ // Place a new request for the item in focus, to fetch the media attributes
+ iManager->CancelPreviousRequest();
+ }