perf(ui): the dialogs you type in no longer sit on a blurred backdrop

A backdrop-filter covers the whole window and is recomputed every time
anything above it repaints. Behind these dialogs is an application that
never stops moving — CAT polls four times a second, spots arrive, meters
sweep, maps redraw — so the filter was being recomputed continuously, and
each keystroke's repaint dragged a full-window blur with it. That is why
the lag was felt in Preferences and nowhere else, and why fixing the
cluster macros did not end it.

Worse in one place: the cluster server editor opens FROM Preferences, so
its overlay was the SECOND full-window filter stacked over the first.
That is exactly where the delay was first reported.

The dialogs an operator types in for minutes — Preferences, the cluster
editor, the QSO editor, bulk edit, alert rules, award definitions — now
dim the background harder instead of blurring it. Everything else keeps
the blur: a confirmation you click through in a second costs nothing.
This commit is contained in:
2026-09-08 00:00:47 +02:00
parent 55fbfa4499
commit 3c7ea2d894
7 changed files with 30 additions and 14 deletions
+9 -2
View File
@@ -8858,7 +8858,11 @@ function SettingsModalImpl({ onClose, onSaved, initialSection, onMainPaneChanged
return (
<Dialog open onOpenChange={(o) => { if (!o) onClose(); }}>
<DialogContent className="max-w-[1180px] w-full max-h-[90vh] grid grid-rows-[auto_1fr_auto] gap-0 p-0">
{/* No backdrop blur. This dialog is open for minutes with the operator
typing in it, and the application behind it never stops repainting
a full-window backdrop filter is then recomputed under every one of
those repaints, which is what the delay between key and letter was. */}
<DialogContent overlayBlur={false} className="max-w-[1180px] w-full max-h-[90vh] grid grid-rows-[auto_1fr_auto] gap-0 p-0">
<DialogHeader>
<DialogTitle>{t('settings.title')}</DialogTitle>
<DialogDescription className="sr-only">Configure OpsLog modules station, lookup, hardware</DialogDescription>
@@ -8971,7 +8975,10 @@ function ClusterServerEditor({ value, onCancel, onSave }: ClusterEditorProps) {
(p) => p.host.toLowerCase() === (s.host ?? '').trim().toLowerCase() && p.port === s.port);
return (
<Dialog open onOpenChange={(o) => { if (!o) onCancel(); }}>
<DialogContent className="max-w-[640px] px-6">
{/* Opened from Preferences, so its overlay would be the SECOND
full-window backdrop filter stacked over a moving page which is
where the typing delay was first noticed. */}
<DialogContent overlayBlur={false} className="max-w-[640px] px-6">
<DialogHeader className="px-2">
<DialogTitle>{s.id ? `Edit cluster · ${s.name || 'unnamed'}` : 'New cluster'}</DialogTitle>
<DialogDescription className="text-xs">