]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
05d3a176 | 2 | #pragma once |
23406ce5 | 3 | |
a2106925 LP |
4 | #include "conf-parser.h" |
5 | ||
23406ce5 LP |
6 | typedef enum HandleAction { |
7 | HANDLE_IGNORE, | |
cd4dd90b | 8 | |
23406ce5 | 9 | HANDLE_POWEROFF, |
cb88da82 | 10 | _HANDLE_ACTION_SHUTDOWN_FIRST = HANDLE_POWEROFF, |
23406ce5 LP |
11 | HANDLE_REBOOT, |
12 | HANDLE_HALT, | |
13 | HANDLE_KEXEC, | |
9edf5af5 | 14 | HANDLE_SOFT_REBOOT, |
cb88da82 | 15 | _HANDLE_ACTION_SHUTDOWN_LAST = HANDLE_SOFT_REBOOT, |
cd4dd90b | 16 | |
23406ce5 | 17 | HANDLE_SUSPEND, |
cb88da82 | 18 | _HANDLE_ACTION_SLEEP_FIRST = HANDLE_SUSPEND, |
23406ce5 LP |
19 | HANDLE_HIBERNATE, |
20 | HANDLE_HYBRID_SLEEP, | |
e68c79db | 21 | HANDLE_SUSPEND_THEN_HIBERNATE, |
cd4dd90b MY |
22 | HANDLE_SLEEP, /* A "high-level" action that automatically choose an appropriate low-level sleep action */ |
23 | _HANDLE_ACTION_SLEEP_LAST = HANDLE_SLEEP, | |
24 | ||
23406ce5 | 25 | HANDLE_LOCK, |
836fb00f | 26 | HANDLE_FACTORY_RESET, |
cd4dd90b | 27 | |
23406ce5 | 28 | _HANDLE_ACTION_MAX, |
2d93c20e | 29 | _HANDLE_ACTION_INVALID = -EINVAL, |
23406ce5 LP |
30 | } HandleAction; |
31 | ||
b0a3a5e5 | 32 | typedef struct HandleActionData HandleActionData; |
5ed73478 | 33 | |
cd4dd90b MY |
34 | typedef enum HandleActionSleepMask { |
35 | HANDLE_SLEEP_SUSPEND_MASK = 1U << HANDLE_SUSPEND, | |
36 | HANDLE_SLEEP_HIBERNATE_MASK = 1U << HANDLE_HIBERNATE, | |
37 | HANDLE_SLEEP_HYBRID_SLEEP_MASK = 1U << HANDLE_HYBRID_SLEEP, | |
38 | HANDLE_SLEEP_SUSPEND_THEN_HIBERNATE_MASK = 1U << HANDLE_SUSPEND_THEN_HIBERNATE, | |
39 | } HandleActionSleepMask; | |
40 | ||
41 | #define HANDLE_ACTION_SLEEP_MASK_DEFAULT (HANDLE_SLEEP_SUSPEND_THEN_HIBERNATE_MASK|HANDLE_SLEEP_SUSPEND_MASK|HANDLE_SLEEP_HIBERNATE_MASK) | |
42 | ||
07630cea | 43 | #include "logind-inhibit.h" |
71d35b6b | 44 | #include "logind.h" |
54d7fcc6 | 45 | #include "sleep-config.h" |
5ed73478 | 46 | |
68008766 LP |
47 | static inline bool handle_action_valid(HandleAction a) { |
48 | return a >= 0 && a < _HANDLE_ACTION_MAX; | |
49 | } | |
50 | ||
cb88da82 LP |
51 | static inline bool HANDLE_ACTION_IS_SHUTDOWN(HandleAction a) { |
52 | return a >= _HANDLE_ACTION_SHUTDOWN_FIRST && a <= _HANDLE_ACTION_SHUTDOWN_LAST; | |
53 | } | |
54 | ||
55 | static inline bool HANDLE_ACTION_IS_SLEEP(HandleAction a) { | |
56 | return a >= _HANDLE_ACTION_SLEEP_FIRST && a <= _HANDLE_ACTION_SLEEP_LAST; | |
57 | } | |
58 | ||
b0a3a5e5 | 59 | struct HandleActionData { |
138224fc | 60 | HandleAction handle; |
5ed73478 LN |
61 | const char *target; |
62 | InhibitWhat inhibit_what; | |
63 | const char *polkit_action; | |
64 | const char *polkit_action_multiple_sessions; | |
65 | const char *polkit_action_ignore_inhibit; | |
66 | SleepOperation sleep_operation; | |
67 | const char* message_id; | |
68 | const char* message; | |
153d1579 | 69 | const char* log_verb; |
5ed73478 | 70 | }; |
23406ce5 | 71 | |
cd4dd90b MY |
72 | int handle_action_get_enabled_sleep_actions(HandleActionSleepMask mask, char ***ret); |
73 | HandleAction handle_action_sleep_select(HandleActionSleepMask mask); | |
74 | ||
23406ce5 LP |
75 | int manager_handle_action( |
76 | Manager *m, | |
77 | InhibitWhat inhibit_key, | |
78 | HandleAction handle, | |
79 | bool ignore_inhibited, | |
80 | bool is_edge); | |
81 | ||
3dbb9bc5 ZJS |
82 | const char* handle_action_verb_to_string(HandleAction h) _const_; |
83 | ||
44a6b1b6 ZJS |
84 | const char* handle_action_to_string(HandleAction h) _const_; |
85 | HandleAction handle_action_from_string(const char *s) _pure_; | |
23406ce5 | 86 | |
48bccaa9 | 87 | const HandleActionData* handle_action_lookup(HandleAction handle); |
a2106925 LP |
88 | |
89 | CONFIG_PARSER_PROTOTYPE(config_parse_handle_action); | |
cd4dd90b MY |
90 | |
91 | CONFIG_PARSER_PROTOTYPE(config_parse_handle_action_sleep); |