Bump version to 0.4.0
readme: Update mailing list link
connection: Add unittest
libseat: Better error reporting from open_seat
logind: clang-format
logind: Use seat_path for SwitchTo
logind: close_device should not close fd
seat: Only close VT if no new session was found
terminal: Ack both release and acquire

Linux only requires acking release and ignores ack of acquire, but
FreeBSD is more stringent and will patiently wait for both to be acked.

Implement proper acking for both events.
seat: Use current VT for switch and ack
terminal: Fix VT numbering on FreeBSD

FreeBSD adds one to the VT number returned by the GET_ACTIVE ioctl, so
to match things up, the wrapper here subtracted by one. This lead to
ttyv0 being named VT 0. This had the side-effect of VT numbering not
matching expectations, and switching not behaving as intended.

Align numbers with expectations, and move the required subtraction to
terminal_open, so that VT 1 matches ttyv0.
libseat/seatd: Fix socket path bounds
meson: Make default seatd socket path configurable

FreeBSD and Linux have different preferred socket locations. Expose an
option to set the location, and implement simple auto-logic for
drm: Relax drm file detection, support FreeBSD

Path check was done on /dev/dri/card and /dev/dri/renderD. However,
/dev/dri/by-path is a thing, and on FreeBSD, /dev/dri/ symlinks to

Relax Linux check to /dev/dri/, and add FreeBSD check for /dev/drm/.
poller: Add unittest
libseat: Execute bg events after IPC calls

If a background event was queued during call dispatch, and no unread
data was left on the socket, there would be no incentive for the user to
call dispatch, and as a result, the events would never be executed.

Execute events at the end of IPC calls that read from the socket to
avoid stalls.
libseat: Dispatch all non-bg events on IPC call

Dispatch on IPC call only dispatched until the first message was
successfully processed. This could lead to premature dispatch
termination if a background event was received during an IPC call.

Instead, continue dispatching until a non-bg opcode is reported or an
error is received.
seatd: Log on exit
seat: Reuse deactivate logic, more logging
seat: Plug leak of deactivated fds

Only if a device had an fd and was active would an fd be closed. As
devices are deactivated early on session switch, this lead to fd

Close fds regardless of active state.
seat: Rework seat activation/switch logic

The seat activation logic did not correctly handle VT switching and
switching between multiple sessions.

Session switching on VT-bound seats is now performed using a VT switch,
taking advantage of VT signals to perform the actual switch. This
simplifies switching logic and makes it more robust.