-
Notifications
You must be signed in to change notification settings - Fork 2
/
extension.js
96 lines (83 loc) · 3.27 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
'use strict';
const { Gio } = imports.gi;
const { loadInterfaceXML } = imports.misc.fileUtils;
const ExtensionUtils = imports.misc.extensionUtils;
const Extension = ExtensionUtils.getCurrentExtension();
const { Preferences } = Extension.imports.lib.preferences;
const { logError } = Extension.imports.lib.utils;
const BrightnessProxy = Gio.DBusProxy.makeProxyWrapper(
loadInterfaceXML(`org.gnome.SettingsDaemon.Power.Screen`)
);
const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(
loadInterfaceXML(`org.freedesktop.UPower`)
);
class ExtensionImpl {
enable() {
this._preferences = new Preferences();
this._preferences.connectObject(`notify::brightnessOnAc`, () => {
if (this._powerManagerProxy?.OnBattery === false) {
this._updateScreenBrightness();
}
}, this);
this._preferences.connectObject(`notify::brightnessOnBattery`, () => {
if (this._powerManagerProxy?.OnBattery === true) {
this._updateScreenBrightness();
}
}, this);
this._brightnessProxy = new BrightnessProxy(
Gio.DBus.session,
`org.gnome.SettingsDaemon.Power`,
`/org/gnome/SettingsDaemon/Power`,
(proxy, error) => {
if (error) {
logError(`Failed to connect to the ${proxy.g_interface_name} D-Bus interface`, error);
}
}
);
this._brightnessProxy.connectObject(`g-properties-changed`, (...[, properties]) => {
if (properties.lookup_value(`Brightness`, null) !== null) {
this._brightnessProxy.disconnectObject(this);
this._updateScreenBrightness();
}
}, this);
this._powerManagerProxy = new PowerManagerProxy(
Gio.DBus.system,
`org.freedesktop.UPower`,
`/org/freedesktop/UPower`,
(proxy, error) => {
if (error) {
logError(`Failed to connect to the ${proxy.g_interface_name} D-Bus interface`, error);
}
}
);
this._powerManagerProxy.connectObject(`g-properties-changed`, (...[, properties]) => {
if (properties.lookup_value(`OnBattery`, null) !== null) {
this._updateScreenBrightness();
}
}, this);
}
disable() {
// This extension uses the 'unlock-dialog' session mode to be able
// to switch the screen brightness when the screen is locked.
this._powerManagerProxy.disconnectObject(this);
delete this._powerManagerProxy;
this._brightnessProxy.disconnectObject(this);
delete this._brightnessProxy;
this._preferences.disconnectObject(this);
this._preferences.destroy();
delete this._preferences;
}
_updateScreenBrightness() {
if (this._brightnessProxy.Brightness === null || this._powerManagerProxy.OnBattery === null) {
return;
}
if (this._powerManagerProxy.OnBattery) {
this._brightnessProxy.Brightness = this._preferences.brightnessOnBattery;
} else {
this._brightnessProxy.Brightness = this._preferences.brightnessOnAc;
}
}
}
var init = () => {
return new ExtensionImpl();
};