src/screensaverengine.cpp
branchRCL_3
changeset 20 d1f14bc6a2ab
parent 18 98bf2adac59c
child 21 724d4ec22f0d
equal deleted inserted replaced
18:98bf2adac59c 20:d1f14bc6a2ab
    68 // CScreensaverEngine::~CScreensaverEngine
    68 // CScreensaverEngine::~CScreensaverEngine
    69 // -----------------------------------------------------------------------------
    69 // -----------------------------------------------------------------------------
    70 //
    70 //
    71 CScreensaverEngine::~CScreensaverEngine( )
    71 CScreensaverEngine::~CScreensaverEngine( )
    72     {
    72     {
       
    73     iAsyncCb.Cancel();
    73     StopActivityMonitoring( iActivityManagerScreensaver );
    74     StopActivityMonitoring( iActivityManagerScreensaver );
    74     DisableSharedDataAndMonitor();
    75     DisableSharedDataAndMonitor();
    75     delete iIndicatorArray;
    76     delete iIndicatorArray;
    76     KillTimer( iPreviewTimer );
    77     KillTimer( iPreviewTimer );
    77     KillTimer( iExpiryTimer );
    78     KillTimer( iExpiryTimer );
   141     // Also not OK to start until system startup has been completed
   142     // Also not OK to start until system startup has been completed
   142     if ( ( !DisplayFlag() ) && ( iSharedDataI->IsSystemStartupComplete() ) )
   143     if ( ( !DisplayFlag() ) && ( iSharedDataI->IsSystemStartupComplete() ) )
   143         {
   144         {
   144         if ( !iScreenSaverIsOn )
   145         if ( !iScreenSaverIsOn )
   145             {
   146             {
   146             // connect in StartScreenSaver, intercept and capture application 
   147             // Activating is done asynchronously to prevent screensaver from
   147             // key event. It makes sure this event will not be received 
   148             // flashing quickly in some cases. This flashing happens e.g. when
   148             // by other applictions when screensaver is activated.
   149             // a call is missed and a note is showed about it.
   149             iAknUiServer.ConnectAndSendAppsKeySuppress(ETrue);
   150             iAsyncCb.CallBack();
   150             iScreenSaverIsOn = ETrue;
       
   151 
       
   152             // Report whether started from Idle BEFORE bringing to foreground
       
   153             iSharedDataI->SetSSStartedFromIdleStatus();
       
   154             
       
   155             if ( !View()->IsContentlessScreensaver() )
       
   156                 {
       
   157                 ScreensaverUtility::BringToForeground();
       
   158                 }
       
   159 
       
   160             SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)");
       
   161 
       
   162             // Compress heap while displaying. No longer possible to
       
   163             // compress all heaps (User::CompressAllHeaps() is a no-op)
       
   164             User::Heap().Compress();
       
   165             
       
   166             DisplayObject();
       
   167             }
   151             }
   168         else
   152         else
   169             {
   153             {
   170             SCRLOGGER_WRITE("Model: StartScreenSaver(): already on, ignore");
   154             SCRLOGGER_WRITE("Model: StartScreenSaver(): already on, ignore");
   171             }
   155             }
   182 // -----------------------------------------------------------------------------
   166 // -----------------------------------------------------------------------------
   183 //
   167 //
   184 void CScreensaverEngine::StopScreenSaver()
   168 void CScreensaverEngine::StopScreenSaver()
   185     {
   169     {
   186     SCRLOGGER_WRITE("Stopping Screensaver");
   170     SCRLOGGER_WRITE("Stopping Screensaver");
       
   171     iAsyncCb.Cancel();
   187 
   172 
   188     if ( iSharedDataI->IsKeyguardOn() || iScreenSaverIsPreviewing )
   173     if ( iSharedDataI->IsKeyguardOn() || iScreenSaverIsPreviewing )
   189         {
   174         {
   190         StartPauseTimer();
   175         StartPauseTimer();
   191         }
   176         }
   494 
   479 
   495 // -----------------------------------------------------------------------------
   480 // -----------------------------------------------------------------------------
   496 // CScreensaverEngine::CScreensaverEngine
   481 // CScreensaverEngine::CScreensaverEngine
   497 // -----------------------------------------------------------------------------
   482 // -----------------------------------------------------------------------------
   498 //
   483 //
   499 CScreensaverEngine::CScreensaverEngine()
   484 CScreensaverEngine::CScreensaverEngine() : iAsyncCb( CActive::EPriorityLow )
   500     {
   485     {
   501 
   486     TCallBack callbackFunc( StartSaverCb, this );
       
   487     iAsyncCb.Set( callbackFunc );
   502     }
   488     }
   503 
   489 
   504 // -----------------------------------------------------------------------------
   490 // -----------------------------------------------------------------------------
   505 // CScreensaverEngine::ConstructL
   491 // CScreensaverEngine::ConstructL
   506 // -----------------------------------------------------------------------------
   492 // -----------------------------------------------------------------------------
   870 
   856 
   871     return KErrNone;
   857     return KErrNone;
   872     }
   858     }
   873 
   859 
   874 
   860 
       
   861 // ---------------------------------------------------------------------------
       
   862 // Callback to do the screensaver starting.
       
   863 // ---------------------------------------------------------------------------
       
   864 //
       
   865 TInt CScreensaverEngine::StartSaverCb( TAny* aPtr )
       
   866     {
       
   867     CScreensaverEngine* self = static_cast<CScreensaverEngine*>( aPtr );
       
   868     // connect in StartScreenSaver, intercept and capture application 
       
   869     // key event. It makes sure this event will not be received 
       
   870     // by other applictions when screensaver is activated.
       
   871     self->iAknUiServer.ConnectAndSendAppsKeySuppress(ETrue);
       
   872     self->iScreenSaverIsOn = ETrue;
       
   873 
       
   874     // Report whether started from Idle BEFORE bringing to foreground
       
   875     self->iSharedDataI->SetSSStartedFromIdleStatus();
       
   876 
       
   877     if ( !self->View()->IsContentlessScreensaver() )
       
   878         {
       
   879         ScreensaverUtility::BringToForeground();
       
   880         }
       
   881 
       
   882     SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)");
       
   883 
       
   884     // Compress heap while displaying. No longer possible to
       
   885     // compress all heaps (User::CompressAllHeaps() is a no-op)
       
   886     User::Heap().Compress();
       
   887 
       
   888     self->DisplayObject();
       
   889     return KErrNone;
       
   890     }
       
   891 
       
   892 
   875 // End of file.
   893 // End of file.