logind: add PreparingForShutdownWithMetadata property
The PrepareForShutdownWithMetadata signal was added via
e4aab5cf1a but a corresponding property
was not. A property has to be a single type, so the bool needs to be
one of the key/value pairs as 'ba{sv}' is not a valid property.
This commit is contained in:
committed by
Luca Boccassi
parent
bec6b53f3c
commit
1e0ef01439
@@ -256,6 +256,8 @@ node /org/freedesktop/login1 {
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
||||
readonly b PreparingForShutdown = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
||||
readonly a{sv} PreparingForShutdownWithMetadata = [...];
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
||||
readonly b PreparingForSleep = ...;
|
||||
readonly (st) ScheduledShutdown = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
||||
@@ -526,6 +528,8 @@ node /org/freedesktop/login1 {
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="PreparingForShutdown"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="PreparingForShutdownWithMetadata"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="PreparingForSleep"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="ScheduledShutdown"/>
|
||||
@@ -815,8 +819,14 @@ node /org/freedesktop/login1 {
|
||||
|
||||
<para>The <varname>PreparingForShutdown</varname> and <varname>PreparingForSleep</varname> boolean
|
||||
properties are true during the interval between the two <function>PrepareForShutdown()</function> and
|
||||
<function>PrepareForSleep()</function> signals respectively. Note that these properties do not
|
||||
send out <function>PropertyChanged</function> signals.</para>
|
||||
<function>PrepareForSleep()</function> signals respectively. The
|
||||
<varname>PreparingForShutdownWithMetadata</varname> property provides a list of key/value pair
|
||||
metadata fields. Currently it lists a <varname>preparing</varname> boolean that corresponds to the
|
||||
<varname>PreparingForShutdown</varname> property, and, if a shutdown is being prepared, it will also
|
||||
contain a <varname>type</varname> string which defines the type of shutdown. The type can be one of
|
||||
<literal>power-off</literal>, <literal>reboot</literal>, <literal>halt</literal>,
|
||||
<literal>kexec</literal> or <literal>soft-reboot</literal>. Note that these properties do not send out
|
||||
<function>PropertyChanged</function> signals.</para>
|
||||
|
||||
<para>The <varname>RebootParameter</varname> property shows the value set with the
|
||||
<function>SetRebootParameter()</function> method described above.</para>
|
||||
@@ -1609,7 +1619,8 @@ node /org/freedesktop/login1/session/1 {
|
||||
<varname>SleepOperation</varname>,
|
||||
<varname>DesignatedMaintenanceTime</varname>, and
|
||||
<function>ListSessionsEx()</function> were added in version 256.</para>
|
||||
<para><varname>HandleSecureAttentionKey</varname>, and
|
||||
<para><varname>HandleSecureAttentionKey</varname>,
|
||||
<varname>PreparingForShutdownWithMetadata</varname>, and
|
||||
<function>SecureAttentionKey()</function> were added in version 257.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
|
||||
@@ -341,6 +341,35 @@ static int property_get_preparing(
|
||||
return sd_bus_message_append(reply, "b", b);
|
||||
}
|
||||
|
||||
static int property_get_preparing_shutdown_with_metadata(
|
||||
sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
Manager *m = ASSERT_PTR(userdata);
|
||||
|
||||
assert(bus);
|
||||
assert(reply);
|
||||
|
||||
if (!m->delayed_action || !(m->delayed_action->inhibit_what & INHIBIT_SHUTDOWN))
|
||||
return sd_bus_message_append(reply, "a{sv}", 1, "preparing", "b", false);
|
||||
|
||||
return sd_bus_message_append(
|
||||
reply,
|
||||
"a{sv}",
|
||||
2,
|
||||
"preparing",
|
||||
"b",
|
||||
true,
|
||||
"type",
|
||||
"s",
|
||||
handle_action_to_string(m->delayed_action->handle));
|
||||
}
|
||||
|
||||
static int property_get_sleep_operations(
|
||||
sd_bus *bus,
|
||||
const char *path,
|
||||
@@ -3718,6 +3747,7 @@ static const sd_bus_vtable manager_vtable[] = {
|
||||
SD_BUS_PROPERTY("IdleAction", "s", property_get_handle_action, offsetof(Manager, idle_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("IdleActionUSec", "t", NULL, offsetof(Manager, idle_action_usec), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("PreparingForShutdown", "b", property_get_preparing, 0, 0),
|
||||
SD_BUS_PROPERTY("PreparingForShutdownWithMetadata", "a{sv}", property_get_preparing_shutdown_with_metadata, 0, 0),
|
||||
SD_BUS_PROPERTY("PreparingForSleep", "b", property_get_preparing, 0, 0),
|
||||
SD_BUS_PROPERTY("ScheduledShutdown", "(st)", property_get_scheduled_shutdown, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("DesignatedMaintenanceTime", "s", property_get_maintenance_time, 0, 0),
|
||||
|
||||
@@ -273,6 +273,10 @@ EOF
|
||||
touch /run/TEST-82-SOFTREBOOT.touch
|
||||
systemctl --no-block --check-inhibitors=yes soft-reboot
|
||||
|
||||
# Ensure the property works too
|
||||
type="$(busctl --json=short get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager PreparingForShutdownWithMetadata | jq -r '.data.type.data')"
|
||||
test "$type" = "soft-reboot"
|
||||
|
||||
# Now block until the soft-boot killing spree kills us
|
||||
exec sleep infinity
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user