diff --git a/Modules/Panels/SetupWizard/SetupWizard.qml b/Modules/Panels/SetupWizard/SetupWizard.qml index 67b13e3d5..3c31e6cf9 100644 --- a/Modules/Panels/SetupWizard/SetupWizard.qml +++ b/Modules/Panels/SetupWizard/SetupWizard.qml @@ -24,11 +24,24 @@ SmartPanel { property int currentStep: 0 property int totalSteps: 5 + property bool isCompleting: false onOpened: function () { selectedScaleRatio = Settings.data.general.scaleRatio; selectedBarPosition = Settings.data.bar.position; selectedWallpaperDirectory = Settings.data.wallpaper.directory || Settings.defaultWallpapersDirectory; + isCompleting = false; + } + + Connections { + target: Settings + function onSettingsSaved() { + if (isCompleting) { + Logger.i("SetupWizard", "Settings saved, closing panel"); + isCompleting = false; + root.close(); + } + } } // Setup wizard data @@ -366,24 +379,50 @@ SmartPanel { } function completeSetup() { - Logger.i("SetupWizard", "Completing setup with selected options"); - - if (selectedWallpaperDirectory !== Settings.data.wallpaper.directory) { - Settings.data.wallpaper.directory = selectedWallpaperDirectory; - WallpaperService.refreshWallpapersList(); + if (isCompleting) { + Logger.w("SetupWizard", "completeSetup() called while already completing, ignoring"); + return; } - if (selectedWallpaper !== "") { - WallpaperService.changeWallpaper(selectedWallpaper, undefined); + try { + Logger.i("SetupWizard", "Completing setup with selected options"); + isCompleting = true; + + if (selectedWallpaperDirectory !== Settings.data.wallpaper.directory) { + Settings.data.wallpaper.directory = selectedWallpaperDirectory; + WallpaperService.refreshWallpapersList(); + } + + if (selectedWallpaper !== "") { + WallpaperService.changeWallpaper(selectedWallpaper, undefined); + } + + Settings.data.general.scaleRatio = selectedScaleRatio; + Settings.data.bar.position = selectedBarPosition; + Settings.data.setupCompleted = true; + + // Save settings immediately and wait for settingsSaved signal before closing + Settings.saveImmediate(); + Logger.i("SetupWizard", "Setup completed successfully, waiting for settings save confirmation"); + + // Fallback: if settingsSaved signal doesn't fire within 2 seconds, close anyway + closeTimer.start(); + } catch (error) { + Logger.e("SetupWizard", "Error completing setup:", error); + isCompleting = false; } + } - Settings.data.general.scaleRatio = selectedScaleRatio; - Settings.data.bar.position = selectedBarPosition; - Settings.data.setupCompleted = true; - - Settings.saveImmediate(); - Logger.i("SetupWizard", "Setup completed successfully"); - root.close(); + Timer { + id: closeTimer + interval: 2000 + onTriggered: { + if (isCompleting) { + Logger.w("SetupWizard", "Settings save timeout, closing panel anyway"); + isCompleting = false; + root.close(); + } + } } function applyWallpaperSettings() { diff --git a/shell.qml b/shell.qml index 60937f4eb..74b4710da 100644 --- a/shell.qml +++ b/shell.qml @@ -134,6 +134,7 @@ ShellRoot { setupWizardTimer.start(); } else { Settings.data.setupCompleted = true; + Settings.saveImmediate(); } }