aboutsummaryrefslogtreecommitdiffstats
path: root/games/shell.qml
blob: f6ca8b3ea67c583b8c8616537ad81a1659ca41ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import QtQuick

ShellRoot {
    Games { id: games }

    // Every game Steam starts, native, Proton or a non-Steam shortcut,
    // inherits SteamGameId; class rules miss the ones naming themselves
    // (a Ren'Py shortcut did), so route on the window's environment.
    Connections {
        target: Hyprland
        function onRawEvent(event) {
            if (event.name !== "openwindow") return;
            const addr = "0x" + event.data.split(",")[0];
            Quickshell.execDetached(["sh", "-c",
                'pid=$(hyprctl clients -j | jq -r --arg a "$1" \'.[] | select(.address == $a) | .pid\') && ' +
                'grep -qz "^SteamGameId=" "/proc/$pid/environ" && ' +
                'hyprctl dispatch "hl.dsp.window.move({ workspace = \\"8\\", window = \\"address:$1\\" })"',
                "sh", addr]);
        }
    }

    // `qs -p <this dir> ipc call games toggle`
    IpcHandler {
        target: "games"
        function toggle() { games.open = !games.open; }
    }
}