feat(audit): Batch 20 — Windows/main-process (UI23, W12, W15, L131)

UI23: cookie sign-in + PO-token windows open with the app's resolved
theme background (passed from the IPC layer), no more white flash.
W12: multi-resolution fallback tray icon (16/24/32/48 via
addRepresentation dataURL, embedded in trayFallbackIcons.ts); decode +
scale factors verified in an Electron probe.
W15: hardwareAcceleration setting (default false = software rendering);
index.ts gates disableHardwareAcceleration on it after the portable
redirect; Appearance card switch with restart note; boot path verified.
L131: resolved by-design — clearing the queue acknowledges failures;
flashFrame (W10) covers attention, Diagnostics persists the record.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 12:15:51 -04:00
parent f54d9a1965
commit 3b0d668f6c
11 changed files with 300 additions and 57 deletions
+5 -1
View File
@@ -62,7 +62,11 @@ type CardComponent = () => React.JSX.Element
* state instead of mutating the card's own DOM `style` (M14).
*/
const SECTIONS: { id: string; title: string; cards: CardComponent[] }[] = [
{ id: 'downloads', title: 'Downloads', cards: [DownloadsCard, PostProcessingCard, FilenamesCard] },
{
id: 'downloads',
title: 'Downloads',
cards: [DownloadsCard, PostProcessingCard, FilenamesCard]
},
{ id: 'appearance', title: 'Appearance', cards: [AppearanceCard] },
{ id: 'network', title: 'Network & accounts', cards: [NetworkCard, CookiesCard] },
{ id: 'advanced', title: 'Advanced', cards: [CustomCommandsCard] },
@@ -1,5 +1,13 @@
import { useRef } from 'react'
import { Field, Button, Card, Subtitle2, Caption1, mergeClasses } from '@fluentui/react-components'
import {
Field,
Button,
Card,
Subtitle2,
Caption1,
Switch,
mergeClasses
} from '@fluentui/react-components'
import { PaintBucketRegular, AccessibilityRegular } from '@fluentui/react-icons'
import { type ThemeMode, type AccentColor } from '@shared/ipc'
import { useSettings } from '../../store/settings'
@@ -20,6 +28,7 @@ export function AppearanceCard(): React.JSX.Element {
const focus = useFocusStyles()
const theme = useSettings((s) => s.theme)
const accentColor = useSettings((s) => s.accentColor)
const hardwareAcceleration = useSettings((s) => s.hardwareAcceleration)
const highContrast = useSystemTheme((s) => s.shouldUseHighContrastColors)
const update = useSettings((s) => s.update)
// Store action wraps the IPC call (L93/CC13: no window.api in components).
@@ -91,6 +100,16 @@ export function AppearanceCard(): React.JSX.Element {
</div>
</Field>
<Field
label="Hardware acceleration"
hint="Uses the GPU to draw the window (takes effect after you restart AeroFetch). Off by default: some older GPUs render the window blank with this on — turn it back off if that happens."
>
<Switch
checked={hardwareAcceleration}
onChange={(_, d) => update({ hardwareAcceleration: d.checked })}
/>
</Field>
<Caption1 className={styles.hint}>
{highContrast
? 'A Windows high-contrast theme is active -- AeroFetch follows your system colors.'