Skip to content

Commit 2288d1c

Browse files
committed
screensaver: Track the screensaver proxy in external mode.
The screensaver controller 'locked' property should reflect correctly regardless of which screensaver is in use.
1 parent bdffa3d commit 2288d1c

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

js/misc/screenSaver.js

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,11 @@ var ScreenSaverService = class ScreenSaverService {
122122
};
123123

124124
/**
125-
* Legacy proxy for backward compatibility.
126125
* Creates a proxy to the DBus service (which may be internal or external).
126+
* (Deprecated as of 6.8)
127+
* Extensions should connect to Main.screensaverController. Continuing to
128+
* use this is still reliable, but is not as immediately up-to-date when the
129+
* internal screensaver is in use.
127130
*/
128131
function ScreenSaverProxy() {
129132
var self = new Gio.DBusProxy({
@@ -136,22 +139,6 @@ function ScreenSaverProxy() {
136139
Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES)
137140
});
138141
self.init(null);
139-
self.screenSaverActive = false;
140-
141-
self.connectSignal('ActiveChanged', function(proxy, senderName, [isActive]) {
142-
self.screenSaverActive = isActive;
143-
});
144-
self.connect('notify::g-name-owner', function() {
145-
if (self.g_name_owner) {
146-
self.GetActiveRemote(function(result, excp) {
147-
if (result) {
148-
let [isActive] = result;
149-
self.screenSaverActive = isActive;
150-
}
151-
});
152-
} else
153-
self.screenSaverActive = false;
154-
});
155142

156143
return self;
157144
}

js/ui/screensaver/controller.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ var ScreensaverController = class {
2828
global.settings.set_boolean("session-locked-state", false);
2929
}
3030

31+
this.#screenSaverProxy = new ScreenSaver.ScreenSaverProxy();
32+
3133
// The internal screensaver is the only option for wayland sessions. X11 sessions can use either
3234
// the internal one or cinnamon-screensaver (>= 6.7).
3335
if (Meta.is_wayland_compositor() || global.settings.get_boolean('internal-screensaver-enabled')) {
@@ -54,6 +56,26 @@ var ScreensaverController = class {
5456
this.#locked = false;
5557
this.emit('locked-changed', false);
5658
});
59+
} else {
60+
this.#screenSaverProxy.connectSignal('ActiveChanged', (proxy, senderName, [isActive]) => {
61+
this.#locked = isActive;
62+
this.emit('locked-changed', isActive);
63+
});
64+
65+
this.#screenSaverProxy.connect('notify::g-name-owner', () => {
66+
if (this.#screenSaverProxy.g_name_owner) {
67+
this.#screenSaverProxy.GetActiveRemote((result, error) => {
68+
if (result) {
69+
let [isActive] = result;
70+
this.#locked = isActive;
71+
this.emit('locked-changed', isActive);
72+
}
73+
});
74+
} else {
75+
this.#locked = false;
76+
this.emit('locked-changed', false);
77+
}
78+
});
5779
}
5880
}
5981

@@ -86,9 +108,6 @@ var ScreensaverController = class {
86108
return;
87109
}
88110

89-
if (this.#screenSaverProxy === null)
90-
this.#screenSaverProxy = new ScreenSaver.ScreenSaverProxy();
91-
92111
this.#screenSaverProxy.LockRemote(awayMessage || "");
93112
}
94113

0 commit comments

Comments
 (0)