--- a/src/screensaverengine.cpp Fri Mar 12 15:42:50 2010 +0200
+++ b/src/screensaverengine.cpp Mon Mar 15 12:40:37 2010 +0200
@@ -75,6 +75,7 @@
DisableSharedDataAndMonitor();
delete iIndicatorArray;
KillTimer( iPreviewTimer );
+ KillTimer( iExpiryTimer );
iAknUiServer.Close();
}
@@ -153,6 +154,8 @@
// Report whether started from Idle BEFORE bringing to foreground
iSharedDataI->SetSSStartedFromIdleStatus();
+
+ iSharedDataI->SetSSForcedLightsOn(1);
ScreensaverUtility::BringToForeground();
@@ -194,6 +197,8 @@
iScreenSaverIsOn = EFalse ;
+ KillTimer( iExpiryTimer );
+
View()->HideDisplayObject();
}
@@ -260,6 +265,8 @@
UpdateIndicatorAttributes();
+ SetExpiryTimerTimeout( KDefaultScreenSaverTimeout );
+
View()->ShowDisplayObject();
iSharedDataI->SetScreensaverStatus( ETrue );
@@ -459,6 +466,27 @@
// -----------------------------------------------------------------------------
+// Start screensaver expiry timer. When the timer expires the screensaver will
+// be stopped and hided.
+// -----------------------------------------------------------------------------
+//
+void CScreensaverEngine::SetExpiryTimerTimeout( TInt aTimeout )
+ {
+ SCRLOGGER_WRITEF( _L( "SCR:CScreensaverEngine::SetExpiryTimerTimeout(%d) start" ), aTimeout );
+ KillTimer( iExpiryTimer );
+
+ if ( 0 < aTimeout )
+ {
+ TRAP_IGNORE(
+ iExpiryTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+ iExpiryTimer->Start( aTimeout , aTimeout ,
+ TCallBack( HandleExpiryTimerExpiry, this ) );
+ )
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
// CScreensaverEngine::CScreensaverEngine
// -----------------------------------------------------------------------------
//
@@ -685,10 +713,12 @@
SCRLOGGER_WRITE("HandleInactiveEventL(), starting screensaver");
CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
-/*
+
// Double-start is OK, it will be checked in StartScreenSaver()
+ // This will be trigged by keylock activation after keyguard
+ // timeout, or if keylock is disabled
_this->StartScreenSaver( );
-*/
+
return KErrNone;
}
@@ -712,6 +742,8 @@
SCRLOGGER_WRITE("HandleInactiveEventShortL()");
// Start, if keys are locked and short timeout in use
CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr);
+ // Restore inactivity timeout if it was reset at keylock activation
+ _this->iActivityManagerScreensaverShort->SetInactivityTimeout(KTimeoutShort);
if ( _this->iSharedDataI->IsKeyguardOn() )
{
@@ -739,6 +771,24 @@
return KErrNone;
}
+// ---------------------------------------------------------------------------
+// CScreensaverEngine::HandleKeyguardStateChanged
+// ---------------------------------------------------------------------------
+//
+void CScreensaverEngine::HandleKeyguardStateChanged( TBool aEnabled )
+ {
+ if ( aEnabled )
+ {
+ // Keyguard switch generates an activity event still, let the inactivity
+ // handler start the screensaver after one second
+ iActivityManagerScreensaverShort->SetInactivityTimeout(1);
+ }
+ else
+ {
+ StopScreenSaver();
+ }
+ }
+
// -----------------------------------------------------------------------------
// CScreensaverEngine::View
// -----------------------------------------------------------------------------
@@ -765,4 +815,26 @@
{
return iSharedDataI->IsScreenSaverAllowed();
}
+
+
+// -----------------------------------------------------------------------------
+// Handles expire timer timeout
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverEngine::HandleExpiryTimerExpiry( TAny* aPtr )
+ {
+ SCRLOGGER_WRITEF( _L( "SCR:CScreensaverEngine::HandleExpiryTimerExpiry(%d) start" ), aPtr );
+ CScreensaverEngine *control = STATIC_CAST( CScreensaverEngine*, aPtr );
+
+ if ( control )
+ {
+ control->KillTimer( control->iExpiryTimer );
+ control->StopScreenSaver();
+ control->iSharedDataI->SetSSForcedLightsOn( 0 );
+ }
+
+ return KErrNone;
+ }
+
+
// End of file.