repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
quickshell/nuguland/test-fixtures/ui/session-bus.c
Raw// Read-only substitutes for the properties consumed by Niri 26.04:
// https://github.com/niri-wm/niri/tree/8ed0da44d974c32c6877d2f4630c314da0717ecb/src/dbus
// No session, power, locale mutation, or host-bus access is implemented.
#include <assert.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <systemd/sd-bus.h>
static int property(sd_bus *bus, const char *path, const char *interface,
const char *name, sd_bus_message *reply, void *data,
sd_bus_error *error) {
(void)bus; (void)path; (void)data; (void)error;
printf("read %s.%s\n", interface, name);
if (!strcmp(name, "LidClosed")) return sd_bus_message_append(reply, "b", 0);
const char *value = !strcmp(name, "X11Layout") ? "us" : !strcmp(name, "X11Model") ? "pc105" : "";
return sd_bus_message_append(reply, "s", value);
}
static const sd_bus_vtable login[] = {
SD_BUS_VTABLE_START(0),
SD_BUS_PROPERTY("LidClosed", "b", property, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_VTABLE_END
};
static const sd_bus_vtable locale[] = {
SD_BUS_VTABLE_START(0),
SD_BUS_PROPERTY("X11Model", "s", property, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("X11Layout", "s", property, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("X11Variant", "s", property, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("X11Options", "s", property, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_VTABLE_END
};
int main(void) {
assert(getenv("NUGULAND_UI_SANDBOX") && !strcmp(getenv("NUGULAND_UI_SANDBOX"), "1"));
assert(getenv("HOME") && !strcmp(getenv("HOME"), "/home/test"));
assert(access("/home/oli", F_OK) != 0 && access("/run/dbus/system_bus_socket", F_OK) != 0);
const char *address = getenv("DBUS_SESSION_BUS_ADDRESS");
assert(address && !strncmp(address, "unix:path=/tmp/dbus-", strlen("unix:path=/tmp/dbus-")));
assert(!strchr(address, ';'));
assert(getenv("DBUS_SYSTEM_BUS_ADDRESS") && !strcmp(address, getenv("DBUS_SYSTEM_BUS_ADDRESS")));
setvbuf(stdout, NULL, _IONBF, 0);
sd_bus *bus = NULL;
assert(sd_bus_new(&bus) >= 0);
assert(sd_bus_set_address(bus, address) >= 0);
assert(sd_bus_set_bus_client(bus, 1) >= 0);
assert(sd_bus_start(bus) >= 0);
assert(sd_bus_add_object_vtable(bus, NULL, "/org/freedesktop/login1", "org.freedesktop.login1.Manager", login, NULL) >= 0);
assert(sd_bus_add_object_vtable(bus, NULL, "/org/freedesktop/locale1", "org.freedesktop.locale1", locale, NULL) >= 0);
assert(sd_bus_request_name(bus, "org.freedesktop.login1", 0) > 0);
assert(sd_bus_request_name(bus, "org.freedesktop.locale1", 0) > 0);
puts("session fixtures ready");
for (;;) {
int result = sd_bus_process(bus, NULL);
assert(result >= 0);
if (result == 0) assert(sd_bus_wait(bus, UINT64_MAX) >= 0);
}
}