Revision: 201025 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 18:39:54 +0300
branchRCL_3
changeset 20 d1f14bc6a2ab
parent 18 98bf2adac59c
child 21 724d4ec22f0d
Revision: 201025 Kit: 2010127
inc/screensaverengine.h
scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPlugin.cpp
src/screensaverengine.cpp
--- a/inc/screensaverengine.h	Mon Jun 21 15:41:25 2010 +0300
+++ b/inc/screensaverengine.h	Thu Jul 15 18:39:54 2010 +0300
@@ -250,6 +250,11 @@
     */
     static TInt HandleExpiryTimerExpiry( TAny* aPtr );
 
+    /**
+     * Callback to do the screensaver starting.
+     */
+    static TInt StartSaverCb( TAny* aPtr );
+
 private:
     
     /**
@@ -331,7 +336,12 @@
     * Set if the pause timer was started when preview was stopped
     */
     TBool iPauseTimerStartedAfterPreview;
-    
+
+    /**
+     * Asynchronous callback to start screensaver.
+     */
+    CAsyncCallBack iAsyncCb;
+
     };
 
 
--- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPlugin.cpp	Mon Jun 21 15:41:25 2010 +0300
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPlugin.cpp	Thu Jul 15 18:39:54 2010 +0300
@@ -370,6 +370,7 @@
             SSPLOGGER_WRITE("No slides selected - launching settings");
             TRAP(ret, ConfigureL(aParam));
             // Check if at least one file is selected    
+            ReadSettings();// update the key value of KThemesScreenSaverSlideSetType
             TRAP(ret, LoadSlidesL());
             if ( ret == KErrNone && iModel->NumberOfSlides() == 0)
                 {
--- a/src/screensaverengine.cpp	Mon Jun 21 15:41:25 2010 +0300
+++ b/src/screensaverengine.cpp	Thu Jul 15 18:39:54 2010 +0300
@@ -70,6 +70,7 @@
 //
 CScreensaverEngine::~CScreensaverEngine( )
     {
+    iAsyncCb.Cancel();
     StopActivityMonitoring( iActivityManagerScreensaver );
     DisableSharedDataAndMonitor();
     delete iIndicatorArray;
@@ -143,27 +144,10 @@
         {
         if ( !iScreenSaverIsOn )
             {
-            // connect in StartScreenSaver, intercept and capture application 
-            // key event. It makes sure this event will not be received 
-            // by other applictions when screensaver is activated.
-            iAknUiServer.ConnectAndSendAppsKeySuppress(ETrue);
-            iScreenSaverIsOn = ETrue;
-
-            // Report whether started from Idle BEFORE bringing to foreground
-            iSharedDataI->SetSSStartedFromIdleStatus();
-            
-            if ( !View()->IsContentlessScreensaver() )
-                {
-                ScreensaverUtility::BringToForeground();
-                }
-
-            SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)");
-
-            // Compress heap while displaying. No longer possible to
-            // compress all heaps (User::CompressAllHeaps() is a no-op)
-            User::Heap().Compress();
-            
-            DisplayObject();
+            // Activating is done asynchronously to prevent screensaver from
+            // flashing quickly in some cases. This flashing happens e.g. when
+            // a call is missed and a note is showed about it.
+            iAsyncCb.CallBack();
             }
         else
             {
@@ -184,6 +168,7 @@
 void CScreensaverEngine::StopScreenSaver()
     {
     SCRLOGGER_WRITE("Stopping Screensaver");
+    iAsyncCb.Cancel();
 
     if ( iSharedDataI->IsKeyguardOn() || iScreenSaverIsPreviewing )
         {
@@ -496,9 +481,10 @@
 // CScreensaverEngine::CScreensaverEngine
 // -----------------------------------------------------------------------------
 //
-CScreensaverEngine::CScreensaverEngine()
+CScreensaverEngine::CScreensaverEngine() : iAsyncCb( CActive::EPriorityLow )
     {
-
+    TCallBack callbackFunc( StartSaverCb, this );
+    iAsyncCb.Set( callbackFunc );
     }
 
 // -----------------------------------------------------------------------------
@@ -872,4 +858,36 @@
     }
 
 
+// ---------------------------------------------------------------------------
+// Callback to do the screensaver starting.
+// ---------------------------------------------------------------------------
+//
+TInt CScreensaverEngine::StartSaverCb( TAny* aPtr )
+    {
+    CScreensaverEngine* self = static_cast<CScreensaverEngine*>( aPtr );
+    // connect in StartScreenSaver, intercept and capture application 
+    // key event. It makes sure this event will not be received 
+    // by other applictions when screensaver is activated.
+    self->iAknUiServer.ConnectAndSendAppsKeySuppress(ETrue);
+    self->iScreenSaverIsOn = ETrue;
+
+    // Report whether started from Idle BEFORE bringing to foreground
+    self->iSharedDataI->SetSSStartedFromIdleStatus();
+
+    if ( !self->View()->IsContentlessScreensaver() )
+        {
+        ScreensaverUtility::BringToForeground();
+        }
+
+    SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)");
+
+    // Compress heap while displaying. No longer possible to
+    // compress all heaps (User::CompressAllHeaps() is a no-op)
+    User::Heap().Compress();
+
+    self->DisplayObject();
+    return KErrNone;
+    }
+
+
 // End of file.