@@ -117,9 +117,7 @@ const NotificationDaemon = imports.ui.notificationDaemon;
117117const WindowAttentionHandler = imports . ui . windowAttentionHandler ;
118118const CinnamonDBus = imports . ui . cinnamonDBus ;
119119const Screenshot = imports . ui . screenshot ;
120- const ScreenShield = imports . ui . screensaver . screenShield ;
121- const AwayMessageDialog = imports . ui . screensaver . awayMessageDialog ;
122- const ScreenSaver = imports . misc . screenSaver ;
120+ const ScreensaverController = imports . ui . screensaver . controller ;
123121const ThemeManager = imports . ui . themeManager ;
124122const Magnifier = imports . ui . magnifier ;
125123const LocatePointer = imports . ui . locatePointer ;
@@ -152,9 +150,7 @@ var slideshowManager = null;
152150var placesManager = null ;
153151var panelManager = null ;
154152var osdWindowManager = null ;
155- let _screenShield = null ;
156- let _screenSaverProxy = null ;
157- let _screensaverSettings = null ;
153+ var screensaverController = null ;
158154var lockdownSettings = null ;
159155var overview = null ;
160156var expo = null ;
@@ -539,43 +535,14 @@ function start() {
539535 }
540536 } ) ;
541537
542- if ( ! global . session_running || Meta . is_wayland_compositor ( ) ) {
543- // If the session is *not* already running, clear the internal locked
544- // state. This is used in x11 sessions to restore the screensaver after
545- // cinnamon restarts. Wayland doesn't support restarts (yet) so it should
546- // always be false.
547- global . settings . set_boolean ( "session-locked-state" , false ) ;
548- }
549-
550- _screensaverSettings = new Gio . Settings ( { schema_id : 'org.cinnamon.desktop.screensaver' } ) ;
538+ screensaverController = new ScreensaverController . ScreensaverController ( ) ;
551539
552- // The internal screensaver is the only option for wayland sessions. X11 sessions can use either
553- // the internal one or cinnamon-screensaver (>= 6.7).
554- if ( Meta . is_wayland_compositor ( ) || global . settings . get_boolean ( 'internal-screensaver-enabled' ) ) {
555- let screenShieldGroup = new St . Widget ( {
556- name : 'screenShieldGroup' ,
557- visible : false ,
558- clip_to_allocation : true ,
559- layout_manager : new Clutter . BinLayout ( )
560- } ) ;
561- screenShieldGroup . add_constraint ( new Clutter . BindConstraint ( {
562- source : global . stage ,
563- coordinate : Clutter . BindCoordinate . ALL
564- } ) ) ;
565- global . stage . add_actor ( screenShieldGroup ) ;
566-
567- _screenShield = new ScreenShield . ScreenShield ( screenShieldGroup ) ;
568- new ScreenSaver . ScreenSaverService ( _screenShield ) ;
569- }
570-
571- // Protect security-critical exported functions from being replaced by extensions.
572- for ( let fnName of [ 'lockScreen' , 'screenShieldHideKeyboard' , 'toggleKeyboard' ] ) {
573- Object . defineProperty ( imports . ui . main , fnName , {
574- value : imports . ui . main [ fnName ] ,
575- writable : false ,
576- configurable : false
577- } ) ;
578- }
540+ // Protect from being replaced by extensions.
541+ Object . defineProperty ( imports . ui . main , 'screensaverController' , {
542+ value : imports . ui . main . screensaverController ,
543+ writable : false ,
544+ configurable : false
545+ } ) ;
579546
580547 Promise . all ( [
581548 AppletManager . init ( ) ,
@@ -1281,7 +1248,7 @@ function _shouldFilterKeybinding(entry) {
12811248 if ( allowed ) {
12821249 let lockModes = Cinnamon . ActionMode . LOCK_SCREEN | Cinnamon . ActionMode . UNLOCK_SCREEN ;
12831250 if ( ( actionMode & lockModes ) !== 0 && ( entry . allowedModes & lockModes ) !== 0 ) {
1284- if ( _screenShield && ! _screensaverSettings . get_boolean ( 'allow-keyboard-shortcuts' ) ) {
1251+ if ( screensaverController ?. locked && ! screensaverController . allowKeyboardShortcuts ) {
12851252 return true ;
12861253 }
12871254 }
@@ -1864,42 +1831,7 @@ function closeEndSessionDialog() {
18641831 endSessionDialog = null ;
18651832}
18661833
1867- function lockScreen ( askForAwayMessage ) {
1868- if ( lockdownSettings . get_boolean ( 'disable-lock-screen' ) ) {
1869- return ;
1870- }
1871-
1872- if ( askForAwayMessage && _screensaverSettings . get_boolean ( 'ask-for-away-message' ) ) {
1873- let dialog = new AwayMessageDialog . AwayMessageDialog ( ( message ) => {
1874- _doLock ( message ) ;
1875- } ) ;
1876- dialog . open ( ) ;
1877- return ;
1878- }
1879-
1880- _doLock ( null ) ;
1881- }
1882-
1883- function _doLock ( awayMessage ) {
1884- if ( _screenShield ) {
1885- _screenShield . lock ( false , awayMessage ) ;
1886- return ;
1887- }
1888-
1889- if ( _screenSaverProxy === null ) {
1890- _screenSaverProxy = new ScreenSaver . ScreenSaverProxy ( ) ;
1891- }
1892-
1893- _screenSaverProxy . LockRemote ( awayMessage || "" ) ;
1894- }
1895-
1896- function screenShieldHideKeyboard ( ) {
1897- _screenShield ?. _hideScreensaverKeyboard ( ) ;
1898- }
1899-
19001834function toggleKeyboard ( ) {
1901- if ( _screenShield ?. visible )
1902- _screenShield . _toggleScreensaverKeyboard ( ) ;
1903- else
1835+ if ( ! screensaverController ?. toggleScreensaverKeyboard ( ) )
19041836 virtualKeyboardManager . manualToggle ( ) ;
19051837}
0 commit comments