Docking window state transitions#1033
Merged
wieslawsoltes merged 5 commits intomasterfrom Feb 9, 2026
Merged
Conversation
This was referenced Feb 9, 2026
Closed
This was referenced Feb 18, 2026
Closed
This was referenced Feb 25, 2026
This was referenced Mar 2, 2026
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.
PR Summary: DockingWindowState end-to-end implementation
Branch
feature/docking-window-state-transitionsObjective
Implement full logical docking state tracking with explicit flags across model layers, transitions, serialization, samples, and documentation.
This introduces a single, consistent state contract for dockables and ensures state transitions are deterministic for:
High-level changes
1) New core state contract
DockingWindowStateflags enum:NoneDockedPinnedDocumentFloatingHiddenIDockable.DockingStateto the public core interface.2) Implemented state backing across all model flavors
DockingStatewas added to allIDockablebase implementations so behavior is consistent regardless of MVVM flavor:Dock.Model.MvvmDock.Model.ReactiveUIDock.Model.InpcDock.Model.PrismDock.Model.ReactivePropertyDock.Model.CaliburMicroDock.Model.Avalonia) and managed control base (Dock.Avalonia)All implementations default to
DockingWindowState.Docked.3) Centralized state resolution in factory
Added new partial file:
src/Dock.Model/FactoryBase.DockingState.csThis encapsulates state calculation and propagation:
UpdateDockingWindowState(...)UpdateDockingWindowStateRecursive(...)ResolveDockingWindowState(...)Resolution behavior:
Pinned,Document,DockedFloatingis OR-ed when dockable belongs to floating layout (owner chain / original owner context)Hiddenis OR-ed when dockable itself is hidden or any ancestor in owner chain is hidden4) Transition correctness fixes
Factory operations now update state at transition points:
InitDockable)Important behavioral fix:
HiddeninDockingState.5) Serialization support
Extended Avalonia serializer whitelist to include
DockingStateacross dockable types, so persisted layouts retain logical docking state metadata.6) Samples
Added state test UI in both samples:
DockMvvmSampleDockReactiveUISampleEach
DockableOptionsViewnow includes aComboBoxforDockingStatecombinations to allow interactive validation.7) Documentation (DocFX)
Updated docs to describe new enum and model behavior:
DockingStateDockingWindowStateTransition semantics (expected)
DockingStateDockedPinnedDocumentCommits (granular)
d0c5f5533feat(model): add docking window state flags and runtime trackingf6677c7detest: add docking state transition and serialization coverageb9cb8a4f1test(leaks): cover docking state transition paths5d72d447dfeat(samples): expose docking state combinations in options viewse88d18d30docs(docfx): document docking window state semanticsTest coverage summary
New and updated tests cover:
Docked,Pinned,Document)DockingStateValidated suites (Release):
Dock.Model.Mvvm.UnitTestsDock.Model.ReactiveUI.UnitTestsDock.Model.Prism.UnitTestsDock.Model.ReactiveProperty.UnitTestsDock.Model.CaliburMicro.UnitTestsDock.Model.Avalonia.UnitTestsDock.Model.UnitTestsDock.Avalonia.HeadlessTestsDock.Model.Mvvm.LeakTestsDock.Model.ReactiveUI.LeakTestsAlso validated multi-target build for
Dock.Model(netstandard2.0,net6.0,net8.0,net10.0).Compatibility notes
IDockablenow requiresDockingState.IDockableexternally must add the new property.Risks / follow-up