Make it "Power Off...", not "Power off...", so it's picked from gnome-shell translations.
113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
/* -*- mode: js2 - indent-tabs-mode: nil - js2-basic-offset: 4 -*- */
|
|
const Lang = imports.lang;
|
|
const St = imports.gi.St;
|
|
|
|
|
|
const Main = imports.ui.main;
|
|
const PopupMenu = imports.ui.popupMenu;
|
|
const GnomeSession = imports.misc.gnomeSession;
|
|
|
|
const Gettext = imports.gettext.domain('gnome-shell');
|
|
const _ = Gettext.gettext;
|
|
|
|
function updateSuspendOrHibernate(object, pspec, item) {
|
|
let canSuspend = this._upClient.get_can_suspend();
|
|
let canHibernate = this._upClient.get_can_hibernate();
|
|
|
|
if (!canSuspend && !canHibernate) {
|
|
item.actor.hide();
|
|
return;
|
|
} else
|
|
item.actor.show();
|
|
if (!canSuspend && canHibernate) {
|
|
item.updateText(_("Hibernate"), null);
|
|
return;
|
|
}
|
|
let suspendText = _("Suspend");
|
|
let hibernateText = canHibernate ? _("Hibernate") : null;
|
|
item.updateText(suspendText, hibernateText);
|
|
}
|
|
|
|
function onSuspendOrHibernateActivate(item) {
|
|
Main.overview.hide();
|
|
|
|
let haveSuspend = this._upClient.get_can_suspend();
|
|
let haveHibernate = this._upClient.get_can_hibernate();
|
|
|
|
if (haveSuspend &&
|
|
item.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
|
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
|
this._upClient.suspend_sync(null);
|
|
}));
|
|
} else {
|
|
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
|
this._upClient.hibernate_sync(null);
|
|
}));
|
|
}
|
|
}
|
|
|
|
function createSubMenu() {
|
|
let item;
|
|
|
|
item = new PopupMenu.PopupImageMenuItem(_("Available"), 'user-available');
|
|
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.AVAILABLE));
|
|
this.menu.addMenuItem(item);
|
|
this._presenceItems[GnomeSession.PresenceStatus.AVAILABLE] = item;
|
|
|
|
item = new PopupMenu.PopupImageMenuItem(_("Busy"), 'user-busy');
|
|
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.BUSY));
|
|
this.menu.addMenuItem(item);
|
|
this._presenceItems[GnomeSession.PresenceStatus.BUSY] = item;
|
|
|
|
item = new PopupMenu.PopupSeparatorMenuItem();
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupMenuItem(_("My Account"));
|
|
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
|
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupSeparatorMenuItem();
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
|
|
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupMenuItem(_("Switch User"));
|
|
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
|
|
this.menu.addMenuItem(item);
|
|
this._loginScreenItem = item;
|
|
|
|
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
|
|
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupSeparatorMenuItem();
|
|
this.menu.addMenuItem(item);
|
|
|
|
item = new PopupMenu.PopupAlternatingMenuItem(_("Suspend"),
|
|
_("Hibernate"));
|
|
this.menu.addMenuItem(item);
|
|
item.connect('activate', Lang.bind(this, onSuspendOrHibernateActivate));
|
|
this._upClient.connect('notify::can-suspend', Lang.bind(this, updateSuspendOrHibernate, item));
|
|
this._upClient.connect('notify::can-hibernate', Lang.bind(this, updateSuspendOrHibernate, item));
|
|
updateSuspendOrHibernate.call(this, null, null, item);
|
|
|
|
item = new PopupMenu.PopupMenuItem(_("Power Off..."));
|
|
item.connect('activate', Lang.bind(this, function() {
|
|
this._session.ShutdownRemote();
|
|
}));
|
|
this.menu.addMenuItem(item);
|
|
}
|
|
|
|
// Put your extension initialization code here
|
|
function main(metadata) {
|
|
let statusMenu = Main.panel._statusmenu;
|
|
statusMenu.menu.removeAll();
|
|
createSubMenu.call(statusMenu);
|
|
}
|