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; }
}
}
|