785c813771
The display configuration now exposes a setting to automatically shift the display color at nighttime. As there are cases where disabling the filtering temporarily is useful, it makes sense to expose the feature in the system menu for quick access. https://bugzilla.gnome.org/show_bug.cgi?id=741224
75 lines
2.9 KiB
JavaScript
75 lines
2.9 KiB
JavaScript
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
|
|
const Gio = imports.gi.Gio;
|
|
const Lang = imports.lang;
|
|
|
|
const Main = imports.ui.main;
|
|
const PanelMenu = imports.ui.panelMenu;
|
|
const PopupMenu = imports.ui.popupMenu;
|
|
|
|
const BUS_NAME = 'org.gnome.SettingsDaemon.Color';
|
|
const OBJECT_PATH = '/org/gnome/SettingsDaemon/Color';
|
|
|
|
const ColorInterface = '<node> \
|
|
<interface name="org.gnome.SettingsDaemon.Color"> \
|
|
<property name="DisabledUntilTomorrow" type="b" access="readwrite"/> \
|
|
<property name="NightLightActive" type="b" access="read"/> \
|
|
</interface> \
|
|
</node>';
|
|
|
|
const ColorProxy = Gio.DBusProxy.makeProxyWrapper(ColorInterface);
|
|
|
|
const Indicator = new Lang.Class({
|
|
Name: 'NightLightIndicator',
|
|
Extends: PanelMenu.SystemIndicator,
|
|
|
|
_init: function() {
|
|
this.parent();
|
|
|
|
this._indicator = this._addIndicator();
|
|
this._indicator.icon_name = 'night-light-symbolic';
|
|
this._proxy = new ColorProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
|
|
(proxy, error) => {
|
|
if (error) {
|
|
log(error.message);
|
|
return;
|
|
}
|
|
this._proxy.connect('g-properties-changed',
|
|
Lang.bind(this, this._sync));
|
|
this._sync();
|
|
});
|
|
|
|
this._item = new PopupMenu.PopupSubMenuMenuItem("", true);
|
|
this._item.icon.icon_name = 'night-light-symbolic';
|
|
this._disableItem = this._item.menu.addAction('', () => {
|
|
this._proxy.DisabledUntilTomorrow = !this._proxy.DisabledUntilTomorrow;
|
|
});
|
|
this._item.menu.addAction(_("Turn Off"), () => {
|
|
let settings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.plugins.color' });
|
|
settings.set_boolean('night-light-enabled', false);
|
|
});
|
|
this._item.menu.addSettingsAction(_("Display Settings"), 'gnome-display-panel.desktop');
|
|
this.menu.addMenuItem(this._item);
|
|
|
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
|
this._sessionUpdated();
|
|
this._sync();
|
|
},
|
|
|
|
_sessionUpdated: function() {
|
|
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
|
this.menu.setSensitive(sensitive);
|
|
},
|
|
|
|
_sync: function() {
|
|
let visible = this._proxy.NightLightActive;
|
|
let disabled = this._proxy.DisabledUntilTomorrow;
|
|
|
|
this._item.label.text = disabled ? _("Night Light Disabled")
|
|
: _("Night Light On");
|
|
this._disableItem.label.text = disabled ? _("Resume")
|
|
: _("Disable Until Tomorrow");
|
|
this._item.actor.visible = this._indicator.visible = visible;
|
|
}
|
|
});
|