diff -r 9422ed56ee45 -r 63c982fb92f2 harvester/common/src/harvesterpluginfactory.cpp --- a/harvester/common/src/harvesterpluginfactory.cpp Mon Jun 21 16:09:02 2010 +0300 +++ b/harvester/common/src/harvesterpluginfactory.cpp Thu Jul 15 19:07:24 2010 +0300 @@ -439,13 +439,22 @@ { const TInt pluginInfoCount = iHarvesterPluginInfoArray.Count(); TBool itemsLeft( EFalse ); + TBool allPluginsOnIdle( ETrue ); for ( TInt i = pluginInfoCount; --i >= 0; ) { CHarvesterPluginInfo* info = iHarvesterPluginInfoArray[i]; if( info && info->iQueue.Count() ) { itemsLeft = ETrue; - break; + if( aStarted ) + { + // Idle state is only checked if finished event is sent + break; + } + } + if( info && info->iPlugin && !(info->iPlugin->PluginInIdleState()) ) + { + allPluginsOnIdle = EFalse; } } @@ -458,7 +467,7 @@ iHarvesterEventManager->IncreaseItemCount( EHEObserverTypeOverall, KCacheItemCountForEventCaching ); return; } - else if( iHarvesting && !itemsLeft && !aStarted ) + else if( iHarvesting && (!itemsLeft || allPluginsOnIdle) && !aStarted ) { iHarvesting = EFalse; iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStateFinished );