summaryrefslogtreecommitdiff
path: root/src/login/logind-core.c
diff options
context:
space:
mode:
authorSimon Fowler <simon.fowler@anu.edu.au>2018-02-10 02:37:39 +1000
committerSven Eden <yamakuzure@gmx.net>2018-05-30 07:58:50 +0200
commit8064341ad44a8c11ed570bea41893b1931142fb7 (patch)
treea0f61d1c2f59cbb373f23463d4cc504f5a00bd78 /src/login/logind-core.c
parent4ea9b5737fb009441667734864a08031152c671e (diff)
Suspend on lid close based on power status. (#8016)
This change adds support for controlling the suspend-on-lid-close behaviour based on the power status as well as whether the machine is docked or has an external monitor. For backwards compatibility the new configuration file variable is ignored completely by default, and must be set explicitly before being considered in any decisions.
Diffstat (limited to 'src/login/logind-core.c')
-rw-r--r--src/login/logind-core.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
index 625521e34..c4dd48e08 100644
--- a/src/login/logind-core.c
+++ b/src/login/logind-core.c
@@ -631,3 +631,34 @@ bool manager_is_docked_or_external_displays(Manager *m) {
return false;
}
+
+bool manager_is_on_external_power(void) {
+ int r;
+
+ /* For now we only check for AC power, but 'external power' can apply
+ * to anything that isn't an internal battery */
+ r = on_ac_power();
+ if (r < 0)
+ log_warning_errno(r, "Failed to read AC power status: %m");
+ else if (r > 0)
+ return true;
+
+ return false;
+}
+
+bool manager_all_buttons_ignored(Manager *m) {
+ if (m->handle_power_key != HANDLE_IGNORE)
+ return false;
+ if (m->handle_suspend_key != HANDLE_IGNORE)
+ return false;
+ if (m->handle_hibernate_key != HANDLE_IGNORE)
+ return false;
+ if (m->handle_lid_switch != HANDLE_IGNORE)
+ return false;
+ if (m->handle_lid_switch_ep != _HANDLE_ACTION_INVALID &&
+ m->handle_lid_switch_ep != HANDLE_IGNORE)
+ return false;
+ if (m->handle_lid_switch_docked != HANDLE_IGNORE)
+ return false;
+ return true;
+}