diff --git a/Modules/Panels/Launcher/Providers/SessionProvider.qml b/Modules/Panels/Launcher/Providers/SessionProvider.qml index 4ba299447..13a0f7621 100644 --- a/Modules/Panels/Launcher/Providers/SessionProvider.qml +++ b/Modules/Panels/Launcher/Providers/SessionProvider.qml @@ -153,45 +153,42 @@ Item { if (launcher) launcher.close(); + // Execute via Qt.callLater, but reference only singletons + // (root may be destroyed after launcher.close() unloads the panel) Qt.callLater(() => { - executeAction(action); + switch (action) { + case "lock": + if (PanelService.lockScreen && !PanelService.lockScreen.active) { + PanelService.lockScreen.active = true; + } + break; + case "suspend": + if (Settings.data.general.lockOnSuspend) { + CompositorService.lockAndSuspend(); + } else { + CompositorService.suspend(); + } + break; + case "hibernate": + CompositorService.hibernate(); + break; + case "reboot": + CompositorService.reboot(); + break; + case "rebootToUefi": + CompositorService.rebootToUefi(); + break; + case "userspaceReboot": + CompositorService.userspaceReboot(); + break; + case "logout": + CompositorService.logout(); + break; + case "shutdown": + CompositorService.shutdown(); + break; + } }); }; } - - function executeAction(action) { - // Default behavior or custom command handled by CompositorService - switch (action) { - case "lock": - if (PanelService.lockScreen && !PanelService.lockScreen.active) { - PanelService.lockScreen.active = true; - } - break; - case "suspend": - if (Settings.data.general.lockOnSuspend) { - CompositorService.lockAndSuspend(); - } else { - CompositorService.suspend(); - } - break; - case "hibernate": - CompositorService.hibernate(); - break; - case "reboot": - CompositorService.reboot(); - break; - case "rebootToUefi": - CompositorService.rebootToUefi(); - break; - case "userspaceReboot": - CompositorService.userspaceReboot(); - break; - case "logout": - CompositorService.logout(); - break; - case "shutdown": - CompositorService.shutdown(); - break; - } - } }