parent
235f0c744b
commit
c39da1d9e9
@ -0,0 +1,123 @@
|
||||
From 7a0096ba99d7a71ae9f45d7c0011d0ebb1eae23d Mon Sep 17 00:00:00 2001
|
||||
From: Kai Uwe Broulik <kde@privat.broulik.de>
|
||||
Date: Thu, 25 Feb 2016 22:16:22 +0100
|
||||
Subject: [PATCH 4/5] [User Switcher] Fix session switching when automatic
|
||||
screen locking is enabled
|
||||
|
||||
When automatic screen locking is enabled, we want to ensure the screen is fully locked
|
||||
before we switch sessions or go to the login screen to avoid brief exposure of the desktop
|
||||
when we return.
|
||||
|
||||
This check happens asynchronously and because the User Switcher dialog closes immediately
|
||||
after issuing the switch request, the SessionsModel is already destroyed and the reply is never
|
||||
actually processed.
|
||||
|
||||
BUG: 356945
|
||||
FIXED-IN: 5.5.5
|
||||
|
||||
Differential Revision: https://phabricator.kde.org/D1020
|
||||
---
|
||||
components/sessionsprivate/sessionsmodel.cpp | 6 ++++++
|
||||
components/sessionsprivate/sessionsmodel.h | 4 +++-
|
||||
lookandfeel/contents/userswitcher/UserSwitcher.qml | 7 +++++--
|
||||
3 files changed, 14 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/components/sessionsprivate/sessionsmodel.cpp b/components/sessionsprivate/sessionsmodel.cpp
|
||||
index 3e3a987..600e682 100644
|
||||
--- a/components/sessionsprivate/sessionsmodel.cpp
|
||||
+++ b/components/sessionsprivate/sessionsmodel.cpp
|
||||
@@ -45,8 +45,10 @@ SessionsModel::SessionsModel(QObject *parent)
|
||||
if (active) {
|
||||
if (m_pendingVt) {
|
||||
m_displayManager.switchVT(m_pendingVt);
|
||||
+ emit switchedUser(m_pendingVt);
|
||||
} else if (m_pendingReserve) {
|
||||
m_displayManager.startReserve();
|
||||
+ emit startNewSession();
|
||||
}
|
||||
|
||||
m_pendingVt = 0;
|
||||
@@ -78,6 +80,7 @@ void SessionsModel::switchUser(int vt, bool shouldLock)
|
||||
|
||||
if (!shouldLock) {
|
||||
m_displayManager.switchVT(vt);
|
||||
+ emit switchedUser(vt);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -85,6 +88,7 @@ void SessionsModel::switchUser(int vt, bool shouldLock)
|
||||
if (locked) {
|
||||
// already locked, switch right away
|
||||
m_displayManager.switchVT(vt);
|
||||
+ emit switchedUser(vt);
|
||||
} else {
|
||||
m_pendingReserve = false;
|
||||
m_pendingVt = vt;
|
||||
@@ -101,6 +105,7 @@ void SessionsModel::startNewSession(bool shouldLock)
|
||||
|
||||
if (!shouldLock) {
|
||||
m_displayManager.startReserve();
|
||||
+ emit startedNewSession();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -108,6 +113,7 @@ void SessionsModel::startNewSession(bool shouldLock)
|
||||
if (locked) {
|
||||
// already locked, switch right away
|
||||
m_displayManager.startReserve();
|
||||
+ emit startedNewSession();
|
||||
} else {
|
||||
m_pendingReserve = true;
|
||||
m_pendingVt = 0;
|
||||
diff --git a/components/sessionsprivate/sessionsmodel.h b/components/sessionsprivate/sessionsmodel.h
|
||||
index fe7af32..827bd04 100644
|
||||
--- a/components/sessionsprivate/sessionsmodel.h
|
||||
+++ b/components/sessionsprivate/sessionsmodel.h
|
||||
@@ -86,9 +86,11 @@ public:
|
||||
|
||||
signals:
|
||||
void shouldLockChanged();
|
||||
-
|
||||
void countChanged();
|
||||
|
||||
+ void switchedUser(int vt);
|
||||
+ void startedNewSession();
|
||||
+
|
||||
private:
|
||||
void checkScreenLocked(const std::function<void (bool)> &cb);
|
||||
|
||||
diff --git a/lookandfeel/contents/userswitcher/UserSwitcher.qml b/lookandfeel/contents/userswitcher/UserSwitcher.qml
|
||||
index 6dd1932..da961a9 100644
|
||||
--- a/lookandfeel/contents/userswitcher/UserSwitcher.qml
|
||||
+++ b/lookandfeel/contents/userswitcher/UserSwitcher.qml
|
||||
@@ -38,6 +38,11 @@ Item {
|
||||
|
||||
SessionsModel {
|
||||
id: sessionsModel
|
||||
+ // the calls takes place asynchronously; if we were to dismiss the dialog right
|
||||
+ // after startNewSession/switchUser we would be destroyed before the reply
|
||||
+ // returned leaving us do nothing (Bug 356945)
|
||||
+ onStartedNewSession: root.dismissed()
|
||||
+ onSwitchedUser: root.dismissed()
|
||||
}
|
||||
|
||||
Controls.Action {
|
||||
@@ -125,7 +130,6 @@ Item {
|
||||
visible: sessionsModel.canStartNewSession
|
||||
onClicked: {
|
||||
sessionsModel.startNewSession(sessionsModel.shouldLock)
|
||||
- root.dismissed()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +152,6 @@ Item {
|
||||
visible: sessionsModel.count > 0
|
||||
onClicked: {
|
||||
sessionsModel.switchUser(block.mainItem.selectedItem.vtNumber, sessionsModel.shouldLock)
|
||||
- root.dismissed()
|
||||
}
|
||||
|
||||
Controls.Action {
|
||||
--
|
||||
2.5.0
|
||||
|
@ -0,0 +1,25 @@
|
||||
From e722b1e5f214ec1d007f9b856b97293df16ea4fb Mon Sep 17 00:00:00 2001
|
||||
From: Kai Uwe Broulik <kde@privat.broulik.de>
|
||||
Date: Fri, 26 Feb 2016 14:22:38 +0100
|
||||
Subject: [PATCH 5/5] Fix typo
|
||||
|
||||
---
|
||||
components/sessionsprivate/sessionsmodel.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/components/sessionsprivate/sessionsmodel.cpp b/components/sessionsprivate/sessionsmodel.cpp
|
||||
index 600e682..1efbe52 100644
|
||||
--- a/components/sessionsprivate/sessionsmodel.cpp
|
||||
+++ b/components/sessionsprivate/sessionsmodel.cpp
|
||||
@@ -48,7 +48,7 @@ SessionsModel::SessionsModel(QObject *parent)
|
||||
emit switchedUser(m_pendingVt);
|
||||
} else if (m_pendingReserve) {
|
||||
m_displayManager.startReserve();
|
||||
- emit startNewSession();
|
||||
+ emit startedNewSession();
|
||||
}
|
||||
|
||||
m_pendingVt = 0;
|
||||
--
|
||||
2.5.0
|
||||
|
Loading…
Reference in new issue