chiark / gitweb /
Prep v225: Applying various fixes and changes to src/libelogind/sd-bus that got lost...
[elogind.git] / src / login / logind-action.c
index c9d8bc5413cd4757f0cc22a6a007b1f3eb067086..f635fb1b632039a459d4f0de245279a7d6e03faa 100644 (file)
 
 #include <unistd.h>
 
-#include "sd-messages.h"
 #include "conf-parser.h"
 #include "special.h"
 #include "sleep-config.h"
 #include "bus-util.h"
 #include "bus-error.h"
 #include "logind-action.h"
+#include "formats-util.h"
+#include "process-util.h"
+#include "terminal-util.h"
 
 int manager_handle_action(
                 Manager *m,
@@ -70,18 +72,13 @@ int manager_handle_action(
                 return 0;
         }
 
-        /* If we are docked don't react to lid closing */
         if (inhibit_key == INHIBIT_HANDLE_LID_SWITCH) {
-                int n;
-
-                if (manager_is_docked(m)) {
-                        log_debug("Ignoring lid switch request, system is docked.");
-                        return 0;
-                }
-
-                n = manager_count_displays(m);
-                if (n != 1) {
-                        log_debug("Ignoring lid switch request, %i displays connected.", n);
+                /* If the last system suspend or startup is too close,
+                 * let's not suspend for now, to give USB docking
+                 * stations some time to settle so that we can
+                 * properly watch its displays. */
+                if (m->lid_switch_ignore_event_source) {
+                        log_debug("Ignoring lid switch request, system startup or resume too close.");
                         return 0;
                 }
         }
@@ -118,7 +115,7 @@ int manager_handle_action(
 
         if (!supported) {
                 log_warning("Requested operation not supported, ignoring.");
-                return -ENOTSUP;
+                return -EOPNOTSUPP;
         }
 
         if (m->action_what) {
@@ -138,17 +135,17 @@ int manager_handle_action(
 
                 /* If this is just a recheck of the lid switch then don't warn about anything */
                 if (!is_edge) {
-                        log_debug("Refusing operation, %s is inhibited by UID %lu/%s, PID %lu/%s.",
+                        log_debug("Refusing operation, %s is inhibited by UID "UID_FMT"/%s, PID "PID_FMT"/%s.",
                                   inhibit_what_to_string(inhibit_operation),
-                                  (unsigned long) offending->uid, strna(u),
-                                  (unsigned long) offending->pid, strna(comm));
+                                  offending->uid, strna(u),
+                                  offending->pid, strna(comm));
                         return 0;
                 }
 
-                log_error("Refusing operation, %s is inhibited by UID %lu/%s, PID %lu/%s.",
+                log_error("Refusing operation, %s is inhibited by UID "UID_FMT"/%s, PID "PID_FMT"/%s.",
                           inhibit_what_to_string(inhibit_operation),
-                          (unsigned long) offending->uid, strna(u),
-                          (unsigned long) offending->pid, strna(comm));
+                          offending->uid, strna(u),
+                          offending->pid, strna(comm));
 
                 warn_melody();
                 return -EPERM;