summaryrefslogtreecommitdiff
diff options
-rw-r--r--UnityCore/GnomeSessionManager.cpp38
-rw-r--r--UnityCore/GnomeSessionManager.h1
-rw-r--r--UnityCore/GnomeSessionManagerImpl.h1
-rw-r--r--UnityCore/SessionManager.h2
-rw-r--r--shutdown/StandaloneSession.cpp1
-rw-r--r--tests/test_mock_session_manager.h1
6 files changed, 31 insertions, 13 deletions
diff --git a/UnityCore/GnomeSessionManager.cpp b/UnityCore/GnomeSessionManager.cpp
index 6815f0843..ef5534c73 100644
--- a/UnityCore/GnomeSessionManager.cpp
+++ b/UnityCore/GnomeSessionManager.cpp
@@ -400,6 +400,26 @@ void GnomeManager::Impl::CallConsoleKitMethod(std::string const& method, GVarian
});
}
+void GnomeManager::Impl::LockScreen(bool prompt)
+{
+ EnsureCancelPendingAction();
+
+ // FIXME (andy) we should ask gnome-session to emit the logind signal
+ glib::Object<GSettings> lockdown_settings(g_settings_new(GNOME_LOCKDOWN_OPTIONS.c_str()));
+
+ if (g_settings_get_boolean(lockdown_settings, DISABLE_LOCKSCREEN_KEY.c_str()))
+ {
+ return;
+ }
+ else if (manager_->UserName().find("guest-") == 0)
+ {
+ LOG_INFO(logger) << "Impossible to lock a guest session";
+ return;
+ }
+
+ prompt ? manager_->prompt_lock_requested.emit() : manager_->lock_requested.emit();
+}
+
// Public implementation
GnomeManager::GnomeManager()
@@ -435,20 +455,12 @@ std::string GnomeManager::HostName() const
void GnomeManager::LockScreen()
{
- impl_->EnsureCancelPendingAction();
-
- // FIXME (andy) we should ask gnome-session to emit the logind signal
- glib::Object<GSettings> lockdown_settings(g_settings_new(GNOME_LOCKDOWN_OPTIONS.c_str()));
+ impl_->LockScreen(false);
+}
- if (g_settings_get_boolean(lockdown_settings, DISABLE_LOCKSCREEN_KEY.c_str())) {
- return;
- }
- else if (UserName().find("guest-") == 0)
- {
- LOG_INFO(logger) << "Impossible to lock a guest session";
- return;
- }
- lock_requested.emit();
+void GnomeManager::PromptLockScreen()
+{
+ impl_->LockScreen(true);
}
void GnomeManager::Logout()
diff --git a/UnityCore/GnomeSessionManager.h b/UnityCore/GnomeSessionManager.h
index d32296d66..a8e57ea4a 100644
--- a/UnityCore/GnomeSessionManager.h
+++ b/UnityCore/GnomeSessionManager.h
@@ -38,6 +38,7 @@ public:
std::string HostName() const;
void LockScreen();
+ void PromptLockScreen();
void Logout();
void Reboot();
void Shutdown();
diff --git a/UnityCore/GnomeSessionManagerImpl.h b/UnityCore/GnomeSessionManagerImpl.h
index 32792d9b8..1045b78db 100644
--- a/UnityCore/GnomeSessionManagerImpl.h
+++ b/UnityCore/GnomeSessionManagerImpl.h
@@ -52,6 +52,7 @@ struct GnomeManager::Impl
void CancelAction();
void ClosedDialog();
void EnsureCancelPendingAction();
+ void LockScreen(bool prompt);
GVariant* OnShellMethodCall(std::string const& method, GVariant* parameters);
void CallGnomeSessionMethod(std::string const& method, GVariant* parameters = nullptr,
diff --git a/UnityCore/SessionManager.h b/UnityCore/SessionManager.h
index 06464024d..9375bec6d 100644
--- a/UnityCore/SessionManager.h
+++ b/UnityCore/SessionManager.h
@@ -41,6 +41,7 @@ public:
virtual std::string HostName() const = 0;
virtual void LockScreen() = 0;
+ virtual void PromptLockScreen() = 0;
virtual void Logout() = 0;
virtual void Reboot() = 0;
virtual void Shutdown() = 0;
@@ -59,6 +60,7 @@ public:
sigc::signal<void> lock_requested;
sigc::signal<void> unlock_requested;
+ sigc::signal<void> prompt_lock_requested;
sigc::signal<void> locked;
sigc::signal<void> unlocked;
sigc::signal<void, bool /* inhibitors */> logout_requested;
diff --git a/shutdown/StandaloneSession.cpp b/shutdown/StandaloneSession.cpp
index 0c64b9afe..f8f1a713d 100644
--- a/shutdown/StandaloneSession.cpp
+++ b/shutdown/StandaloneSession.cpp
@@ -41,6 +41,7 @@ public:
std::string HostName() const { return "tricky"; }
void LockScreen() { std::cout << "LockScreen" << std::endl; }
+ void PromptLockScreen() { std::cout << "PromptLockScreen" << std::endl; }
void Logout() { std::cout << "Logout" << std::endl; }
void Reboot() { std::cout << "Reboot" << std::endl; }
void Shutdown() { std::cout << "Shutdown" << std::endl; }
diff --git a/tests/test_mock_session_manager.h b/tests/test_mock_session_manager.h
index 42da560c5..1070b53fc 100644
--- a/tests/test_mock_session_manager.h
+++ b/tests/test_mock_session_manager.h
@@ -34,6 +34,7 @@ struct MockManager : Manager
MOCK_CONST_METHOD0(HostName, std::string());
MOCK_METHOD0(LockScreen, void());
+ MOCK_METHOD0(PromptLockScreen, void());
MOCK_METHOD0(Logout, void());
MOCK_METHOD0(Reboot, void());
MOCK_METHOD0(Shutdown, void());