diff --git a/js/misc/gnomeSession.js b/js/misc/gnomeSession.js index ce4e7e9d3..1a52a6f4b 100644 --- a/js/misc/gnomeSession.js +++ b/js/misc/gnomeSession.js @@ -102,3 +102,24 @@ Inhibitor.prototype = { }; DBus.proxifyPrototype(Inhibitor.prototype, InhibitorIface); Signals.addSignalMethods(Inhibitor.prototype); + + +// Not the full interface, only the methods we use +const SessionManagerIface = { + name: 'org.gnome.SessionManager', + methods: [ + { name: 'Logout', inSignature: 'u', outSignature: '' }, + { name: 'Shutdown', inSignature: '', outSignature: '' } + ] +}; + +function SessionManager() { + this._init(); +} + +SessionManager.prototype = { + _init: function() { + DBus.session.proxifyObject(this, 'org.gnome.SessionManager', '/org/gnome/SessionManager'); + } +}; +DBus.proxifyPrototype(SessionManager.prototype, SessionManagerIface); \ No newline at end of file diff --git a/js/ui/statusMenu.js b/js/ui/statusMenu.js index 9c251b83c..2a04506db 100644 --- a/js/ui/statusMenu.js +++ b/js/ui/statusMenu.js @@ -50,6 +50,7 @@ StatusMenuButton.prototype = { this._user = this._gdm.get_user(GLib.get_user_name()); this._presence = new GnomeSession.Presence(); this._presenceItems = {}; + this._session = new GnomeSession.SessionManager(); this._account_mgr = Tp.AccountManager.dup() @@ -210,7 +211,7 @@ StatusMenuButton.prototype = { _onQuitSessionActivate: function() { Main.overview.hide(); - Util.spawn(['gnome-session-quit', '--logout']); + this._session.LogoutRemote(0); }, _onSuspendOrPowerOffActivate: function() { @@ -222,7 +223,7 @@ StatusMenuButton.prototype = { this._upClient.suspend_sync(null); })); } else { - Util.spawn(['gnome-session-quit', '--power-off']); + this._session.ShutdownRemote(); } },