login1: Emit NCurrentInhibitors changed events
Currently, there's no way for a desktop environment to detect when a systemd inhibitor has been added or removed. This means that a desktop environment that wishes to show current inhibitors to the user will be either forced to poll systemd or just use stale data. Now, the desktop can listen for changed events on NCurrentInhibitors and call GetInhibitors() in response to that.
This commit is contained in:
@@ -276,7 +276,6 @@ node /org/freedesktop/login1 {
|
||||
readonly t RuntimeDirectoryInodesMax = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t InhibitorsMax = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
||||
readonly t NCurrentInhibitors = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t SessionsMax = ...;
|
||||
|
||||
@@ -3960,7 +3960,7 @@ static const sd_bus_vtable manager_vtable[] = {
|
||||
SD_BUS_PROPERTY("RuntimeDirectorySize", "t", NULL, offsetof(Manager, runtime_dir_size), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("RuntimeDirectoryInodesMax", "t", NULL, offsetof(Manager, runtime_dir_inodes), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("InhibitorsMax", "t", NULL, offsetof(Manager, inhibitors_max), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("NCurrentInhibitors", "t", property_get_hashmap_size, offsetof(Manager, inhibitors), 0),
|
||||
SD_BUS_PROPERTY("NCurrentInhibitors", "t", property_get_hashmap_size, offsetof(Manager, inhibitors), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("SessionsMax", "t", NULL, offsetof(Manager, sessions_max), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("NCurrentSessions", "t", property_get_hashmap_size, offsetof(Manager, sessions), 0),
|
||||
SD_BUS_PROPERTY("UserTasksMax", "t", property_get_compat_user_tasks_max, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||
|
||||
@@ -148,13 +148,11 @@ static int inhibitor_save(Inhibitor *i) {
|
||||
}
|
||||
|
||||
static int bus_manager_send_inhibited_change(Inhibitor *i) {
|
||||
const char *property;
|
||||
|
||||
assert(i);
|
||||
|
||||
property = IN_SET(i->mode, INHIBIT_BLOCK, INHIBIT_BLOCK_WEAK) ? "BlockInhibited" : "DelayInhibited";
|
||||
|
||||
return manager_send_changed(i->manager, property);
|
||||
return manager_send_changed(i->manager,
|
||||
i->mode == INHIBIT_DELAY ? "DelayInhibited" : "BlockInhibited",
|
||||
"NCurrentInhibitors");
|
||||
}
|
||||
|
||||
int inhibitor_start(Inhibitor *i) {
|
||||
|
||||
Reference in New Issue
Block a user