e73e4375b8
This commit adds a dialog for gnome-session to privately use when initiating log outs and shut downs. Coordination is done over the bus. https://bugzilla.gnome.org/show_bug.cgi?id=637187
104 lines
3.1 KiB
JavaScript
104 lines
3.1 KiB
JavaScript
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
|
|
const DBus = imports.dbus;
|
|
const Lang = imports.lang;
|
|
const Signals = imports.signals;
|
|
|
|
const PresenceIface = {
|
|
name: 'org.gnome.SessionManager.Presence',
|
|
methods: [{ name: 'SetStatus',
|
|
inSignature: 'u' }],
|
|
properties: [{ name: 'status',
|
|
signature: 'u',
|
|
access: 'readwrite' }],
|
|
signals: [{ name: 'StatusChanged',
|
|
inSignature: 'u' }]
|
|
};
|
|
|
|
const PresenceStatus = {
|
|
AVAILABLE: 0,
|
|
INVISIBLE: 1,
|
|
BUSY: 2,
|
|
IDLE: 3
|
|
};
|
|
|
|
function Presence() {
|
|
this._init();
|
|
}
|
|
|
|
Presence.prototype = {
|
|
_init: function() {
|
|
DBus.session.proxifyObject(this, 'org.gnome.SessionManager', '/org/gnome/SessionManager/Presence', this);
|
|
},
|
|
|
|
getStatus: function(callback) {
|
|
this.GetRemote('status', Lang.bind(this,
|
|
function(status, ex) {
|
|
if (!ex)
|
|
callback(this, status);
|
|
}));
|
|
},
|
|
|
|
setStatus: function(status) {
|
|
this.SetStatusRemote(status);
|
|
}
|
|
};
|
|
DBus.proxifyPrototype(Presence.prototype, PresenceIface);
|
|
|
|
// Note inhibitors are immutable objects, so they don't
|
|
// change at runtime (changes always come in the form
|
|
// of new inhibitors)
|
|
const InhibitorIface = {
|
|
name: 'org.gnome.SessionManager.Inhibitor',
|
|
properties: [{ name: 'app_id',
|
|
signature: 's',
|
|
access: 'readonly' },
|
|
{ name: 'client_id',
|
|
signature: 's',
|
|
access: 'readonly' },
|
|
{ name: 'reason',
|
|
signature: 's',
|
|
access: 'readonly' },
|
|
{ name: 'flags',
|
|
signature: 'u',
|
|
access: 'readonly' },
|
|
{ name: 'toplevel_xid',
|
|
signature: 'u',
|
|
access: 'readonly' },
|
|
{ name: 'cookie',
|
|
signature: 'u',
|
|
access: 'readonly' }],
|
|
};
|
|
|
|
function Inhibitor(objectPath) {
|
|
this._init(objectPath);
|
|
}
|
|
|
|
Inhibitor.prototype = {
|
|
_init: function(objectPath) {
|
|
DBus.session.proxifyObject(this,
|
|
"org.gnome.SessionManager",
|
|
objectPath);
|
|
this.isLoaded = false;
|
|
this._loadingPropertiesCount = InhibitorIface.properties.length;
|
|
for (let i = 0; i < InhibitorIface.properties.length; i++) {
|
|
let propertyName = InhibitorIface.properties[i].name;
|
|
this.GetRemote(propertyName, Lang.bind(this,
|
|
function(value, exception) {
|
|
if (exception)
|
|
return;
|
|
|
|
this[propertyName] = value;
|
|
this._loadingPropertiesCount--;
|
|
|
|
if (this._loadingPropertiesCount == 0) {
|
|
this.isLoaded = true;
|
|
this.emit("is-loaded");
|
|
}
|
|
}));
|
|
}
|
|
},
|
|
};
|
|
DBus.proxifyPrototype(Inhibitor.prototype, InhibitorIface);
|
|
Signals.addSignalMethods(Inhibitor.prototype);
|