#!/bin/bash
# Freeze / resume the focused window's process tree (SIGSTOP / SIGCONT).
pid=$(xdotool getactivewindow getwindowpid 2>/dev/null) || exit 1

# collect pid plus all descendants (Wine/Proton games spawn several)
descendants() {
    local p
    for p in $(pgrep -P "$1"); do
        echo "$p"
        descendants "$p"
    done
}
pids="$pid $(descendants "$pid")"
name=$(ps -o comm= -p "$pid")

case "$(ps -o state= -p "$pid")" in
    T*) kill -CONT $pids && notify-send -t 1500 "Resumed" "$name ($pid)" ;;
    *)  kill -STOP $pids && notify-send -t 1500 "Frozen" "$name ($pid)" ;;
esac
