diff -r 04e92f1a7966 -r 25957ccd51ab src/screensavershareddatamonitor.cpp --- a/src/screensavershareddatamonitor.cpp Fri Feb 19 22:51:44 2010 +0200 +++ b/src/screensavershareddatamonitor.cpp Fri Mar 12 15:42:50 2010 +0200 @@ -65,6 +65,9 @@ DeleteSubscriber( iShuttingDownSubscriber ); iShuttingDownProperty.Close(); + + DeleteSubscriber( iActivateSSSubscriber ); + iActivateSSProperty.Close(); } // ----------------------------------------------------------------------------- @@ -133,6 +136,10 @@ iShuttingDownSubscriber = new (ELeave) CSubscriber( TCallBack(HandleShuttingDownStateChanged, this), iShuttingDownProperty); iShuttingDownSubscriber->SubscribeL(); + + User::LeaveIfError( iActivateSSProperty.Attach( KPSUidScreenSaver, KScreenSaverActivate ) ); + iActivateSSSubscriber = new( ELeave ) CSubscriber( TCallBack( HandleActivateSSChanged, this ), iActivateSSProperty ); + iActivateSSSubscriber->SubscribeL(); } // ----------------------------------------------------------------------------- @@ -236,10 +243,16 @@ // Keys locked - if screensaver is running, this was caused by // automatic keyguard and screensaver should refresh the view // to show the keylock indicator - if ( _this->Model().ScreenSaverIsOn() ) +/* if ( _this->Model().ScreenSaverIsOn() ) { _this->View()->UpdateAndRefresh(); } +*/ + _this->Model().StartScreenSaver(); + } + else + { + _this->Model().StopScreenSaver(); } return KErrNone; @@ -280,4 +293,31 @@ return KErrNone; } + +TInt CScreensaverSharedDataMonitor::HandleActivateSSChanged( TAny* aPtr ) + { + TInt activateState = -1; + + RProperty::Get( KPSUidScreenSaver, KScreenSaverActivate, activateState ); + + if( activateState && -1 != activateState ) + { + // Enable SS + SCRLOGGER_WRITE("SharedDataMonitor: Activate SS"); + STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StartScreenSaver(); + } + else if ( !activateState ) + { + // Disable SS + SCRLOGGER_WRITE("SharedDataMonitor: Stop SS"); + STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver(); + } + else + { + // Unknown state + } + return KErrNone; + } + + // End of file