chiark / gitweb /
logind: if a lid-switch lock was taken while the lid was closed, recheck lid status...
[elogind.git] / src / login / logind.c
index e22f68d23761ba31adac1eeef23b5c8105a2ca04..14c83551b9a4cc3be9ec37d78200b22bf48c5397 100644 (file)
@@ -1506,6 +1506,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 +1539,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;