X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind.c;h=9cce481340043bd7ccb402be278711ebf7b07db5;hb=20155530437b6b564e60b6b8cf1a69f1bad78c37;hp=e22f68d23761ba31adac1eeef23b5c8105a2ca04;hpb=beaafb2ea6be591882aef21fe19b88e3b2461087;p=elogind.git diff --git a/src/login/logind.c b/src/login/logind.c index e22f68d23..9cce48134 100644 --- 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->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; @@ -496,7 +497,8 @@ int manager_enumerate_buttons(Manager *m) { /* 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; @@ -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 || - 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"); @@ -1407,7 +1410,7 @@ int manager_get_idle_hint(Manager *m, dual_timestamp *t) { 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; @@ -1506,6 +1509,26 @@ int manager_startup(Manager *m) { 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); @@ -1519,6 +1542,9 @@ int manager_run(Manager *m) { if (manager_dispatch_delayed(m) > 0) continue; + if (manager_recheck_buttons(m) > 0) + continue; + if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE) continue;