mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-14 21:15:37 +00:00
334a50dda5
* plans: design and implementation plan for desktop tray icon Adds a system tray icon to the SimpleX desktop app with first-close dialog and an Appearance toggle. Covered: minimize-to-tray on Linux, Windows, and macOS via ComposeNativeTray; tri-state CloseBehavior preference; unread-dot icon swap; show/quit menu. The design plan covers the user-facing behavior, library choice rationale (AWT/Compose Tray is broken on stock GNOME per JDK-8322750; ComposeNativeTray uses platform-native APIs and is maintained), and out-of-scope items. The implementation plan splits the work into 8 incremental commits, each leaving the build green. * desktop: add CloseBehavior preference * plans: switch tray to built-in Compose Tray with GNOME probe * desktop: branch close handler on CloseBehavior preference * desktop: first-close dialog for tray choice * desktop: tray icon assets and menu strings * desktop: system tray icon with show/quit menu * desktop: unread indicator on tray icon * desktop: Appearance toggle for minimize-to-tray * desktop: tray feature fixes from audit - Scope closedByError per application iteration; set before dispatchEvent. - Short-circuit Ask to Quit when tray is unavailable. - Sum users.unreadCount (pre-aggregated) instead of iterating chats. - Replace dialog's captured lambdas with a top-level flag and ApplicationScope extension; wrap in SimpleXTheme. - Probe SystemTray with real add/remove off the EDT. - Drop duplicate ic_simplex_tray.svg; nudge unread dot to cy=34 to stop the r=6 circle clipping at the viewBox bottom. - Use mkSafeEnumPreference, PreferenceToggle, SectionTextFooter. * plans: sync desktop tray plans with implementation * desktop: render close-behavior popup via AlertManager Replaces the bespoke DialogWindow with AlertManager.shared.showAlertDialogButtonsColumn — same in-app surface as e.g. the link-previews opt-in alert. Drops isAskingCloseBehavior, the CloseBehaviorDialog Composable, the resetAskCloseBehavior helper, and the per-iteration reset call: the alert's lifecycle is now bounded by AlertManager's single slot, so a crash mid-dialog gets cleanly overwritten by the crash report. * desktop: reset closeBehavior with 'Reset all hints' Generalises AppPreferences.hintPreferences to a heterogeneous List<HintPref> so non-Boolean prefs can participate. Adds closeBehavior to the list, so 'Reset all hints' brings the first-close dialog back. * desktop: skip muted profiles in tray unread sum Active profile still counts so the user can see their own unread; non-active muted profiles contribute zero. * desktop: dark-theme tray icons Adds ic_simplex_tray_light and ic_simplex_tray_dot_light — copies of the existing tray SVGs with the navy back-X swapped to white. Picks the variant via isInDarkTheme() so the icon stays visible against dark tray backgrounds.