mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
fix(settings): reload settings after nix-managed config file replacements
This commit is contained in:
+34
-4
@@ -40,6 +40,28 @@ Singleton {
|
||||
signal settingsSaved
|
||||
signal settingsReloaded
|
||||
|
||||
// Debounce external reload requests (file watcher + parent directory watcher)
|
||||
// so atomic symlink swaps only trigger one reload.
|
||||
Timer {
|
||||
id: externalReloadTimer
|
||||
running: false
|
||||
interval: 200
|
||||
onTriggered: {
|
||||
if (settingsFileView.path !== undefined) {
|
||||
Logger.d("Settings", "Reloading settings after external change detection");
|
||||
reloadSettings = true;
|
||||
settingsFileView.reload();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function scheduleExternalReload() {
|
||||
if (!directoriesCreated || settingsFileView.path === undefined) {
|
||||
return;
|
||||
}
|
||||
externalReloadTimer.restart();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// -----------------------------------------------------
|
||||
// Ensure directories exist before FileView tries to read files
|
||||
@@ -87,10 +109,7 @@ Singleton {
|
||||
watchChanges: true
|
||||
onAdapterUpdated: saveTimer.start()
|
||||
|
||||
onFileChanged: {
|
||||
reloadSettings = true;
|
||||
reload();
|
||||
}
|
||||
onFileChanged: scheduleExternalReload()
|
||||
|
||||
// Trigger initial load when path changes from empty to actual path
|
||||
onPathChanged: {
|
||||
@@ -142,6 +161,17 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// Watch parent config directory as a fallback for declarative setups where
|
||||
// settings.json may be replaced atomically (e.g., new symlink target on nix rebuild).
|
||||
FileView {
|
||||
id: settingsDirWatcher
|
||||
path: directoriesCreated ? configDir : undefined
|
||||
printErrors: false
|
||||
watchChanges: true
|
||||
|
||||
onFileChanged: scheduleExternalReload()
|
||||
}
|
||||
|
||||
// FileView to load default settings for comparison
|
||||
FileView {
|
||||
id: defaultSettingsFileView
|
||||
|
||||
@@ -74,7 +74,7 @@ SmartPanel {
|
||||
id: playerContent
|
||||
anchors.fill: parent
|
||||
|
||||
property real contentPreferredHeight: mainLayout.implicitHeight + Style.margin2L;
|
||||
property real contentPreferredHeight: mainLayout.implicitHeight + Style.margin2L
|
||||
|
||||
property Component visualizerSource: {
|
||||
switch (root.visualizerType) {
|
||||
|
||||
Reference in New Issue
Block a user