aurora18cfb4c
aurora: settings reset waits for hypr.lua to be written before reloading
+21 −14
1 file changed
- M .config/quickshell/aurora/HyprConf.qml +21 −14
| @@ -53,24 +53,24 @@ Singleton { | |||
| 53 | 53 | applyTimer.restart() // coalesces slider drags into one hyprctl call | |
| 54 | 54 | saveTimer.restart() | |
| 55 | 55 | } | |
| 56 | − | function reset(opt) { | |
| 57 | − | if (!isSet(opt)) return | |
| 58 | − | var o = Object.assign({}, overrides) | |
| 59 | − | delete o[opt] | |
| 60 | − | overrides = o | |
| 61 | − | save() | |
| 62 | − | reloadProc.running = true // config-only reload re-reads the repo files + the new hypr.lua | |
| 63 | − | } | |
| 64 | − | function resetAll(prefixes) { // e.g. ["input:"]: reset every override under those sections | |
| 65 | − | var o = Object.assign({}, overrides), changed = false | |
| 56 | + | function reset(opt) { resetAll([opt]) } | |
| 57 | + | // e.g. ["input:", "cursor:"]: drop every override under those sections, then reload Hyprland's config so the | |
| 58 | + | // repo values come back. The reload waits for hypr.lua to be written (luaFile.onSaved): reloading right after | |
| 59 | + | // setText() raced the async write and Hyprland re-read the old overrides. | |
| 60 | + | function resetAll(prefixes) { | |
| 61 | + | var o = Object.assign({}, overrides), n = 0 | |
| 66 | 62 | for (var k in o) | |
| 67 | 63 | for (var i = 0; i < prefixes.length; i++) | |
| 68 | − | if (k.indexOf(prefixes[i]) === 0) { delete o[k]; changed = true; break } | |
| 69 | − | if (!changed) return | |
| 64 | + | if (k.indexOf(prefixes[i]) === 0) { delete o[k]; n++; break } | |
| 65 | + | pending = {} // a slider drag still waiting to be applied would undo the reset | |
| 66 | + | applyTimer.stop() | |
| 67 | + | saveTimer.stop() | |
| 68 | + | if (n === 0) { message = ""; refresh(); return } // nothing overridden: already the config values | |
| 70 | 69 | overrides = o | |
| 70 | + | reloadAfterSave = true | |
| 71 | 71 | save() | |
| 72 | − | reloadProc.running = true | |
| 73 | 72 | } | |
| 73 | + | property bool reloadAfterSave: false | |
| 74 | 74 | function refresh() { | |
| 75 | 75 | readProc.command = ["sh", "-c", 'for o; do hyprctl -j getoption "$o" | tr -d "\\n"; echo; done', "sh"] | |
| 76 | 76 | .concat(Object.keys(types)) | |
| @@ -169,7 +169,14 @@ Singleton { | |||
| 169 | 169 | try { root.overrides = JSON.parse(text()) || {} } catch (e) { root.overrides = {} } | |
| 170 | 170 | } | |
| 171 | 171 | } | |
| 172 | − | FileView { id: luaFile; path: root.dir + "/hypr.lua"; preload: false; printErrors: false } // write-only | |
| 172 | + | FileView { // write-only | |
| 173 | + | id: luaFile | |
| 174 | + | path: root.dir + "/hypr.lua" | |
| 175 | + | preload: false | |
| 176 | + | printErrors: false | |
| 177 | + | onSaved: if (root.reloadAfterSave) { root.reloadAfterSave = false; reloadProc.running = true } | |
| 178 | + | onSaveFailed: err => { root.reloadAfterSave = false; root.message = "could not write hypr.lua (error " + err + ")" } | |
| 179 | + | } | |
| 173 | 180 | ||
| 174 | 181 | Component.onCompleted: refresh() | |
| 175 | 182 | } | |