Blame js/ui/status/rfkill.js

Packit d345d1
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
Packit d345d1
Packit d345d1
const Gio = imports.gi.Gio;
Packit d345d1
const Signals = imports.signals;
Packit d345d1
Packit d345d1
const Main = imports.ui.main;
Packit d345d1
const PanelMenu = imports.ui.panelMenu;
Packit d345d1
const PopupMenu = imports.ui.popupMenu;
Packit d345d1
Packit d345d1
const { loadInterfaceXML } = imports.misc.fileUtils;
Packit d345d1
Packit d345d1
const BUS_NAME = 'org.gnome.SettingsDaemon.Rfkill';
Packit d345d1
const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill';
Packit d345d1
Packit d345d1
const RfkillManagerInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Rfkill');
Packit d345d1
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
Packit d345d1
Packit d345d1
var RfkillManager = class {
Packit d345d1
    constructor() {
Packit d345d1
        this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
Packit d345d1
                                             (proxy, error) => {
Packit d345d1
                                                 if (error) {
Packit d345d1
                                                     log(error.message);
Packit d345d1
                                                     return;
Packit d345d1
                                                 }
Packit d345d1
                                                 this._proxy.connect('g-properties-changed',
Packit d345d1
                                                                     this._changed.bind(this));
Packit d345d1
                                                 this._changed();
Packit d345d1
                                             });
Packit d345d1
    }
Packit d345d1
Packit d345d1
    get airplaneMode() {
Packit d345d1
        return this._proxy.AirplaneMode;
Packit d345d1
    }
Packit d345d1
Packit d345d1
    set airplaneMode(v) {
Packit d345d1
        this._proxy.AirplaneMode = v;
Packit d345d1
    }
Packit d345d1
Packit d345d1
    get hwAirplaneMode() {
Packit d345d1
        return this._proxy.HardwareAirplaneMode;
Packit d345d1
    }
Packit d345d1
Packit d345d1
    get shouldShowAirplaneMode() {
Packit d345d1
        return this._proxy.ShouldShowAirplaneMode;
Packit d345d1
    }
Packit d345d1
Packit d345d1
    _changed() {
Packit d345d1
        this.emit('airplane-mode-changed');
Packit d345d1
    }
Packit d345d1
};
Packit d345d1
Signals.addSignalMethods(RfkillManager.prototype);
Packit d345d1
Packit d345d1
var _manager;
Packit d345d1
function getRfkillManager() {
Packit d345d1
    if (_manager != null)
Packit d345d1
        return _manager;
Packit d345d1
Packit d345d1
    _manager = new RfkillManager();
Packit d345d1
    return _manager;
Packit d345d1
}
Packit d345d1
Packit d345d1
var Indicator = class extends PanelMenu.SystemIndicator {
Packit d345d1
    constructor() {
Packit d345d1
        super();
Packit d345d1
Packit d345d1
        this._manager = getRfkillManager();
Packit d345d1
        this._manager.connect('airplane-mode-changed', this._sync.bind(this));
Packit d345d1
Packit d345d1
        this._indicator = this._addIndicator();
Packit d345d1
        this._indicator.icon_name = 'airplane-mode-symbolic';
Packit d345d1
        this._indicator.hide();
Packit d345d1
Packit d345d1
        // The menu only appears when airplane mode is on, so just
Packit d345d1
        // statically build it as if it was on, rather than dynamically
Packit d345d1
        // changing the menu contents.
Packit d345d1
        this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode On"), true);
Packit d345d1
        this._item.icon.icon_name = 'airplane-mode-symbolic';
Packit d345d1
        this._offItem = this._item.menu.addAction(_("Turn Off"), () => {
Packit d345d1
            this._manager.airplaneMode = false;
Packit d345d1
        });
Packit d345d1
        this._item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
Packit d345d1
        this.menu.addMenuItem(this._item);
Packit d345d1
Packit d345d1
        Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
Packit d345d1
        this._sessionUpdated();
Packit d345d1
    }
Packit d345d1
Packit d345d1
    _sessionUpdated() {
Packit d345d1
        let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
Packit d345d1
        this.menu.setSensitive(sensitive);
Packit d345d1
    }
Packit d345d1
Packit d345d1
    _sync() {
Packit d345d1
        let airplaneMode = this._manager.airplaneMode;
Packit d345d1
        let hwAirplaneMode = this._manager.hwAirplaneMode;
Packit d345d1
        let showAirplaneMode = this._manager.shouldShowAirplaneMode;
Packit d345d1
Packit d345d1
        this._indicator.visible = (airplaneMode && showAirplaneMode);
Packit d345d1
        this._item.actor.visible = (airplaneMode && showAirplaneMode);
Packit d345d1
        this._offItem.setSensitive(!hwAirplaneMode);
Packit d345d1
Packit d345d1
        if (hwAirplaneMode)
Packit d345d1
            this._offItem.label.text = _("Use hardware switch to turn off");
Packit d345d1
        else
Packit d345d1
            this._offItem.label.text = _("Turn Off");
Packit d345d1
    }
Packit d345d1
};