X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogind-seat-dbus.c;h=33eafe5ee5dd2a0e71398fa0f26d6063bf23a66d;hb=da11939561b1e6eeb1131b68dbf43042fd633a05;hp=32171ce4010d1a5d15243e558835ebb3440acaa9;hpb=e1c9c2d53606f987110b4215cf08c236af637ff1;p=elogind.git diff --git a/src/logind-seat-dbus.c b/src/logind-seat-dbus.c index 32171ce40..33eafe5ee 100644 --- a/src/logind-seat-dbus.c +++ b/src/logind-seat-dbus.c @@ -333,3 +333,40 @@ char *seat_bus_path(Seat *s) { return r; } + +int seat_send_signal(Seat *s, bool new_seat) { + DBusMessage *m; + int r = -ENOMEM; + char *p = NULL; + + assert(s); + + m = dbus_message_new_signal("/org/freedesktop/login1", + "org.freedesktop.login1.Manager", + new_seat ? "SeatNew" : "SeatRemoved"); + + if (!m) + return -ENOMEM; + + p = seat_bus_path(s); + if (!p) + goto finish; + + if (!dbus_message_append_args( + m, + DBUS_TYPE_STRING, &s->id, + DBUS_TYPE_OBJECT_PATH, &p, + DBUS_TYPE_INVALID)) + goto finish; + + if (!dbus_connection_send(s->manager->bus, m, NULL)) + goto finish; + + r = 0; + +finish: + dbus_message_unref(m); + free(p); + + return r; +}