summaryrefslogtreecommitdiff
path: root/src/login
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-10-22 12:41:34 +0200
committerLennart Poettering <lennart@poettering.net>2018-11-16 15:39:31 +0100
commit9b9c23daf4b97e4b25ede3179df1cf7d7b27f304 (patch)
treee3bc3e51244dbf81dd47402153a01dafc0d932b8 /src/login
parenta7891d203c5c8192ec16141c00a30d93e175a0cf (diff)
downloadsystemd-9b9c23daf4b97e4b25ede3179df1cf7d7b27f304.tar.gz
systemd-9b9c23daf4b97e4b25ede3179df1cf7d7b27f304.tar.bz2
systemd-9b9c23daf4b97e4b25ede3179df1cf7d7b27f304.zip
logind: expose a boolean on the bus explaining whether logind thinks the lid is closed
This copies how we already expose a "Docked" boolean the reflects whether we are in a docking station or not.
Diffstat (limited to 'src/login')
-rw-r--r--src/login/logind-core.c11
-rw-r--r--src/login/logind-dbus.c2
-rw-r--r--src/login/logind.h1
3 files changed, 14 insertions, 0 deletions
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
index 24f7c1439f..5608486284 100644
--- a/src/login/logind-core.c
+++ b/src/login/logind-core.c
@@ -566,6 +566,17 @@ int manager_spawn_autovt(Manager *m, unsigned vtnr) {
return 0;
}
+bool manager_is_lid_closed(Manager *m) {
+ Iterator i;
+ Button *b;
+
+ HASHMAP_FOREACH(b, m->buttons, i)
+ if (b->lid_closed)
+ return true;
+
+ return false;
+}
+
static bool manager_is_docked(Manager *m) {
Iterator i;
Button *b;
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index 927e304a0c..e3fc9a050e 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -274,6 +274,7 @@ static int property_get_scheduled_shutdown(
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_handle_action, handle_action, HandleAction);
static BUS_DEFINE_PROPERTY_GET(property_get_docked, "b", Manager, manager_is_docked_or_external_displays);
+static BUS_DEFINE_PROPERTY_GET(property_get_lid_closed, "b", Manager, manager_is_lid_closed);
static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_compat_user_tasks_max, "t", CGROUP_LIMIT_MAX);
static BUS_DEFINE_PROPERTY_GET_REF(property_get_hashmap_size, "t", Hashmap *, (uint64_t) hashmap_size);
@@ -2666,6 +2667,7 @@ const sd_bus_vtable manager_vtable[] = {
SD_BUS_PROPERTY("PreparingForSleep", "b", property_get_preparing, 0, 0),
SD_BUS_PROPERTY("ScheduledShutdown", "(st)", property_get_scheduled_shutdown, 0, 0),
SD_BUS_PROPERTY("Docked", "b", property_get_docked, 0, 0),
+ SD_BUS_PROPERTY("LidClosed", "b", property_get_lid_closed, 0, 0),
SD_BUS_PROPERTY("RemoveIPC", "b", bus_property_get_bool, offsetof(Manager, remove_ipc), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("RuntimeDirectorySize", "t", NULL, offsetof(Manager, runtime_dir_size), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("InhibitorsMax", "t", NULL, offsetof(Manager, inhibitors_max), SD_BUS_VTABLE_PROPERTY_CONST),
diff --git a/src/login/logind.h b/src/login/logind.h
index 5398cca8c4..7b774f49e0 100644
--- a/src/login/logind.h
+++ b/src/login/logind.h
@@ -146,6 +146,7 @@ int manager_get_idle_hint(Manager *m, dual_timestamp *t);
int manager_get_user_by_pid(Manager *m, pid_t pid, User **user);
int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session);
+bool manager_is_lid_closed(Manager *m);
bool manager_is_docked_or_external_displays(Manager *m);
bool manager_is_on_external_power(void);
bool manager_all_buttons_ignored(Manager *m);