diff --git a/components/sessionsprivate/sessionsmodel.h b/components/sessionsprivate/sessionsmodel.h --- a/components/sessionsprivate/sessionsmodel.h +++ b/components/sessionsprivate/sessionsmodel.h @@ -86,9 +86,11 @@ signals: void shouldLockChanged(); - void countChanged(); + void switchedUser(int vt); + void startedNewSession(); + private: void checkScreenLocked(const std::function &cb); diff --git a/components/sessionsprivate/sessionsmodel.cpp b/components/sessionsprivate/sessionsmodel.cpp --- a/components/sessionsprivate/sessionsmodel.cpp +++ b/components/sessionsprivate/sessionsmodel.cpp @@ -45,8 +45,10 @@ 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,13 +80,15 @@ if (!shouldLock) { m_displayManager.switchVT(vt); + emit switchedUser(vt); return; } checkScreenLocked([this, vt](bool locked) { if (locked) { // already locked, switch right away m_displayManager.switchVT(vt); + emit switchedUser(vt); } else { m_pendingReserve = false; m_pendingVt = vt; @@ -101,13 +105,15 @@ if (!shouldLock) { m_displayManager.startReserve(); + emit startedNewSession(); return; } checkScreenLocked([this](bool locked) { if (locked) { // already locked, switch right away m_displayManager.startReserve(); + emit startedNewSession(); } else { m_pendingReserve = true; m_pendingVt = 0; diff --git a/lookandfeel/contents/userswitcher/UserSwitcher.qml b/lookandfeel/contents/userswitcher/UserSwitcher.qml --- a/lookandfeel/contents/userswitcher/UserSwitcher.qml +++ b/lookandfeel/contents/userswitcher/UserSwitcher.qml @@ -38,6 +38,11 @@ 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 @@ visible: sessionsModel.canStartNewSession onClicked: { sessionsModel.startNewSession(sessionsModel.shouldLock) - root.dismissed() } } @@ -148,7 +152,6 @@ visible: sessionsModel.count > 0 onClicked: { sessionsModel.switchUser(block.mainItem.selectedItem.vtNumber, sessionsModel.shouldLock) - root.dismissed() } Controls.Action {