From 2a1da8913b033394410c5a612b41503cd20f2dff Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Mon, 27 Jul 2026 23:14:12 +0100 Subject: [PATCH] fix(tray): do not un-minimise the application we hand the foreground back to ForceForegroundWindow restores an iconic target, so closing to the tray would pop back open a window the user had deliberately minimised. Skip the handback in that case and leave the choice to Windows. A -tray launch also skips it: it never took the foreground from anyone. Co-Authored-By: Claude Opus 5 --- delphi-backend/Source/PM.Bridge.pas | 6 +++++- delphi-backend/UMainForm.pas | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/delphi-backend/Source/PM.Bridge.pas b/delphi-backend/Source/PM.Bridge.pas index c0f4585..55d72f5 100644 --- a/delphi-backend/Source/PM.Bridge.pas +++ b/delphi-backend/Source/PM.Bridge.pas @@ -726,7 +726,11 @@ begin // captured our own window as its target. Callers that already placed the // foreground themselves (post-autofill) pass False. CaptureForegroundOwner; - if AReturnForeground and (FPrevForeground <> 0) and IsWindow(FPrevForeground) then + // Not when it is minimised: ForceForegroundWindow un-minimises its target, and + // popping another application's window back open is not ours to decide. The + // user put it away — leave the foreground to Windows. + if AReturnForeground and (FPrevForeground <> 0) and IsWindow(FPrevForeground) and + (not IsIconic(FPrevForeground)) then ForceForegroundWindow(FPrevForeground); // 1. Hide the visible form via both FMX state and Win32 ShowWindow. diff --git a/delphi-backend/UMainForm.pas b/delphi-backend/UMainForm.pas index b6922a7..475d3ad 100644 --- a/delphi-backend/UMainForm.pas +++ b/delphi-backend/UMainForm.pas @@ -369,7 +369,9 @@ begin TThread.ForceQueue(nil, procedure begin - FBridge.MinimizeToTray; + // No foreground handback: a -tray launch never took the foreground from + // anyone, so there is nobody to give it back to. + FBridge.MinimizeToTray(True, False); // Hidden now — safe to pay the startup cost. btnStartClick(Nil); LogLine('Launched with --tray, started hidden (balloon suppressed)');