diff --git a/components/sessionsprivate/sessionsmodel.h b/components/sessionsprivate/sessionsmodel.h --- a/components/sessionsprivate/sessionsmodel.h +++ b/components/sessionsprivate/sessionsmodel.h @@ -56,6 +56,7 @@ Q_PROPERTY(bool canStartNewSession READ canStartNewSession CONSTANT) Q_PROPERTY(bool shouldLock READ shouldLock NOTIFY shouldLockChanged) Q_PROPERTY(bool showNewSessionEntry MEMBER m_showNewSessionEntry WRITE setShowNewSessionEntry NOTIFY showNewSessionEntryChanged) + Q_PROPERTY(bool includeUnusedSessions READ includeUnusedSessions WRITE setIncludeUnusedSessions NOTIFY includeUnusedSessionsChanged) Q_PROPERTY(int count READ rowCount NOTIFY countChanged) @@ -77,8 +78,10 @@ bool canSwitchUser() const; bool canStartNewSession() const; bool shouldLock() const; + bool includeUnusedSessions() const; void setShowNewSessionEntry(bool showNewSessionEntry); + void setIncludeUnusedSessions(bool includeUnusedSessions); Q_INVOKABLE void reload(); Q_INVOKABLE void switchUser(int vt, bool shouldLock = false); @@ -92,6 +95,7 @@ void shouldLockChanged(); void showNewSessionEntryChanged(); void countChanged(); + void includeUnusedSessionsChanged(); void switchedUser(int vt); void startedNewSession(); @@ -110,6 +114,7 @@ bool m_pendingReserve = false; bool m_showNewSessionEntry = false; + bool m_includeUnusedSessions = true; org::freedesktop::ScreenSaver *m_screensaverInterface = nullptr; diff --git a/components/sessionsprivate/sessionsmodel.cpp b/components/sessionsprivate/sessionsmodel.cpp --- a/components/sessionsprivate/sessionsmodel.cpp +++ b/components/sessionsprivate/sessionsmodel.cpp @@ -73,6 +73,22 @@ return m_shouldLock; } +bool SessionsModel::includeUnusedSessions() const +{ + return m_includeUnusedSessions; +} + +void SessionsModel::setIncludeUnusedSessions(bool includeUnusedSessions) +{ + if (m_includeUnusedSessions != includeUnusedSessions) { + m_includeUnusedSessions = includeUnusedSessions; + + reload(); + + emit includeUnusedSessionsChanged(); + } +} + void SessionsModel::switchUser(int vt, bool shouldLock) { if (vt < 0) { @@ -157,6 +173,10 @@ continue; } + if (!m_includeUnusedSessions && session.session.isEmpty()) { + continue; + } + SessionEntry entry; entry.name = session.user; entry.displayNumber = session.display; diff --git a/lookandfeel/contents/logout/Logout.qml b/lookandfeel/contents/logout/Logout.qml --- a/lookandfeel/contents/logout/Logout.qml +++ b/lookandfeel/contents/logout/Logout.qml @@ -28,6 +28,8 @@ import "../components" import "timer.js" as AutoTriggerTimer +import org.kde.plasma.private.sessions 2.0 + PlasmaCore.ColorScope { id: root colorGroup: PlasmaCore.Theme.ComplementaryColorGroup @@ -65,6 +67,12 @@ id: kuser } + // For showing a "other users are logged in" hint + SessionsModel { + id: sessionsModel + includeUnusedSessions: false + } + Controls.Action { onTriggered: root.cancelRequested() shortcut: "Escape" @@ -128,6 +136,20 @@ height: Math.max(implicitHeight, units.gridUnit * 10) width: Math.max(implicitWidth, units.gridUnit * 16) + PlasmaComponents.Label { + Layout.maximumWidth: units.gridUnit * 16 + Layout.alignment: Qt.AlignHCenter + Layout.fillWidth: true + horizontalAlignment: Text.AlignHCenter + wrapMode: Text.WordWrap + font.italic: true + text: i18ndp("plasma_lookandfeel_org.kde.lookandfeel", + "One other user is currently logged in. If the computer is shut down or rebooted, that user may lose work.", + "%1 other users are currently logged in. If the computer is shut down or rebooted, those users may lose work.", + sessionsModel.count) + visible: sessionsModel.count > 0 + } + RowLayout { spacing: units.largeSpacing * 2 Layout.alignment: Qt.AlignHCenter