From 7654b2c2593f4d106bc01be2662c1ab8339c90e1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 28 Oct 2012 12:29:27 +0100 Subject: logind: add 'lock' as possible choice for handling hw keys --- src/login/logind-button.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/login/logind-button.c') diff --git a/src/login/logind-button.c b/src/login/logind-button.c index 753d95454c..5fadadede6 100644 --- a/src/login/logind-button.c +++ b/src/login/logind-button.c @@ -150,6 +150,18 @@ fail: return r; } +static int lock_sessions(Manager *m) { + Iterator i; + Session *session; + + log_info("Locking sessions..."); + + HASHMAP_FOREACH(session, m->sessions, i) + session_send_lock(session, true); + + return 1; +} + static int button_handle( Button *b, InhibitWhat inhibit_key, @@ -164,7 +176,7 @@ static int button_handle( [HANDLE_KEXEC] = "Rebooting via kexec...", [HANDLE_SUSPEND] = "Suspending...", [HANDLE_HIBERNATE] = "Hibernating...", - [HANDLE_HYBRID_SLEEP] = "Hibernating and suspend...", + [HANDLE_HYBRID_SLEEP] = "Hibernating and suspend..." }; static const char * const target_table[_HANDLE_BUTTON_MAX] = { @@ -195,6 +207,10 @@ static int button_handle( return 0; } + /* Locking is handled differently from the rest. */ + if (handle == HANDLE_LOCK) + return lock_sessions(b->manager); + inhibit_operation = handle == HANDLE_SUSPEND || handle == HANDLE_HIBERNATE || handle == HANDLE_HYBRID_SLEEP ? INHIBIT_SLEEP : INHIBIT_SHUTDOWN; /* If the actual operation is inhibited, warn and fail */ @@ -309,6 +325,7 @@ static const char* const handle_button_table[_HANDLE_BUTTON_MAX] = { [HANDLE_SUSPEND] = "suspend", [HANDLE_HIBERNATE] = "hibernate", [HANDLE_HYBRID_SLEEP] = "hybrid-sleep", + [HANDLE_LOCK] = "lock" }; DEFINE_STRING_TABLE_LOOKUP(handle_button, HandleButton); DEFINE_CONFIG_PARSE_ENUM(config_parse_handle_button, handle_button, HandleButton, "Failed to parse handle button setting"); -- cgit v1.2.3-54-g00ecf