diff --git a/frontend/src/components/FlexPanel.tsx b/frontend/src/components/FlexPanel.tsx index 57cc16e..7ea3830 100644 --- a/frontend/src/components/FlexPanel.tsx +++ b/frontend/src/components/FlexPanel.tsx @@ -320,15 +320,18 @@ export function FlexPanel({ onCWSpeed, onReportRST }: { onCWSpeed?: (wpm: number const rxOff = off || !st.rx_avail; // Radio-style global RIT tuning: Ctrl+←/→ nudges the RIT offset (Ctrl+Shift = - // ±100 Hz) from anywhere, without having to click the RIT field first. A - // focused offset row (data-offsetrow) or a text field handles its own keys, so - // this never double-fires. Only active while RIT is on and the RX is available. + // ±100 Hz) from ANYWHERE — including while the callsign/RST entry field has + // focus, which is where the operator is while working a station. Only the RIT + // offset row itself (data-offsetrow) is skipped, since it handles its own + // arrows. Text-field word navigation via Ctrl+← / → is overridden only while + // RIT is actually engaged (guarded below), which is fine mid-QSO. Requires RIT + // on and the RX available. useEffect(() => { const onKey = (e: KeyboardEvent) => { if (!(e.ctrlKey || e.metaKey)) return; if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight') return; const ae = document.activeElement as HTMLElement | null; - if (ae && (ae.hasAttribute('data-offsetrow') || /^(input|textarea|select)$/i.test(ae.tagName) || ae.isContentEditable)) return; + if (ae && ae.hasAttribute('data-offsetrow')) return; if (!st.rit || rxOff) return; e.preventDefault(); const mag = e.shiftKey ? 100 : 10;