]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
logind: Mark LidClosed property as "emits change"
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 3 Jan 2024 12:51:02 +0000 (13:51 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 10 Jan 2024 19:31:06 +0000 (19:31 +0000)
It may be useful for DEs to follow changes on this property, esp. now that
recent UPower has removed its own lid handling code.

Related: https://gitlab.freedesktop.org/upower/upower/-/commit/07565ef6a1aa4a115f8ce51e259e408edbaed4cc

man/org.freedesktop.login1.xml
src/login/logind-button.c
src/login/logind-dbus.c

index 581a261c798826176e49acd12884d5ba8dda430f..f647b1cb5b08babbc8b88dc9b6010c8e7a52ffdd 100644 (file)
@@ -257,7 +257,6 @@ node /org/freedesktop/login1 {
       readonly (st) ScheduledShutdown = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b Docked = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b LidClosed = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b OnExternalPower = ...;
index 7f95fa7a4f709e80e2bbfc955afc6db864315375..14835aedc157c7a1a74202429de590f7978c9989 100644 (file)
@@ -11,6 +11,7 @@
 #include "async.h"
 #include "fd-util.h"
 #include "logind-button.h"
+#include "logind-dbus.h"
 #include "missing_input.h"
 #include "string-util.h"
 
@@ -343,6 +344,7 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
                         b->lid_closed = true;
                         button_lid_switch_handle_action(b->manager, true);
                         button_install_check_event_source(b);
+                        manager_send_changed(b->manager, "LidClosed", NULL);
 
                 } else if (ev.code == SW_DOCK) {
                         log_struct(LOG_INFO,
@@ -361,6 +363,7 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
 
                         b->lid_closed = false;
                         b->check_event_source = sd_event_source_unref(b->check_event_source);
+                        manager_send_changed(b->manager, "LidClosed", NULL);
 
                 } else if (ev.code == SW_DOCK) {
                         log_struct(LOG_INFO,
@@ -514,6 +517,7 @@ int button_check_switches(Button *b) {
 
         b->lid_closed = bitset_get(switches, SW_LID);
         b->docked = bitset_get(switches, SW_DOCK);
+        manager_send_changed(b->manager, "LidClosed", NULL);
 
         if (b->lid_closed)
                 button_install_check_event_source(b);
index b310a7cee8638ce27b074abc2aa34dfc3e9a8123..4f8525b46a16788ada0ae925dc1ca781ca6e1f49 100644 (file)
@@ -3576,7 +3576,7 @@ static const sd_bus_vtable manager_vtable[] = {
         SD_BUS_PROPERTY("PreparingForSleep", "b", property_get_preparing, 0, 0),
         SD_BUS_PROPERTY("ScheduledShutdown", "(st)", property_get_scheduled_shutdown, 0, 0),
         SD_BUS_PROPERTY("Docked", "b", property_get_docked, 0, 0),
-        SD_BUS_PROPERTY("LidClosed", "b", property_get_lid_closed, 0, 0),
+        SD_BUS_PROPERTY("LidClosed", "b", property_get_lid_closed, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("OnExternalPower", "b", property_get_on_external_power, 0, 0),
         SD_BUS_PROPERTY("RemoveIPC", "b", bus_property_get_bool, offsetof(Manager, remove_ipc), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("RuntimeDirectorySize", "t", NULL, offsetof(Manager, runtime_dir_size), SD_BUS_VTABLE_PROPERTY_CONST),