Fix #916 — chart tooltips break after tab switch (real root cause)#937
Merged
Conversation
PR #919 / #921 / #922 addressed the WPF Popup wedge but missed the underlying bug: MemoryContent, ResourceMetricsContent, and QueryPerformanceContent all called DisposeChartHelpers() from their per-control Unloaded event handler. WPF fires Unloaded on every TabControl tab switch, not just on destruction, so switching away from the Memory tab unsubscribed every chart's MouseMove handlers — which were never re-registered when the user came back. The popup-wedge fixes were running inside helpers that had already torn themselves down. ServerTab_Unloaded had the same comment warning future maintainers, but the inner UserControls didn't follow that rule. Changes: - MemoryContent / ResourceMetricsContent / QueryPerformanceContent: drop DisposeChartHelpers() (and ThemeManager unsubscribe) from the tab-switch Unloaded handler. Move the ThemeManager unsubscribe into DisposeChartHelpers() so it runs only on real cleanup. - SystemEventsContent: same pattern — add a DisposeChartHelpers() method that disposes the 19 hover helpers, unsubscribes filter-popup events, and unsubscribes ThemeManager. Empty out OnUnloaded. - ServerTab.CleanupOnClose: add SystemEventsContent.DisposeChartHelpers() to the cleanup chain (its hovers leaked on tab close before this). Final disposal still happens correctly via ServerTab.CleanupOnClose, which only fires when a server tab is actually removed. Lite is unaffected — its Unloaded handler never disposed hovers. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
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
MemoryContent,ResourceMetricsContent, andQueryPerformanceContentall callDisposeChartHelpers()from their per-controlUnloadedevent handler. WPF firesUnloadedon everyTabControltab switch, not just on destruction — so switching away from the Memory tab unsubscribes every chart'sMouseMovehandlers, and they're never re-registered when the user comes back. The popup-wedge fixes were running inside helpers that had already torn themselves down.ServerTab_Unloadedalready had a comment warning maintainers about exactly this trap; the innerUserControls just didn't follow the same rule.Changes
MemoryContent/ResourceMetricsContent/QueryPerformanceContent: dropDisposeChartHelpers()andThemeManagerunsubscribe from the tab-switchUnloadedhandler. Move theThemeManagerunsubscribe intoDisposeChartHelpers()so it runs only on real cleanup.SystemEventsContent: same family of bug. Add aDisposeChartHelpers()method that disposes the 19 hover helpers, unsubscribes filter-popup events, and unsubscribesThemeManager. Empty outOnUnloaded.ServerTab.CleanupOnClose: addSystemEventsContent.DisposeChartHelpers()to the cleanup chain — those 19 hovers were leaking on tab close before this.Final disposal still happens correctly via
ServerTab.CleanupOnClose, which only fires when a server tab is actually removed fromMainTabControl. Lite is unaffected — itsUnloadedhandler only unsubscribesThemeManagerand never disposed chart hovers.Test plan
Fixes #916
🤖 Generated with Claude Code