diff -r 1772663c5b4e -r 60626d494346 filemanager/Engine/src/CFileManagerEngine.cpp --- a/filemanager/Engine/src/CFileManagerEngine.cpp Mon Mar 15 12:39:38 2010 +0200 +++ b/filemanager/Engine/src/CFileManagerEngine.cpp Wed Mar 31 21:15:58 2010 +0300 @@ -77,8 +77,8 @@ 0x21B2, // Downwards arrow with tip leftwards 0, // Array terminator }; +const TUint KDiskEventCheckInterval = 100000; // microseconds -//const TInt KMGFileArrayGranularity = 32; // ============================ LOCAL FUNCTIONS ================================ @@ -122,7 +122,7 @@ // ----------------------------------------------------------------------------- // CFileManagerEngine::CFileManagerEngine( RFs& aFs ) : - iFs( aFs ), iObserver( NULL ), iSisFile( EFalse ) + iFs( aFs ), iObserver( NULL ), iSisFile( EFalse ),iDelayedDiskEventNotify( NULL ) { FUNC_LOG } @@ -222,6 +222,11 @@ delete iUtils; delete iDriveName; delete iFeatureManager; + if( iDelayedDiskEventNotify != NULL ) + { + iDelayedDiskEventNotify->Cancel(); + delete iDelayedDiskEventNotify; + } } // ----------------------------------------------------------------------------- @@ -1156,6 +1161,20 @@ } // ------------------------------------------------------------------------------ +// CFileManagerEngine::DriveAddedOrChangeAsyncL +// +// ------------------------------------------------------------------------------ +// +TInt CFileManagerEngine::DriveAddedOrChangeAsyncL( TAny* aPtr ) + { + static_cast( aPtr )->DriveAddedOrChangedL(); + + //return value will be ignored by CPeriodic that calls this function + //following line keeps the compiler happy + return 0; + } + +// ------------------------------------------------------------------------------ // CFileManagerEngine::DriveAddedOrChangedL // // ------------------------------------------------------------------------------ @@ -1187,6 +1206,7 @@ !iWaitDialogOn && !iRefresher->IsActive() ) { + StopDiskEventNotifyTimerAsync(); TPtrC dir( iNavigator->CurrentDirectory() ); if ( dir.Length() ) { @@ -1222,6 +1242,22 @@ MFileManagerProcessObserver::ENotifyDisksChanged, 0 ); } } + else + { + if( ( iProcessObserver == NULL ) || iEmbeddedApplicationOn ) + { + //Do not refresh while embedded application is running or process observer is not set + StopDiskEventNotifyTimerAsync(); + } + else + { + if( iRefresher->IsActive() ) + { + //start Timer and notify disk event until current disk refresh finishes + StartDiskEventNotifyTimerAsyncL(); + } + } + } } } @@ -2217,5 +2253,38 @@ iRemovableDrvHandler->DeleteBackupsL(); } +// --------------------------------------------------------------------------- +// CFileManagerEngine::StartDiskEventNotifyTimerAsyncL() +// --------------------------------------------------------------------------- +// +void CFileManagerEngine::StartDiskEventNotifyTimerAsyncL() + { + if ( iDelayedDiskEventNotify == NULL ) + { + iDelayedDiskEventNotify = CPeriodic::NewL( CActive::EPriorityStandard ); + } + if ( !iDelayedDiskEventNotify->IsActive() ) + { + //ignore disk event notification while timer is already active + iDelayedDiskEventNotify->Start( KDiskEventCheckInterval, + KDiskEventCheckInterval, + TCallBack( DriveAddedOrChangeAsyncL, this ) ); + } + } -// End of File +// --------------------------------------------------------------------------- +// CFileManagerEngine::StopDiskEventNotifyTimerAsync() +// --------------------------------------------------------------------------- +// +void CFileManagerEngine::StopDiskEventNotifyTimerAsync() + { + if ( iDelayedDiskEventNotify != NULL ) + { + iDelayedDiskEventNotify->Cancel(); + delete iDelayedDiskEventNotify; + iDelayedDiskEventNotify = NULL; + } + } + + +// End of File