mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-06 15:29:27 -05:00
refactor gamemodetoggle's config option fetching
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQml
|
||||
import QtQuick
|
||||
import Quickshell.Io
|
||||
import qs.services
|
||||
import "../"
|
||||
|
||||
NestableObject {
|
||||
id: root
|
||||
|
||||
required property string key
|
||||
property alias fetching: fetchProc.running
|
||||
property bool set
|
||||
property var value
|
||||
|
||||
Component.onCompleted: fetch()
|
||||
|
||||
Connections {
|
||||
target: HyprlandConfig
|
||||
function onReloaded() {
|
||||
root.fetch();
|
||||
}
|
||||
}
|
||||
|
||||
function fetch() {
|
||||
fetchProc.command = fetchProc.baseCommand.concat([root.key]);
|
||||
fetchProc.running = true;
|
||||
}
|
||||
|
||||
function setValue(newValue) {
|
||||
HyprlandConfig.set(root.key, newValue)
|
||||
}
|
||||
|
||||
function reset() {
|
||||
HyprlandConfig.reset(root.key)
|
||||
}
|
||||
|
||||
Process {
|
||||
id: fetchProc
|
||||
property list<string> baseCommand: ["hyprctl", "getoption", "-j"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
if (text == "no such option")
|
||||
return;
|
||||
try {
|
||||
const obj = JSON.parse(text);
|
||||
// Note that the value is returned as "<data type>": <value>
|
||||
// It's the only field that isn't always in the same key so we put it in an else
|
||||
for (const key in obj) {
|
||||
if (key == "option")
|
||||
continue;
|
||||
else if (key == "set")
|
||||
root.set = obj[key];
|
||||
else
|
||||
root.value = obj[key];
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(`[HyprlandConfigOption] Failed to fetch option "${root.key}":\n - Output: ${text.trim()}\n - Error: ${e}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
import QtQuick
|
||||
import Quickshell.Io
|
||||
import qs.modules.common.models.hyprland
|
||||
import qs.services
|
||||
|
||||
QuickToggleModel {
|
||||
id: root
|
||||
name: Translation.tr("Game mode")
|
||||
toggled: toggled
|
||||
toggled: !confOpt.value
|
||||
icon: "gamepad"
|
||||
|
||||
mainAction: () => {
|
||||
@@ -34,13 +35,11 @@ QuickToggleModel {
|
||||
]);
|
||||
}
|
||||
}
|
||||
Process {
|
||||
id: fetchActiveState
|
||||
running: true
|
||||
command: ["bash", "-c", `test "$(hyprctl getoption animations:enabled -j | jq ".int")" -ne 0`]
|
||||
onExited: (exitCode, exitStatus) => {
|
||||
root.toggled = exitCode !== 0; // Inverted because enabled = nonzero exit
|
||||
}
|
||||
|
||||
HyprlandConfigOption {
|
||||
id: confOpt
|
||||
key: "animations:enabled"
|
||||
}
|
||||
|
||||
tooltipText: Translation.tr("Game mode")
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Hyprland
|
||||
|
||||
import qs.modules.common
|
||||
import qs.modules.common.functions
|
||||
@@ -14,6 +14,8 @@ import qs.modules.common.functions
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
signal reloaded()
|
||||
|
||||
readonly property string configuratorScriptPath: Quickshell.shellPath("scripts/hyprland/hyprconfigurator.py")
|
||||
readonly property string shellOverridesPath: FileUtils.trimFileProtocol(`${Directories.config}/hypr/hyprland/shellOverrides/main.conf`)
|
||||
|
||||
@@ -39,7 +41,7 @@ Singleton {
|
||||
])
|
||||
}
|
||||
|
||||
function resetMany(keys: var) {
|
||||
function resetMany(keys: list<string>) {
|
||||
let args = ""
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
args += `--reset "${keys[i]}" `
|
||||
@@ -48,4 +50,14 @@ Singleton {
|
||||
`${root.configuratorScriptPath} --file ${root.shellOverridesPath} ${args}` //
|
||||
])
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Hyprland
|
||||
|
||||
function onRawEvent(event) {
|
||||
if (event.name == "configreloaded") {
|
||||
root.reloaded()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user