summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-10-28 12:29:27 +0100
committerLennart Poettering <lennart@poettering.net>2012-10-28 12:29:27 +0100
commit7654b2c2593f4d106bc01be2662c1ab8339c90e1 (patch)
tree2dead3e3d9215673f0b5ebe638f3aced00af80fa /src/login
parent9485d98d7741604c3d728edaed60b02ad63b71df (diff)
logind: add 'lock' as possible choice for handling hw keys
Diffstat (limited to 'src/login')
-rw-r--r--src/login/logind-button.c19
-rw-r--r--src/login/logind-button.h1
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;