Background
PRs #2580 and #2635 (closing #2603) applied the if (wasVisible) setGeometry(geom) guard across most of the setFramelessMode(bool) implementations and frameless toggle sites. A complete grep of setGeometry(geom) call sites turned up four more sites with the same code-shape that were missed by both passes:
-
src/gui/ConnectionPanel.cpp:669 — `ConnectionPanel::setFramelessMode`. Unguarded setGeometry(geom) immediately after setWindowFlags(flags).
-
src/gui/AetherialAudioStrip.cpp:702 — `AetherialAudioStrip::setFramelessMode`. Same pattern.
-
src/gui/containers/FloatingContainerWindow.cpp:163 — frameless flag toggle. Inline (no setFramelessMode method), same setGeometry(geom) after the Qt::FramelessWindowHint change without a wasVisible guard.
-
src/gui/containers/FloatingContainerWindow.cpp:180 — always-on-top flag toggle. Same code-shape as the frameless toggle four lines above, different flag (Qt::WindowStaysOnTopHint). Both flag-toggle paths in this class have the bug.
Fix
Identical to PR #2580 / #2635: wrap each setGeometry(geom) in if (wasVisible) { setGeometry(geom); }. ~8 lines added across 2 files.
For the FloatingContainerWindow sites, fixing the always-on-top toggle is bundled with the frameless one because they share the exact same code-shape — saving the user pain when they toggle that flag from a cold-launched, never-shown floating container.
Verification
- Build clean.
- On macOS: open each affected window/container from a cold app launch. Pre-fix, expect top-left placement; post-fix, expect Qt's normal placement.
- Runtime frameless / always-on-top toggle should still preserve geometry on already-visible windows.
Scope and risk
Anyone (including AetherClaude) can pick this up.
73, Jeremy KK7GWY & Claude (AI dev partner)
Background
PRs #2580 and #2635 (closing #2603) applied the
if (wasVisible) setGeometry(geom)guard across most of thesetFramelessMode(bool)implementations and frameless toggle sites. A complete grep ofsetGeometry(geom)call sites turned up four more sites with the same code-shape that were missed by both passes:src/gui/ConnectionPanel.cpp:669— `ConnectionPanel::setFramelessMode`. UnguardedsetGeometry(geom)immediately aftersetWindowFlags(flags).src/gui/AetherialAudioStrip.cpp:702— `AetherialAudioStrip::setFramelessMode`. Same pattern.src/gui/containers/FloatingContainerWindow.cpp:163— frameless flag toggle. Inline (nosetFramelessModemethod), samesetGeometry(geom)after theQt::FramelessWindowHintchange without awasVisibleguard.src/gui/containers/FloatingContainerWindow.cpp:180— always-on-top flag toggle. Same code-shape as the frameless toggle four lines above, different flag (Qt::WindowStaysOnTopHint). Both flag-toggle paths in this class have the bug.Fix
Identical to PR #2580 / #2635: wrap each
setGeometry(geom)inif (wasVisible) { setGeometry(geom); }. ~8 lines added across 2 files.For the
FloatingContainerWindowsites, fixing the always-on-top toggle is bundled with the frameless one because they share the exact same code-shape — saving the user pain when they toggle that flag from a cold-launched, never-shown floating container.Verification
Scope and risk
Anyone (including AetherClaude) can pick this up.
73, Jeremy KK7GWY & Claude (AI dev partner)