diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-15 22:55:28 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-15 22:55:28 +1000 |
| commit | 9c6520b879f29bb9f99f3eef80492f688bacde67 (patch) | |
| tree | 1d3137f3df51393cab7002d5c93a46d621231e4f | |
| parent | utilities/toggles: convert to row of icon buttons (diff) | |
| download | caelestia-shell-9c6520b879f29bb9f99f3eef80492f688bacde67.tar.gz caelestia-shell-9c6520b879f29bb9f99f3eef80492f688bacde67.tar.bz2 caelestia-shell-9c6520b879f29bb9f99f3eef80492f688bacde67.zip | |
utilities/toggles: add gamemode
Closes #617
| -rw-r--r-- | modules/utilities/cards/Toggles.qml | 6 | ||||
| -rw-r--r-- | services/GameMode.qml | 67 | ||||
| -rw-r--r-- | services/Hypr.qml | 3 |
3 files changed, 76 insertions, 0 deletions
diff --git a/modules/utilities/cards/Toggles.qml b/modules/utilities/cards/Toggles.qml index b74fa02..a5a3db3 100644 --- a/modules/utilities/cards/Toggles.qml +++ b/modules/utilities/cards/Toggles.qml @@ -72,6 +72,12 @@ StyledRect { }); } } + + Toggle { + icon: "gamepad" + checked: GameMode.enabled + onClicked: GameMode.enabled = !GameMode.enabled + } } } diff --git a/services/GameMode.qml b/services/GameMode.qml new file mode 100644 index 0000000..d7124cc --- /dev/null +++ b/services/GameMode.qml @@ -0,0 +1,67 @@ +pragma Singleton + +import Quickshell +import Quickshell.Io +import QtQuick + +Singleton { + id: root + + property alias enabled: props.enabled + + function setDynamicConfs(): void { + Quickshell.execDetached(["hyprctl", "--batch", "keyword animations:enabled 0;keyword decoration:shadow:enabled 0;keyword decoration:blur:enabled 0;keyword general:gaps_in 0;keyword general:gaps_out 0;keyword general:border_size 1;keyword decoration:rounding 0;keyword general:allow_tearing 1"]); + } + + onEnabledChanged: { + if (enabled) + setDynamicConfs(); + else + Quickshell.execDetached(["hyprctl", "reload"]); + } + + PersistentProperties { + id: props + + property bool enabled + + reloadableId: "gameMode" + } + + Connections { + target: Hypr + + function onConfigReloaded(): void { + if (props.enabled) + root.setDynamicConfs(); + } + } + + Process { + running: true + command: ["hyprctl", "getoption", "animations:enabled", "-j"] + stdout: StdioCollector { + onStreamFinished: props.enabled = JSON.parse(text).int === 0 + } + } + + IpcHandler { + target: "gameMode" + + function isEnabled(): bool { + return props.enabled; + } + + function toggle(): void { + props.enabled = !props.enabled; + } + + function enable(): void { + props.enabled = true; + } + + function disable(): void { + props.enabled = false; + } + } +} diff --git a/services/Hypr.qml b/services/Hypr.qml index 011e8b1..62bdf78 100644 --- a/services/Hypr.qml +++ b/services/Hypr.qml @@ -26,6 +26,8 @@ Singleton { readonly property string kbLayout: kbMap.get(kbLayoutFull) ?? "??" readonly property var kbMap: new Map() + signal configReloaded + function dispatch(request: string): void { Hyprland.dispatch(request); } @@ -43,6 +45,7 @@ Singleton { return; if (n === "configreloaded") { + root.configReloaded(); setDynamicConfsProc.running = true; } else if (n === "activelayout") { devicesProc.running = true; |