94 lines
3.6 KiB
Diff
94 lines
3.6 KiB
Diff
From: Tim Lunn <tim@feathertop.org>
|
|
Date: Tue, 9 Oct 2012 11:18:28 +0200
|
|
Subject: [PATCH] userMenu: allow user switching when using lightdm
|
|
|
|
When running lightdm and gnome-shell, its currently not possible to
|
|
switch users via the usermenu. This commit adds a dbus call to
|
|
switch to the lightdm greeter.
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=685794
|
|
---
|
|
js/misc/systemActions.js | 47 ++++++++++++++++++++++++++++++++++++++++-------
|
|
1 file changed, 40 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/js/misc/systemActions.js b/js/misc/systemActions.js
|
|
index c57afe5..e4b301f 100644
|
|
--- a/js/misc/systemActions.js
|
|
+++ b/js/misc/systemActions.js
|
|
@@ -224,6 +224,34 @@ const SystemActions = GObject.registerClass({
|
|
return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName;
|
|
}
|
|
|
|
+ _lightdmLoginSession() {
|
|
+ try {
|
|
+ let seat = GLib.getenv("XDG_SEAT_PATH");
|
|
+ let result = Gio.DBus.system.call_sync('org.freedesktop.DisplayManager',
|
|
+ seat,
|
|
+ 'org.freedesktop.DisplayManager.Seat',
|
|
+ 'SwitchToGreeter', null, null,
|
|
+ Gio.DBusCallFlags.NONE,
|
|
+ -1, null);
|
|
+ return result;
|
|
+ } catch(e) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ _sensorProxyAppeared() {
|
|
+ this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
|
|
+ (proxy, error) => {
|
|
+ if (error) {
|
|
+ log(error.message);
|
|
+ return;
|
|
+ }
|
|
+ this._sensorProxy.connect('g-properties-changed',
|
|
+ () => { this._updateOrientationLock(); });
|
|
+ this._updateOrientationLock();
|
|
+ });
|
|
+ }
|
|
+
|
|
_updateOrientationLock() {
|
|
const available = this._monitorManager.get_panel_orientation_managed();
|
|
|
|
@@ -325,7 +353,7 @@ const SystemActions = GObject.registerClass({
|
|
_updateLockScreen() {
|
|
let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
|
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
|
|
- this._actions.get(LOCK_SCREEN_ACTION_ID).available = showLock && allowLockScreen && LoginManager.canLock();
|
|
+ this._actions.get(LOCK_SCREEN_ACTION_ID).available = showLock && allowLockScreen;
|
|
this.notify('can-lock-screen');
|
|
}
|
|
|
|
@@ -413,20 +441,25 @@ const SystemActions = GObject.registerClass({
|
|
if (!this._actions.get(LOCK_SCREEN_ACTION_ID).available)
|
|
throw new Error('The lock-screen action is not available!');
|
|
|
|
- Main.screenShield.lock(true);
|
|
+ if (Main.screenShield)
|
|
+ Main.screenShield.lock(true);
|
|
+ else
|
|
+ this._lightdmLoginSession();
|
|
}
|
|
|
|
activateSwitchUser() {
|
|
if (!this._actions.get(SWITCH_USER_ACTION_ID).available)
|
|
throw new Error('The switch-user action is not available!');
|
|
|
|
- if (Main.screenShield)
|
|
+ if (Main.screenShield) {
|
|
Main.screenShield.lock(false);
|
|
|
|
- Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, () => {
|
|
- Gdm.goto_login_session_sync(null);
|
|
- return false;
|
|
- });
|
|
+ Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, () => {
|
|
+ Gdm.goto_login_session_sync(null);
|
|
+ return false;
|
|
+ });
|
|
+ } else
|
|
+ this._lightdmLoginSession();
|
|
}
|
|
|
|
activateLogout() {
|