qtgui: consolidate workspace panels and global progress - #230
Merged
Conversation
This was referenced Aug 29, 2026
github-actions
Bot
force-pushed
the
agent/qtgui-mdi-shell-cleanup
branch
2 times, most recently
from
August 29, 2026 08:23
92a88d6 to
f6eb6b6
Compare
Keep the unified ParameterPanel detachable-section lifecycle while allowing specialized inspectors to pin their logical QMainWindow host. Pin slanted-edge Sharpness diagnostics to the reference ImageViewWindow so tiled reference MTF detachment remains stable. Mirror the source document File menu in secondary views while substituting Close View for Close Window, restoring Open, Save Parameters, Render, and Exit without duplicating document state. Extend GUI smoke coverage for File-menu parity and reference-owned generic MTF docks, and document the specialized-host rule.
janhubicka
force-pushed
the
agent/qtgui-mdi-shell-cleanup
branch
from
August 29, 2026 08:24
f6eb6b6 to
134e862
Compare
This was referenced Aug 29, 2026
janhubicka
force-pushed
the
agent/qtgui-mdi-shell-cleanup
branch
from
August 29, 2026 16:40
d79db9c to
82a7fcb
Compare
janhubicka
force-pushed
the
agent/qtgui-mdi-shell-cleanup
branch
from
August 29, 2026 17:02
51bdd8c to
9a53b02
Compare
Guard reference-panel smoke objects with QPointer across event-loop turns so a slow sanitizer run cannot dereference widgets after teardown. Give the deliberately serial New View + slanted-reference smoke a 60-second minimum lifetime, preventing the cleanup timer from racing ARM64 ASan while preserving the full test sequence.
janhubicka
force-pushed
the
agent/qtgui-mdi-shell-cleanup
branch
from
August 29, 2026 17:33
849572b to
166315d
Compare
Remove the obsolete detachable-host pinning API now that sections always follow their actual top-level presentation. Keep workspace progress signal subscriptions document-lifetime so detach/reattach cannot accumulate duplicate callbacks. Make structured GUI smoke tests completion-driven and use the duration only as a failure watchdog, preserving QPointer guards across event-loop turns.
janhubicka
force-pushed
the
agent/qtgui-mdi-shell-cleanup
branch
from
August 29, 2026 18:22
30ee530 to
dabc108
Compare
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
WorkspaceWindowconcern so running work remains visible independently of the selected tab/viewParameterPanellifecycle instead of separate document/reference-view dock implementationsMainWindow,ImageViewWindow, andWorkspaceWindowownership after the multiple-document/multiple-view extension.agents/qtgui.mdand extend Qt GUI smoke coverage for progress across tab switches, File-menu parity, and detachable sectionsDesign
WorkspaceWindowowns top-level application chrome and progress presentation.MainWindowremains the owner of one logical document, processing state, undo and operations. Ordinary secondary views are presentations of that document; specialized/reference views remain constrained to their own compatible image operations.Detachable sections use one reusable
ParameterPanellifecycle: detach, reattach-on-close, repeated detach, host migration, and teardown. A section always follows the actual top-levelQMainWindowcurrently presenting its inspector. Thus an embedded document or reference view detaches into the workspace shell, while a detached presentation uses its own top-level window. NestedQMainWindowinstances are never used as dock hosts.CI follow-ups
The first ARM64 checking failure exposed the slanted-reference MTF ownership path. Qt 6.11 also rejected typed
QObject::findChildren<DetachableSection *>()because the implementation-only helper intentionally has noQ_OBJECT; the intermediate fix removed that meta-object dependency, and detachable sections were made independent of QObject-child discovery.A later ARM64 failure exposed the actual nested-host issue: the slanted-reference Sharpness panel had been pinned to an embedded
ImageViewWindow. That pin was removed; reference diagnostics use the same actual-top-level-window rule as all other detachable sections.The subsequent ARM64 ASan failure was in the smoke harness itself. The generic smoke cleanup timer could fire while the slower structured reference test was inside
processEvents(), destroy the reference panel, and leave stale raw widget pointers in the test. Reference-panel objects crossing an event-loop turn are now guarded withQPointer.The final review cleanup removes the remaining intermediate host-pinning API entirely, keeps progress-signal subscriptions tied to logical-document lifetime so detach/reattach cannot accumulate duplicate callbacks, and makes New View / slanted-reference smoke tests completion-driven. Their duration is now only a failure watchdog: successful structured checks quit immediately, and a watchdog expiry reports a timeout instead of destroying test widgets underneath active assertions. No sanitizer or behavioral assertions were removed.
Commits
fc6aded0091e4014ef113b89f9d74a3262a908bc— workspace/global-progress and uniform detachable-section cleanup134e8622b4bf6813d96d996a4e98066bab10fc77— reference-detachment sanitizer fix and secondary File-menu parityb9908f5f03c92a60ad2f3bda0c87053837dea655— avoid Qt meta-object casts for implementation-only detachable sections82a7fcb90fedcedc67ea9900d28a1bc110fb9e18— track detachable sections independently of layout parenting9a53b02eca8aeed2498a114ac851d5322a24a25b— host detachable sections in the actual top-level window4a42f3384f5765b9b536117ceeae18c58a57cb5b— guard reference smoke widget lifetimes across event-loop turns166315d8e38d96169cc6487a440de30e08f1cae7— initial sanitizer-smoke lifetime follow-updabc1083f4ace1d3660b6197881220d94afdbb79— tighten workspace ownership lifetimes and make structured smoke completion-driven