X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flogin%2Flogind-dbus.c;h=86ca654518e3e853ec4731db9bcb65c8ff839a45;hp=3cde83166f21208424f87fa1fd8e43255e8c441c;hb=fa2b196da12642d3560f5766eef09ffca7c31f7b;hpb=2154761fbbc931e3e3d83100fa42609c99cd2536
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index 3cde83166..86ca65451 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -98,6 +98,7 @@
" \n" \
" \n" \
" \n" \
+ " \n" \
" \n" \
" \n" \
" \n" \
@@ -209,6 +210,8 @@
" \n" \
" \n" \
" \n" \
+ " \n" \
+ " \n" \
" \n"
#define INTROSPECTION_BEGIN \
@@ -273,6 +276,22 @@ static int bus_manager_append_inhibited(DBusMessageIter *i, const char *property
return 0;
}
+static int bus_manager_append_preparing(DBusMessageIter *i, const char *property, void *data) {
+ Manager *m = data;
+ dbus_bool_t b;
+
+ assert(i);
+ assert(property);
+
+ if (streq(property, "PreparingForShutdown"))
+ b = !!(m->delayed_what & INHIBIT_SHUTDOWN);
+ else
+ b = !!(m->delayed_what & INHIBIT_SLEEP);
+
+ dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &b);
+ return 0;
+}
+
static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMessage **_reply) {
Session *session = NULL;
User *user = NULL;
@@ -1266,6 +1285,8 @@ static const BusProperty bus_login_manager_properties[] = {
{ "HandlePowerKey", bus_manager_append_handle_button, "s", offsetof(Manager, handle_power_key) },
{ "HandleSleepKey", bus_manager_append_handle_button, "s", offsetof(Manager, handle_sleep_key) },
{ "HandleLidSwitch", bus_manager_append_handle_button, "s", offsetof(Manager, handle_lid_switch) },
+ { "PreparingForShutdown", bus_manager_append_preparing, "b", 0 },
+ { "PreparingForSleep", bus_manager_append_preparing, "b", 0 },
{ NULL, }
};
@@ -1725,6 +1746,18 @@ static DBusHandlerResult manager_message_handler(
if (!reply)
goto oom;
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSessions")) {
+ Session *session;
+ Iterator i;
+
+ HASHMAP_FOREACH(session, m->sessions, i)
+ if (session_send_lock(session, true) < 0)
+ goto oom;
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "KillSession")) {
const char *swho;
int32_t signo;