chiark / gitweb /
inhibit: allow filtering --list by mode
[elogind.git] / src / login / logind-core.c
index ca34d378ff02fdffdf0c98b93dbce61f7cba08ac..ed7ea5da31cd9ba45aaeb6838e6b78824cd186cb 100644 (file)
@@ -520,7 +520,7 @@ int manager_count_displays(Manager *m) {
 
                 p = udev_device_get_parent(d);
                 if (!p)
-                        return -ENOMEM;
+                        continue;
 
                 /* If the parent shares the same subsystem as the
                  * device we are looking at then it is a connector,
@@ -537,3 +537,25 @@ int manager_count_displays(Manager *m) {
 
         return n;
 }
+
+bool manager_is_docked_or_multiple_displays(Manager *m) {
+        int n;
+
+        /* If we are docked don't react to lid closing */
+        if (manager_is_docked(m)) {
+                log_debug("System is docked.");
+                return true;
+        }
+
+        /* If we have more than one display connected,
+         * assume that we are docked. */
+        n = manager_count_displays(m);
+        if (n < 0)
+                log_warning("Display counting failed: %s", strerror(-n));
+        else if (n > 1) {
+                log_debug("Multiple (%i) displays connected.", n);
+                return true;
+        }
+
+        return false;
+}