forked from Shinonome/dots-hyprland
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 QtQuick
|
||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
|
import qs.modules.common.models.hyprland
|
||||||
import qs.services
|
import qs.services
|
||||||
|
|
||||||
QuickToggleModel {
|
QuickToggleModel {
|
||||||
id: root
|
id: root
|
||||||
name: Translation.tr("Game mode")
|
name: Translation.tr("Game mode")
|
||||||
toggled: toggled
|
toggled: !confOpt.value
|
||||||
icon: "gamepad"
|
icon: "gamepad"
|
||||||
|
|
||||||
mainAction: () => {
|
mainAction: () => {
|
||||||
@@ -34,13 +35,11 @@ QuickToggleModel {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Process {
|
|
||||||
id: fetchActiveState
|
HyprlandConfigOption {
|
||||||
running: true
|
id: confOpt
|
||||||
command: ["bash", "-c", `test "$(hyprctl getoption animations:enabled -j | jq ".int")" -ne 0`]
|
key: "animations:enabled"
|
||||||
onExited: (exitCode, exitStatus) => {
|
|
||||||
root.toggled = exitCode !== 0; // Inverted because enabled = nonzero exit
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tooltipText: Translation.tr("Game mode")
|
tooltipText: Translation.tr("Game mode")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ pragma ComponentBehavior: Bound
|
|||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Io
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
import qs.modules.common
|
import qs.modules.common
|
||||||
import qs.modules.common.functions
|
import qs.modules.common.functions
|
||||||
@@ -14,6 +14,8 @@ import qs.modules.common.functions
|
|||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
|
signal reloaded()
|
||||||
|
|
||||||
readonly property string configuratorScriptPath: Quickshell.shellPath("scripts/hyprland/hyprconfigurator.py")
|
readonly property string configuratorScriptPath: Quickshell.shellPath("scripts/hyprland/hyprconfigurator.py")
|
||||||
readonly property string shellOverridesPath: FileUtils.trimFileProtocol(`${Directories.config}/hypr/hyprland/shellOverrides/main.conf`)
|
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 = ""
|
let args = ""
|
||||||
for (let i = 0; i < keys.length; i++) {
|
for (let i = 0; i < keys.length; i++) {
|
||||||
args += `--reset "${keys[i]}" `
|
args += `--reset "${keys[i]}" `
|
||||||
@@ -48,4 +50,14 @@ Singleton {
|
|||||||
`${root.configuratorScriptPath} --file ${root.shellOverridesPath} ${args}` //
|
`${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