diff options
Diffstat (limited to 'desktop/island/SceneIcons.qml')
| -rw-r--r-- | desktop/island/SceneIcons.qml | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/desktop/island/SceneIcons.qml b/desktop/island/SceneIcons.qml new file mode 100644 index 0000000..44bcf9c --- /dev/null +++ b/desktop/island/SceneIcons.qml @@ -0,0 +1,46 @@ +// 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. + +pragma Singleton + +import Quickshell +import Quickshell.Io +import QtQuick +import "SceneIcons.js" as Icons + +// The scene-icon map from ~/.config, watched so a settings edit or a hand edit +// recolours the pill with no restart. The starter map covers a missing file. +Singleton { + id: root + + readonly property string path: + (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + + "/quickshell/obs-scene-icons.json" + + property var map: Icons.defaults + + function iconFor(name) { return Icons.iconFor(root.map, name); } + + function save(map) { + root.map = map; + fv.setText(Icons.serialize(map)); + } + + FileView { + id: fv + path: root.path + atomicWrites: true + watchChanges: true + onFileChanged: reload() + onLoaded: root.map = Icons.parse(text()) + onLoadFailed: root.map = Icons.defaults + } +} |
