#!/usr/bin/env bash # Echte Maus im virtuellen Bildschirm (xdotool): Fenster an der Titelleiste ziehen, am Rand die Größe # ziehen, maximieren und aus „maximiert“ herausziehen. v1.3.0 stürzte dabei hart ab – das sieht nur # ein Test mit echter Maus (Windows-Verschiebeschleife). Aufruf aus build_windows.sh (DISPLAY gesetzt). set -uo pipefail cd "$(dirname "$0")/.." PY="${PY:-wine python}" AUS="$(mktemp -d)" command -v xdotool >/dev/null || { apt-get update -qq >/dev/null && apt-get install -y -qq xdotool >/dev/null; } command -v xdotool >/dev/null || { echo "xdotool fehlt"; exit 1; } $PY build/maus_app.py "$(winepath -w "$AUS" 2>/dev/null || echo "$AUS")" > "$AUS/app.log" 2>&1 & PID=$! for i in $(seq 1 120); do [ -s "$AUS/status.txt" ] && break; sleep 0.5; done sleep 3 lage() { tail -1 "$AUS/status.txt" | tr -d '\r'; } lebt() { kill -0 "$PID" 2>/dev/null; } fehler=0 pruefe() { # $1 = Schritt sleep 1.5 if ! lebt; then echo "ABSTURZ bei: $1"; fehler=1; return 1; fi echo "$1: $(lage)" } ziehen() { # x y dx dy xdotool mousemove "$1" "$2"; sleep 0.4; xdotool mousedown 1; sleep 0.3 for i in 1 2 3 4 5 6; do xdotool mousemove_relative -- "$(( $3 / 6 ))" "$(( $4 / 6 ))"; sleep 0.15; done sleep 0.2; xdotool mouseup 1 } read -r X Y W H M F <<< "$(lage)" echo "Start: $X $Y $W $H maximiert=$M" ziehen $(( X + 300 )) $(( Y + 14 )) 60 42; pruefe "Titelleiste ziehen" || true read -r X2 Y2 W2 H2 M2 F2 <<< "$(lage)" [ "$X2" -ne "$X" ] || [ "$Y2" -ne "$Y" ] || { echo "Fenster hat sich nicht bewegt"; fehler=1; } ziehen $(( X2 + W2 - 2 )) $(( Y2 + H2 / 2 )) 60 0; pruefe "Rand ziehen" || true read -r X3 Y3 W3 H3 M3 F3 <<< "$(lage)" [ "$W3" -gt "$W2" ] || { echo "Größe am Rand nicht geändert ($W2 -> $W3)"; fehler=1; } xdotool mousemove $(( X3 + 300 )) $(( Y3 + 14 )); sleep 0.3 xdotool click --repeat 2 --delay 60 1; pruefe "Doppelklick (maximieren)" || true read -r X4 Y4 W4 H4 M4 F4 <<< "$(lage)" [ "$M4" = "1" ] || { echo "nicht maximiert"; fehler=1; } # Unter echtem Windows wird das Fenster dabei wiederhergestellt, unter Wine nicht – hier zählt: kein Absturz ziehen $(( X4 + 400 )) $(( Y4 + 12 )) 0 150; pruefe "aus maximiert herausziehen" || true if lebt; then kill "$PID" 2>/dev/null; fi sleep 1 if [ -s "$AUS/absturz.txt" ]; then echo "== Absturzprotokoll:"; cat "$AUS/absturz.txt"; fehler=1; fi if grep -q "Fatal Python error" "$AUS/app.log"; then cat "$AUS/app.log"; fehler=1; fi read -r _ _ _ _ _ FE <<< "$(lage)" [ "${FE:-0}" = "0" ] || { echo "Fehler in Tk-Callbacks: $FE"; fehler=1; } [ "$fehler" = 0 ] && echo "Maustest bestanden" || echo "Maustest FEHLGESCHLAGEN" exit "$fehler"