set -eu
cd "$(dirname "$0")"
mode="${1:-weston}"
demo=./build/f12_cursors
[ -x "$demo" ] || dub build --compiler=ldc2 >&2
rt="$(mktemp -d)"
export XDG_RUNTIME_DIR="$rt"
unset WAYLAND_DISPLAY DISPLAY || true
cleanup()
{
[ -n "${comp_pid:-}" ] && kill "$comp_pid" 2>/dev/null || true
}
trap cleanup EXIT INT TERM
seed_pointer()
{
if command -v wlrctl >/dev/null; then
WAYLAND_DISPLAY="$wld" wlrctl pointer move 1 1
sleep 0.5
else
echo "note: wlrctl not on PATH; seat keeps capabilities=0 (blind tour mode)" >&2
fi
}
zone_walk()
{
w=$1
h=$2
for xy in "1 1" "3 1" "5 1" "1 3" "3 3" "5 3" "1 5" "3 5" "5 5" \
"3 3" "1 1" "3 3" "5 1" "3 3" "1 5" "3 3" "5 5"; do
x=$(echo "$xy" | cut -d' ' -f1)
y=$(echo "$xy" | cut -d' ' -f2)
swaymsg seat seat0 cursor set $((w * x / 6)) $((h * y / 6)) > /dev/null
sleep 0.1
WAYLAND_DISPLAY="$wld" wlrctl pointer move 1 1 2>/dev/null || true
sleep 0.4
done
}
start_sway()
{
command -v sway >/dev/null || { echo "SKIP: sway not on PATH"; exit 0; }
printf 'output HEADLESS-1 resolution 1280x720 %s\ndefault_border none\n' "$1" \
> "$rt/sway.cfg"
WLR_BACKENDS=headless WLR_LIBINPUT_NO_DEVICES=1 WLR_RENDERER=pixman \
sway -c "$rt/sway.cfg" > "$rt/sway.log" 2>&1 &
comp_pid=$!
sleep 3
wld="$(cd "$rt" && ls wayland-* 2>/dev/null | grep -v '\.lock$' | head -n 1)"
[ -n "$wld" ] || { echo "SKIP: sway did not create a wayland socket"; exit 0; }
SWAYSOCK="$(ls "$rt"/sway-ipc.*.sock | head -n 1)"
export SWAYSOCK
}
case "$mode" in
weston)
command -v weston >/dev/null || { echo "SKIP: weston not on PATH"; exit 0; }
weston --backend=headless --socket=wsi-w5b --idle-time=0 \
> "$rt/weston.log" 2>&1 &
comp_pid=$!
sleep 2
WAYLAND_DISPLAY=wsi-w5b WSI_AUTO_EXIT=1 "$demo"
;;
sway)
start_sway ""
WAYLAND_DISPLAY="$wld" WSI_AUTO_EXIT=1 WSI_RUN_MS=12000 "$demo" &
demo_pid=$!
sleep 2
seed_pointer
zone_walk 1280 720
wait "$demo_pid"
;;
sway-theme)
start_sway "scale 2"
WAYLAND_DISPLAY="$wld" WSI_AUTO_EXIT=1 WSI_RUN_MS=12000 WSI_FORCE_PATH=theme "$demo" &
demo_pid=$!
sleep 2
seed_pointer
zone_walk 640 360
wait "$demo_pid"
;;
*)
echo "usage: $0 [weston|sway|sway-theme]" >&2
exit 2
;;
esac