--- 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.