Fix #2769 (recovered after Claude Code exited before committing)#2772
Merged
Conversation
7 tasks
This was referenced May 17, 2026
ten9876
added a commit
that referenced
this pull request
May 17, 2026
…ust/#2780) (#2786) ## Summary Cherry-pick of @rfoust's panadapter persistence and macOS GPU lifecycle work from PR #2780, applied cleanly onto current main with the stale-snapshot reverts left out. ## Why a cherry-pick rather than merge of #2780 PR #2780 was based on commit \`a0512d99\` (PR #2772 merge), and its single Codex-generated commit included **stale-snapshot content for files outside the intended scope**. Squash-merging #2780 as-is would have silently reverted two recently-landed PRs: - **PR #2770** (\`aether.ax25\` Q_LOGGING_CATEGORY consolidation) — \`AetherAx25LibmodemShim.cpp\`, \`Ax25HfPacketDecodeDialog.cpp\`, plus the test-target linkage in \`CMakeLists.txt\` - **PR #2772** (RadioSetupDialog → PersistentDialog migration) — \`RadioSetupDialog.{cpp,h}\` Verified by three-way merge dry run: post-merge state showed \`class RadioSetupDialog : public QDialog\` (pre-#2772) and 5 occurrences of \`lcAetherAx25Shim\` (pre-#2770). The actual panadapter work in PR #2780 is real and valuable, so this PR extracts it onto a fresh branch from current main and skips the unintentional reverts. ## What's in this PR (= the intended scope of #2780) Cherry-picked verbatim from #2780: | File | Change | |---|---| | \`src/gui/MainWindow.{cpp,h}\` | Persist/restore PanadapterLayout + FloatingPanIds; expand layout count handling from 4 to 8 pans; preserve unseen floating IDs across reconnect | | \`src/gui/PanadapterStack.{cpp,h}\` | Sensible-fallback docked-splitter layouts when some pans are floating or saved layout count mismatches | | \`src/gui/SpectrumWidget.{cpp,h}\` | macOS QRhiWidget lifecycle: \`WindowAboutToChangeInternal\` before reparent; QRhi resource release during shutdown while parent backing stores are valid; guarded late callbacks; auto FFT floor relock after geometry/ypixels changes | | \`src/core/PanadapterStream.cpp\` | Defensive dBm-range clamping (-180 floor, ≥10 dB span); FFT decode clamps pixel input and dbm output to range | | \`src/models/RadioModel.cpp\` | Use actual FFT pane height for radio \`ypixels\` rather than total widget height | Net: **+548 / -215** across 8 files. ## What was NOT cherry-picked (stale-snapshot reverts) | File | Reason | |---|---| | \`CMakeLists.txt\` | -7 lines reverting #2770's test-target linkage I added to fix the link error | | \`src/core/tnc/AetherAx25LibmodemShim.cpp\` | Robbie's content has local \`Q_LOGGING_CATEGORY(lcAetherAx25Shim, ...)\` — pre-#2770. Main has the consolidated \`lcAx25\` from LogManager | | \`src/gui/Ax25HfPacketDecodeDialog.cpp\` | Same pattern — \`lcAetherAx25Dialog\` local, pre-#2770 | | \`src/gui/RadioSetupDialog.{cpp,h}\` | Robbie's diff was **100% pure revert** of #2772 — no new content, no panadapter-related additions. Confirmed by inspecting the full \`git diff a0512d9..e72d7e4 -- RadioSetupDialog.cpp\` output | ## Attribution Commit author is set to **Robbie Foust** so his contribution shows in \`git log\` and the contributor stats. PR #2780 is being reset to **Draft** (not closed) so Robbie has a clean reference point + can update with fresh work if he wants. ## Test plan - [x] Local build clean (402/402 link, only pre-existing warnings) - [x] Three-way merge dry-run against current main: clean - [ ] Manual on Linux: multi-pan layout, detached panadapter, restart, confirm layout + detached state restore - [ ] Manual on macOS GPU build: two detached panadapter windows, Cmd-Q, restart, confirm both restore without the QRhi cleanup callback crash - [ ] Manual: detach/redock panadapter and confirm auto FFT floor relocks ## Cross-references - Replaces #2780 (will be set to Draft after this PR opens) - Same stale-snapshot pattern as aetherclaude #34 (Claude Code), but from OpenAI Codex this time — worth a heads-up to whoever's watching agent-output quality 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Robbie Foust <rfoust@duke.edu> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
aethersdr-agent Bot
added a commit
that referenced
this pull request
May 17, 2026
…ersistent (#2781). Principle III. Settings → FlexControl, Settings → USB Cables, and the XVTR overlay button each called `new RadioSetupDialog(...)` directly, bypassing the m_persistentDialogs registry that PR #2772 (RadioSetupDialog → PersistentDialog migration) set up. Symptoms: clicking any two entries opens two windows, frameless toggle skips the shortcut-opened dialog, and "first opener wins" signal wiring diverges. This pass routes all four entry points (primary Radio Setup, FlexControl, USB Cables, XVTR overlay) through showOrRaisePersistent + selectTab, and factors the txBandSettingsRequested / serialSettingsChanged / sliceLetterDisplayModeChanged / QDialog::finished wiring into a single private helper wireRadioSetupDialogSignals so a fresh construction picks up the full handler set regardless of which menu clicked first. The dialog now lives in m_persistentDialogs unconditionally, so the special-case qobject_cast in setFramelessWindow is removed — the persistentDialogs loop below already handles it. Also re-asserts the primary Radio Setup entry's #2772 migration that #2786 silently reverted during a panadapter-layout merge. Blast radius (codegraph impact on MainWindow::buildMenuBar, max_depth=3): risk_score=0.7297, 18 high_risk affected (top: MainWindow::MainWindow, AppSettings::instance, AppSettings::value). The score reflects buildMenuBar's breadth across the menu surface; the actual edit is four lambda bodies plus a helper, none of which alter buildMenuBar's caller-facing contract. No new test-target link dependencies (wireRadioSetupDialogSignals is private to MainWindow.cpp, RadioSetupDialog.h was already #included).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #2769
What was changed
Fix #2769 (recovered after Claude Code exited before committing)
Files modified
src/gui/MainWindow.cppsrc/gui/RadioSetupDialog.cppsrc/gui/RadioSetupDialog.hGenerated by AetherClaude (automated agent for AetherSDR)