chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
hwdb: update
[elogind.git]
/
src
/
login
/
logind.c
diff --git
a/src/login/logind.c
b/src/login/logind.c
index e22f68d23761ba31adac1eeef23b5c8105a2ca04..9cce481340043bd7ccb402be278711ebf7b07db5 100644
(file)
--- a/
src/login/logind.c
+++ b/
src/login/logind.c
@@
-56,7
+56,8
@@
Manager *manager_new(void) {
m->reserve_vt = 6;
m->inhibit_delay_max = 5 * USEC_PER_SEC;
m->handle_power_key = HANDLE_POWEROFF;
m->reserve_vt = 6;
m->inhibit_delay_max = 5 * USEC_PER_SEC;
m->handle_power_key = HANDLE_POWEROFF;
- m->handle_sleep_key = HANDLE_SUSPEND;
+ m->handle_suspend_key = HANDLE_SUSPEND;
+ m->handle_hibernate_key = HANDLE_HIBERNATE;
m->handle_lid_switch = HANDLE_SUSPEND;
m->lid_switch_ignore_inhibited = true;
m->handle_lid_switch = HANDLE_SUSPEND;
m->lid_switch_ignore_inhibited = true;
@@
-496,7
+497,8
@@
int manager_enumerate_buttons(Manager *m) {
/* Loads buttons from udev */
if (m->handle_power_key == HANDLE_IGNORE &&
/* Loads buttons from udev */
if (m->handle_power_key == HANDLE_IGNORE &&
- m->handle_sleep_key == HANDLE_IGNORE &&
+ m->handle_suspend_key == HANDLE_IGNORE &&
+ m->handle_hibernate_key == HANDLE_IGNORE &&
m->handle_lid_switch == HANDLE_IGNORE)
return 0;
m->handle_lid_switch == HANDLE_IGNORE)
return 0;
@@
-1306,7
+1308,8
@@
static int manager_connect_udev(Manager *m) {
/* Don't watch keys if nobody cares */
if (m->handle_power_key != HANDLE_IGNORE ||
/* Don't watch keys if nobody cares */
if (m->handle_power_key != HANDLE_IGNORE ||
- m->handle_sleep_key != HANDLE_IGNORE ||
+ m->handle_suspend_key != HANDLE_IGNORE ||
+ m->handle_hibernate_key != HANDLE_IGNORE ||
m->handle_lid_switch != HANDLE_IGNORE) {
m->udev_button_monitor = udev_monitor_new_from_netlink(m->udev, "udev");
m->handle_lid_switch != HANDLE_IGNORE) {
m->udev_button_monitor = udev_monitor_new_from_netlink(m->udev, "udev");
@@
-1407,7
+1410,7
@@
int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
assert(m);
assert(m);
- idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false);
+ idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false
, false, 0
);
HASHMAP_FOREACH(s, m->sessions, i) {
dual_timestamp k;
HASHMAP_FOREACH(s, m->sessions, i) {
dual_timestamp k;
@@
-1506,6
+1509,26
@@
int manager_startup(Manager *m) {
return 0;
}
return 0;
}
+static int manager_recheck_buttons(Manager *m) {
+ Iterator i;
+ Button *b;
+ int r = 0;
+
+ assert(m);
+
+ HASHMAP_FOREACH(b, m->buttons, i) {
+ int q;
+
+ q = button_recheck(b);
+ if (q > 0)
+ return 1;
+ if (q < 0)
+ r = q;
+ }
+
+ return r;
+}
+
int manager_run(Manager *m) {
assert(m);
int manager_run(Manager *m) {
assert(m);
@@
-1519,6
+1542,9
@@
int manager_run(Manager *m) {
if (manager_dispatch_delayed(m) > 0)
continue;
if (manager_dispatch_delayed(m) > 0)
continue;
+ if (manager_recheck_buttons(m) > 0)
+ continue;
+
if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE)
continue;
if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE)
continue;