Fix UI freeze when PanAdapter is popped out into floating window (#1668)#1669
Conversation
The float path reparented the applet through nullptr (splitter → nullptr → floating window), which on macOS created a transient top-level NSWindow that corrupted the main window's NSResponder chain, freezing all input until re-dock. Fix: add PanFloatingWindow::adoptApplet() which reparents via addWidget() directly into the floating window, skipping the nullptr intermediate — mirroring how the dock path already works (#1344). Also defer sw->show() until after refreshAfterReparent() so Metal initializes on the final NSView surface, preventing render glitches. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CI Build Failure AnalysisHey @aethersdr-agent[bot] — thanks for tackling #1668, this is a great approach to avoid the NSResponder chain corruption! What failedBoth the build and analyze (cpp) jobs failed at the Build step. The root cause is a constructor ambiguity in The problemThe PR adds a new constructor overload: explicit PanFloatingWindow(QWidget* parent = nullptr); // NEWalongside the existing one: PanFloatingWindow(PanadapterApplet* applet, QWidget* parent = nullptr); // EXISTINGThen in auto* fw = new PanFloatingWindow(nullptr);is ambiguous — the compiler can't decide whether How to fixOption A — Use an explicit cast at the call site: auto* fw = new PanFloatingWindow(static_cast<QWidget*>(nullptr));Option B (cleaner) — Remove the default value from the new constructor's parameter, since you're always calling it with an explicit explicit PanFloatingWindow(QWidget* parent); // no defaultThis eliminates the ambiguity entirely and makes the intent clear. Not your faultThe logic of the fix (avoiding the transient top-level Keep up the great work! 🎙️ |
PR #1669 added a new PanFloatingWindow(QWidget*) constructor to support the adopt-after-construct flow that avoids setParent(nullptr). The old PanFloatingWindow(PanadapterApplet*, QWidget*) constructor was left in place but has no callers — and its presence makes PanFloatingWindow(nullptr) ambiguous, breaking the build. Removing the unused overload resolves the ambiguity.
ten9876
left a comment
There was a problem hiding this comment.
Reviewed with user (who has personally reproduced the bug). The primary NSResponder theory may or may not apply — reporter never confirmed — but the secondary fix (moving sw->show() into the deferred callback after refreshAfterReparent) is the likely fix for the 'floating window content freezes, main window unaffected' variant user has reproduced locally. Rendering on a stale Metal/NSView surface before rebind is a real problem.
Pushed a 1-commit cleanup removing the unused PanFloatingWindow(applet, parent) constructor that was causing PanFloatingWindow(nullptr) to be ambiguous and break the build.
) Cuts a community-contribution-heavy point release. Eight community PRs landed plus three AetherClaude crash fixes. Highlights: Community: - Fix RADE RX not decoding on Windows (#1820, NF0T) - Clamp stale DAX RX backlog on macOS — fixes +1.5s FT8 DT bias (#1822, jensenpat) - Fix TCI DAX resampler crosstalk between slices (#1815, Chaosuk97) - Fix RX applet pan slider with NR active (#1799, Chaosuk97) - Fix TCI RX gain default 1.0 → 0.5 to match applet (#1811, NF0T) - Fix HAVE_SERIALPORT guard (#1812, NF0T) - Seamless ADIF logbook auto-reload (#1801, Chaosuk97) - RAC Canada band-plan corrections (#1817, VE3NEM) AetherClaude crash fixes: - Applet reorder with floating containers (#1745 → #1746) - Lazy-build RadioSetupDialog tabs, dodges Wayland FFmpeg/VDPAU crash (#1776 → #1777) - PanAdapter float-freeze — show-after-reset + direct reparent (#1668 → #1669) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Fixes #1668
What was changed
Fix UI freeze when PanAdapter is popped out into floating window (#1668)
Files modified
src/gui/PanFloatingWindow.cppsrc/gui/PanFloatingWindow.hsrc/gui/PanadapterStack.cppGenerated by AetherClaude (automated agent for AetherSDR)