diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-10-28 12:29:27 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-10-28 12:29:27 +0100 |
commit | 7654b2c2593f4d106bc01be2662c1ab8339c90e1 (patch) | |
tree | 2dead3e3d9215673f0b5ebe638f3aced00af80fa /src/login | |
parent | 9485d98d7741604c3d728edaed60b02ad63b71df (diff) |
logind: add 'lock' as possible choice for handling hw keys
Diffstat (limited to 'src/login')
-rw-r--r-- | src/login/logind-button.c | 19 | ||||
-rw-r--r-- | src/login/logind-button.h | 1 |
2 files changed, 19 insertions, 1 deletions
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"); diff --git a/src/login/logind-button.h b/src/login/logind-button.h index 827a03e460..b76ca32c08 100644 --- a/src/login/logind-button.h +++ b/src/login/logind-button.h @@ -33,6 +33,7 @@ typedef enum HandleButton { HANDLE_SUSPEND, HANDLE_HIBERNATE, HANDLE_HYBRID_SLEEP, + HANDLE_LOCK, _HANDLE_BUTTON_MAX, _HANDLE_BUTTON_INVALID = -1 } HandleButton; |