[client] Keep tray quit state across an aborted Windows session end

An aborted session end (WM_ENDSESSION with wParam == 0) cleared the
shared shutdown flag, re-enabling hide-on-close cancels and dialogs
while a tray quit was still tearing down. Track the session-end and
tray-quit sources as separate flags; aborting a session end only clears
its own state.
This commit is contained in:
Zoltán Papp
2026-07-24 11:21:42 +02:00
parent 8d9c8b7799
commit 53bd8aae73
2 changed files with 15 additions and 8 deletions

View File

@@ -2,16 +2,23 @@ package services
import "sync/atomic"
var shuttingDown atomic.Bool
var (
sessionEnding atomic.Bool
quitting atomic.Bool
)
func BeginShutdown() {
shuttingDown.Store(true)
func BeginSessionEnd() {
sessionEnding.Store(true)
}
func AbortShutdown() {
shuttingDown.Store(false)
func AbortSessionEnd() {
sessionEnding.Store(false)
}
func BeginShutdown() {
quitting.Store(true)
}
func ShuttingDown() bool {
return shuttingDown.Load()
return sessionEnding.Load() || quitting.Load()
}

View File

@@ -19,11 +19,11 @@ func endSessionInterceptor() func(hwnd uintptr, msg uint32, wParam, lParam uintp
return func(_ uintptr, msg uint32, wParam, _ uintptr) (uintptr, bool) {
switch msg {
case wmQueryEndSession:
services.BeginShutdown()
services.BeginSessionEnd()
return 1, true
case wmEndSession:
if wParam == 0 {
services.AbortShutdown()
services.AbortSessionEnd()
return 0, true
}
log.Info("windows session is ending; exiting immediately")