From 3ccbfe8f3bb2f1350e4fe5c3479d19562c3bca60 Mon Sep 17 00:00:00 2001 From: Mona04 Date: Sat, 4 Feb 2023 02:39:03 +0900 Subject: [PATCH 01/10] issue #422 --- source/Components/AvalonDock/Themes/generic.xaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/Components/AvalonDock/Themes/generic.xaml b/source/Components/AvalonDock/Themes/generic.xaml index 68df206a..b3588682 100644 --- a/source/Components/AvalonDock/Themes/generic.xaml +++ b/source/Components/AvalonDock/Themes/generic.xaml @@ -758,9 +758,7 @@ BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> + Content="{Binding LayoutItem.View, RelativeSource={RelativeSource TemplatedParent}}" /> From d43c7c6996af1304079352e85edc3f0d25cfd981 Mon Sep 17 00:00:00 2001 From: Khaos Date: Thu, 9 Feb 2023 10:46:54 +0100 Subject: [PATCH 02/10] Fix: potential NRE on close --- source/Components/AvalonDock/DockingManager.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/Components/AvalonDock/DockingManager.cs b/source/Components/AvalonDock/DockingManager.cs index a6a396d5..232dca16 100644 --- a/source/Components/AvalonDock/DockingManager.cs +++ b/source/Components/AvalonDock/DockingManager.cs @@ -1138,7 +1138,7 @@ public double GridSplitterHeight new FrameworkPropertyMetadata((Style)null)); /// - /// Gets or sets the GridSplitterVerticalStyle property. This dependency property + /// Gets or sets the GridSplitterVerticalStyle property. This dependency property /// indicates the style to apply to the LayoutGridResizerControl when displayed vertically. /// public Style GridSplitterVerticalStyle @@ -1164,7 +1164,7 @@ public Style GridSplitterVerticalStyle new FrameworkPropertyMetadata((Style)null)); /// - /// Gets or sets the GridSplitterHorizontalStyle property. This dependency property + /// Gets or sets the GridSplitterHorizontalStyle property. This dependency property /// indicates the style to apply to the LayoutGridResizerControl when displayed horizontally. /// public Style GridSplitterHorizontalStyle @@ -2292,7 +2292,7 @@ private void DocumentsSourceElementsChanged(object sender, NotifyCollectionChang foreach (var documentToRemove in documentsToRemove) { documentToRemove.Content = null; - documentToRemove.Parent.RemoveChild(documentToRemove); + documentToRemove.Parent?.RemoveChild(documentToRemove); RemoveViewFromLogicalChild(documentToRemove); } } @@ -2354,7 +2354,7 @@ private void DocumentsSourceElementsChanged(object sender, NotifyCollectionChang var documentsToRemove = GetItemsToRemoveAfterReset(DocumentsSource); foreach (var documentToRemove in documentsToRemove) { - (documentToRemove.Parent as ILayoutContainer).RemoveChild( + (documentToRemove.Parent as ILayoutContainer)?.RemoveChild( documentToRemove); RemoveViewFromLogicalChild(documentToRemove); } From e30352f789de9861a53962f1031b5f99df4d7973 Mon Sep 17 00:00:00 2001 From: Khaos Date: Thu, 9 Feb 2023 15:33:53 +0100 Subject: [PATCH 03/10] Fix floating windows still created twice --- source/Components/AvalonDock/DockingManager.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/Components/AvalonDock/DockingManager.cs b/source/Components/AvalonDock/DockingManager.cs index a6a396d5..be5a9df1 100644 --- a/source/Components/AvalonDock/DockingManager.cs +++ b/source/Components/AvalonDock/DockingManager.cs @@ -1138,7 +1138,7 @@ public double GridSplitterHeight new FrameworkPropertyMetadata((Style)null)); /// - /// Gets or sets the GridSplitterVerticalStyle property. This dependency property + /// Gets or sets the GridSplitterVerticalStyle property. This dependency property /// indicates the style to apply to the LayoutGridResizerControl when displayed vertically. /// public Style GridSplitterVerticalStyle @@ -1164,7 +1164,7 @@ public Style GridSplitterVerticalStyle new FrameworkPropertyMetadata((Style)null)); /// - /// Gets or sets the GridSplitterHorizontalStyle property. This dependency property + /// Gets or sets the GridSplitterHorizontalStyle property. This dependency property /// indicates the style to apply to the LayoutGridResizerControl when displayed horizontally. /// public Style GridSplitterHorizontalStyle @@ -2125,9 +2125,8 @@ private void DockingManager_Loaded(object sender, RoutedEventArgs e) } _fwHiddenList.Clear(); - // load floating windows not already loaded! (issue #59 & #254) - var items = new List(Layout.FloatingWindows.Where(fw => !_fwList.Any(fwc => fwc.Model == fw))); - foreach (var fw in items) + // load floating windows not already loaded! (issue #59 & #254 & #426) + foreach (var fw in Layout.FloatingWindows.Where(fw => !_fwList.Any(fwc => fwc.Model == fw))) CreateUIElementForModel(fw); //create the overlaywindow if it's possible From 02fa07044dfa5f474351a29930eb64ca87b53467 Mon Sep 17 00:00:00 2001 From: Calum Robinson Date: Thu, 16 Feb 2023 08:06:11 +0000 Subject: [PATCH 04/10] Add DockingManager.ShowNavigator --- source/Components/AvalonDock/DockingManager.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/Components/AvalonDock/DockingManager.cs b/source/Components/AvalonDock/DockingManager.cs index a6a396d5..6d2bb7d0 100644 --- a/source/Components/AvalonDock/DockingManager.cs +++ b/source/Components/AvalonDock/DockingManager.cs @@ -1383,6 +1383,22 @@ public bool AutoWindowSizeWhenOpened #endregion AutoWindowSizeWhenOpened + #region ShowNavigator + + /// dependency property. + public static readonly DependencyProperty ShowNavigatorProperty = DependencyProperty.Register(nameof(ShowNavigator), typeof(bool), typeof(DockingManager), + new FrameworkPropertyMetadata(true)); + + /// Gets/sets whether the navigator window should be shown when the user presses Control + Tab. + [Bindable(true), Description("Gets/sets whether floating windows should show the system menu when a custom context menu is not defined."), Category("FloatingWindow")] + public bool ShowNavigator + { + get => (bool)GetValue(ShowNavigatorProperty); + set => SetValue(ShowNavigatorProperty, value); + } + + #endregion ShowNavigator + #endregion Public Properties #region LogicalChildren @@ -1428,7 +1444,7 @@ private void ClearLogicalChildrenList() private bool IsNavigatorWindowActive => _navigatorWindow != null; - private bool CanShowNavigatorWindow => _layoutItems.Any(); + private bool CanShowNavigatorWindow => ShowNavigator && _layoutItems.Any(); #endregion Private Properties From a48e6897b4ad12ed61eeec84b8a31563806db7cc Mon Sep 17 00:00:00 2001 From: Roy Zwart Date: Fri, 17 Mar 2023 16:05:37 +0100 Subject: [PATCH 05/10] Fix unwanted group orientation change when using mixed orientation --- .../Controls/DocumentPaneDropTarget.cs | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/source/Components/AvalonDock/Controls/DocumentPaneDropTarget.cs b/source/Components/AvalonDock/Controls/DocumentPaneDropTarget.cs index 49613e77..a404196e 100644 --- a/source/Components/AvalonDock/Controls/DocumentPaneDropTarget.cs +++ b/source/Components/AvalonDock/Controls/DocumentPaneDropTarget.cs @@ -74,18 +74,21 @@ internal DocumentPaneDropTarget(LayoutDocumentPaneControl paneControl, /// protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { - ILayoutDocumentPane targetModel = _targetPane.Model as ILayoutDocumentPane; - LayoutDocument documentActive = floatingWindow.Descendents().OfType().FirstOrDefault(); + var targetModel = (ILayoutDocumentPane)_targetPane.Model; + var documentActive = floatingWindow.Descendents().OfType().FirstOrDefault(); - // ensure paneGroup var paneGroup = targetModel.Parent as LayoutDocumentPaneGroup; + var requiredOrientation = Type == DropTargetType.DocumentPaneDockBottom || Type == DropTargetType.DocumentPaneDockTop ? + System.Windows.Controls.Orientation.Vertical : System.Windows.Controls.Orientation.Horizontal; + var allowMixedOrientation = targetModel.Root.Manager.AllowMixedOrientation; + if(paneGroup == null) { - var targetModelAsPositionableElement = targetModel as ILayoutPositionableElement; - var layoutGroup = targetModel.Parent as ILayoutGroup; - paneGroup = new LayoutDocumentPaneGroup() + var targetModelAsPositionableElement = (ILayoutPositionableElement)targetModel; + var layoutGroup = (ILayoutGroup)targetModel.Parent; + paneGroup = new LayoutDocumentPaneGroup { - Orientation = System.Windows.Controls.Orientation.Vertical, + Orientation = requiredOrientation, DockWidth = targetModelAsPositionableElement.DockWidth, DockHeight = targetModelAsPositionableElement.DockHeight, }; @@ -93,8 +96,20 @@ protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) paneGroup.Children.Add(targetModel); layoutGroup.InsertChildAt(0, paneGroup); } - var paneGroupOrientaion = paneGroup as ILayoutOrientableGroup; - + else if (allowMixedOrientation && paneGroup.Orientation != requiredOrientation && Type != DropTargetType.DocumentPaneDockInside) + { + var targetModelAsPositionableElement = (ILayoutPositionableElement)targetModel; + var newGroup = new LayoutDocumentPaneGroup + { + Orientation = requiredOrientation, + DockWidth = targetModelAsPositionableElement.DockWidth, + DockHeight = targetModelAsPositionableElement.DockHeight, + }; + + paneGroup.ReplaceChild(targetModel, newGroup); + newGroup.Children.Add(targetModel); + paneGroup = newGroup; + } switch (Type) { @@ -104,7 +119,7 @@ protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { - if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Vertical) + if (!allowMixedOrientation && paneGroup.Orientation != System.Windows.Controls.Orientation.Vertical) { paneGroup.Orientation = System.Windows.Controls.Orientation.Vertical; } @@ -132,7 +147,7 @@ protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) { - if(paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Vertical) + if(!allowMixedOrientation && paneGroup.Orientation != System.Windows.Controls.Orientation.Vertical) { paneGroup.Orientation = System.Windows.Controls.Orientation.Vertical; } @@ -159,7 +174,7 @@ protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) #region DropTargetType.DocumentPaneDockLeft { - if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Horizontal) + if (!allowMixedOrientation && paneGroup.Orientation != System.Windows.Controls.Orientation.Horizontal) { paneGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; } @@ -186,7 +201,7 @@ protected override void Drop(LayoutDocumentFloatingWindow floatingWindow) #region DropTargetType.DocumentPaneDockRight { - if (paneGroupOrientaion.Orientation != System.Windows.Controls.Orientation.Horizontal) + if (!allowMixedOrientation && paneGroup.Orientation != System.Windows.Controls.Orientation.Horizontal) { paneGroup.Orientation = System.Windows.Controls.Orientation.Horizontal; } From 982004bbc8f0be0e866d807f88f53accacc3e2ed Mon Sep 17 00:00:00 2001 From: Dirkster99 Date: Fri, 24 Mar 2023 14:29:55 +0100 Subject: [PATCH 06/10] AvalonDock Version 4.72.0 --- README.md | 12 ++++++++++++ .../AvalonDock.Themes.Aero.csproj | 10 +++++----- .../AvalonDock.Themes.Expression.csproj | 10 +++++----- .../AvalonDock.Themes.Metro.csproj | 10 +++++----- .../AvalonDock.Themes.VS2010.csproj | 10 +++++----- .../AvalonDock.Themes.VS2013.csproj | 8 ++++---- source/Components/AvalonDock/AvalonDock.csproj | 8 ++++---- 7 files changed, 40 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 3475f69b..171ad87f 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,18 @@ to also theme standard elements, such as, button and textblock etc. # Mile Stone History +## Fixes and Features Added in Version 4.72.0 + +- [#423 issue #422 DockingManager.LayoutItemTemplateSelector is applied twice because...](https://github.com/Dirkster99/AvalonDock/pull/423) (thanx to [Mona04](https://github.com/Mona04)) + +- [#425 Fix: Potential NRE on app close](https://github.com/Dirkster99/AvalonDock/pull/425) (thanx to [Khaos66](https://github.com/Khaos66)) + +- [#427 Fix floating windows still created twice](https://github.com/Dirkster99/AvalonDock/pull/427) (thanx to [Khaos66](https://github.com/Khaos66)) + +- [Add DockingManager.ShowNavigator](https://github.com/Dirkster99/AvalonDock/pull/428) (thanx to [Calum Robinson](https://github.com/calumr)) + +- [#431 Fix unwanted group orientation change when using mixed orientation](https://github.com/Dirkster99/AvalonDock/pull/431) (thanx to [KuroiRoy](https://github.com/KuroiRoy)) + ## Fixes Added in Version 4.71.2 - [#416 Fix Issue #226: Restore floating windows to maximized state](https://github.com/Dirkster99/AvalonDock/pull/416) (thanx to [Michael Möller](https://github.com/moellerm)) diff --git a/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj b/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj index 9ecdd743..125f3ef7 100644 --- a/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj +++ b/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj @@ -1,4 +1,4 @@ - + AvalonDock.Themes netcoreapp3.0;net5.0-windows;net40 @@ -6,10 +6,10 @@ sn.snk true true - 4.71.2 - 4.71.2 - 4.71.2 - 4.71.2 + 4.72.0 + 4.72.0 + 4.72.0 + 4.72.0 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj b/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj index ecbb0b0c..d6995897 100644 --- a/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj +++ b/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj @@ -1,4 +1,4 @@ - + AvalonDock.Themes netcoreapp3.0;net5.0-windows;net40 @@ -6,10 +6,10 @@ sn.snk true true - 4.71.2 - 4.71.2 - 4.71.2 - 4.71.2 + 4.72.0 + 4.72.0 + 4.72.0 + 4.72.0 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj b/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj index 9db59365..70e216a4 100644 --- a/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj +++ b/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj @@ -1,4 +1,4 @@ - + AvalonDock.Themes netcoreapp3.0;net5.0-windows;net40 @@ -6,10 +6,10 @@ sn.snk true true - 4.71.2 - 4.71.2 - 4.71.2 - 4.71.2 + 4.72.0 + 4.72.0 + 4.72.0 + 4.72.0 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj b/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj index 9251dd1d..3b8692e2 100644 --- a/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj +++ b/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj @@ -1,4 +1,4 @@ - + AvalonDock.Themes netcoreapp3.0;net5.0-windows;net40 @@ -6,10 +6,10 @@ sn.snk true true - 4.71.2 - 4.71.2 - 4.71.2 - 4.71.2 + 4.72.0 + 4.72.0 + 4.72.0 + 4.72.0 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj b/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj index 98ae0c52..454ce40f 100644 --- a/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj +++ b/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj @@ -6,10 +6,10 @@ sn.snk true true - 4.71.2 - 4.71.2 - 4.71.2 - 4.71.2 + 4.72.0 + 4.72.0 + 4.72.0 + 4.72.0 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock/AvalonDock.csproj b/source/Components/AvalonDock/AvalonDock.csproj index 72fdf0bd..362bf56e 100644 --- a/source/Components/AvalonDock/AvalonDock.csproj +++ b/source/Components/AvalonDock/AvalonDock.csproj @@ -6,10 +6,10 @@ true sn.snk true - 4.71.2 - 4.71.2 - 4.71.2 - 4.71.2 + 4.72.0 + 4.72.0 + 4.72.0 + 4.72.0 Open Source Dirkster.AvalonDock 2017-2023 From 0cc7cb5fa04d2ca0d28929f8c68a5bb1d3fbc2e6 Mon Sep 17 00:00:00 2001 From: frsa Date: Fri, 31 Mar 2023 15:48:30 +0200 Subject: [PATCH 07/10] Changed how the next active document is picked on document close. --- .../Components/AvalonDock/DockingManager.cs | 122 +++++++----------- 1 file changed, 45 insertions(+), 77 deletions(-) diff --git a/source/Components/AvalonDock/DockingManager.cs b/source/Components/AvalonDock/DockingManager.cs index aaeffa0e..8c7ca9d0 100644 --- a/source/Components/AvalonDock/DockingManager.cs +++ b/source/Components/AvalonDock/DockingManager.cs @@ -1870,6 +1870,36 @@ internal void RemoveFloatingWindow(LayoutFloatingWindowControl floatingWindow) LayoutFloatingWindowControlClosed?.Invoke(this, new LayoutFloatingWindowControlClosedEventArgs(floatingWindow)); } + + + internal void ExecuteCloseAllButThisCommand(LayoutContent contentSelected) + { + foreach (var contentToClose in Layout.Descendents().OfType().Where(d => d != contentSelected && (d.Parent is LayoutDocumentPane || d.Parent is LayoutDocumentFloatingWindow)).ToArray()) + Close(contentToClose); + } + + internal void ExecuteCloseAllCommand(LayoutContent contentSelected) + { + foreach (var contentToClose in Layout.Descendents().OfType().Where(d => (d.Parent is LayoutDocumentPane || d.Parent is LayoutDocumentFloatingWindow)).ToArray()) + Close(contentToClose); + } + + internal void ExecuteCloseCommand(LayoutAnchorable anchorable) + { + if (!(anchorable is LayoutAnchorable model)) return; + + AnchorableClosingEventArgs closingArgs = null; + AnchorableClosing?.Invoke(this, closingArgs = new AnchorableClosingEventArgs(model)); + if (closingArgs?.Cancel == true) + return; + + if (model.CloseAnchorable()) + { + RemoveViewFromLogicalChild(model); + AnchorableClosed?.Invoke(this, new AnchorableClosedEventArgs(model)); + } + } + internal void ExecuteCloseCommand(LayoutDocument document) { if (DocumentClosing != null) @@ -1879,10 +1909,8 @@ internal void ExecuteCloseCommand(LayoutDocument document) if (argsClosing.Cancel) return; } - // - // Determine the index of the document that will be removed. - // - int indexOfDocumentToRemove = GetIndexOfDocument(document); + // Get the document to activate after the close. + LayoutDocument documentToActivate = GetDocumentToActivate(document); if (!document.CloseDocument()) return; @@ -1894,98 +1922,38 @@ internal void ExecuteCloseCommand(LayoutDocument document) //get rid of the closed document content document.Content = null; - int indexOfDocumentToSelect = indexOfDocumentToRemove - 1; - - if (indexOfDocumentToSelect < 0) - { - indexOfDocumentToSelect = 0; - } - // - // Determine the new active document and activate it. + // Activate the document determined to be the next active document. // This doesn't only update the layout, but also all related (dependency) properties. // - LayoutDocument layoutDocument = GetDocumentOnIndex(indexOfDocumentToSelect); - - if (layoutDocument != null) + if (documentToActivate != null) { - layoutDocument.IsActive = true; + documentToActivate.IsActive = true; } } - private LayoutDocument GetDocumentOnIndex(int indexToFind) + private LayoutDocument GetDocumentToActivate(LayoutDocument previousDocument) { - if (indexToFind < 0) - { - throw new ArgumentOutOfRangeException(nameof(indexToFind)); - } + ILayoutContainer parentContainer = previousDocument.Parent; + IEnumerable siblingDocuments = parentContainer?.Children.OfType() ?? Enumerable.Empty(); - int index = 0; - - foreach (LayoutDocument layoutDocument in this.Layout.Descendents().OfType()) + foreach (var childPair in siblingDocuments.Zip(siblingDocuments.Skip(1), Tuple.Create)) { - if (index == indexToFind) + if (childPair.Item2 == previousDocument) { - return layoutDocument; + return childPair.Item1; } - - index++; } - return null; - } - - private int GetIndexOfDocument(LayoutDocument documentToFind) - { - if (documentToFind == null) - { - throw new ArgumentNullException(nameof(documentToFind)); - } - - int index = 0; - - foreach (LayoutDocument layoutDocument in this.Layout.Descendents().OfType()) + foreach (LayoutDocument document in this.Layout.Descendents().OfType()) { - if (layoutDocument == documentToFind) + if (document.IsSelected) { - return index; + return document; } - - index++; } - // - // Not found. - // - return -1; - } - - internal void ExecuteCloseAllButThisCommand(LayoutContent contentSelected) - { - foreach (var contentToClose in Layout.Descendents().OfType().Where(d => d != contentSelected && (d.Parent is LayoutDocumentPane || d.Parent is LayoutDocumentFloatingWindow)).ToArray()) - Close(contentToClose); - } - - internal void ExecuteCloseAllCommand(LayoutContent contentSelected) - { - foreach (var contentToClose in Layout.Descendents().OfType().Where(d => (d.Parent is LayoutDocumentPane || d.Parent is LayoutDocumentFloatingWindow)).ToArray()) - Close(contentToClose); - } - - internal void ExecuteCloseCommand(LayoutAnchorable anchorable) - { - if (!(anchorable is LayoutAnchorable model)) return; - - AnchorableClosingEventArgs closingArgs = null; - AnchorableClosing?.Invoke(this, closingArgs = new AnchorableClosingEventArgs(model)); - if (closingArgs?.Cancel == true) - return; - - if (model.CloseAnchorable()) - { - RemoveViewFromLogicalChild(model); - AnchorableClosed?.Invoke(this, new AnchorableClosedEventArgs(model)); - } + return null; } internal void ExecuteHideCommand(LayoutAnchorable anchorable) From 31cf051dd808e71ec314885f35c1a88da9bc4327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benny=20B=C3=BCrger?= Date: Fri, 28 Apr 2023 15:07:18 +0200 Subject: [PATCH 08/10] NullCheck for DragPoint --- .../Controls/LayoutAnchorableFloatingWindowControl.cs | 2 ++ .../Controls/LayoutDocumentFloatingWindowControl.cs | 2 ++ .../Components/AvalonDock/Controls/TransformExtentions.cs | 7 +++++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/source/Components/AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs b/source/Components/AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs index 16551443..b9d6e0a4 100644 --- a/source/Components/AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs +++ b/source/Components/AvalonDock/Controls/LayoutAnchorableFloatingWindowControl.cs @@ -149,6 +149,8 @@ bool IOverlayWindowHost.HitTestScreen(Point dragPoint) bool HitTest(Point dragPoint) { + if (dragPoint == default(Point)) + return false; var detectionRect = new Rect(this.PointToScreenDPIWithoutFlowDirection(new Point()), this.TransformActualSizeToAncestor()); return detectionRect.Contains(dragPoint); } diff --git a/source/Components/AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs b/source/Components/AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs index 44bb0a79..e75d1aa6 100644 --- a/source/Components/AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs +++ b/source/Components/AvalonDock/Controls/LayoutDocumentFloatingWindowControl.cs @@ -224,6 +224,8 @@ bool IOverlayWindowHost.HitTestScreen(Point dragPoint) bool HitTest(Point dragPoint) { + if (dragPoint == default(Point)) + return false; var detectionRect = new Rect(this.PointToScreenDPIWithoutFlowDirection(new Point()), this.TransformActualSizeToAncestor()); return detectionRect.Contains(dragPoint); } diff --git a/source/Components/AvalonDock/Controls/TransformExtentions.cs b/source/Components/AvalonDock/Controls/TransformExtentions.cs index 4b576366..768601ce 100644 --- a/source/Components/AvalonDock/Controls/TransformExtentions.cs +++ b/source/Components/AvalonDock/Controls/TransformExtentions.cs @@ -1,4 +1,4 @@ -/************************************************************************ +/************************************************************************ AvalonDock Copyright (C) 2007-2013 Xceed Software Inc. @@ -59,7 +59,10 @@ public static Rect GetScreenArea(this FrameworkElement element) public static Point TransformToDeviceDPI(this Visual visual, Point pt) { - Matrix m = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice; + var compositionTarget = PresentationSource.FromVisual(visual).CompositionTarget; + if (compositionTarget == null) + return default; + Matrix m = compositionTarget.TransformToDevice; return new Point(pt.X / m.M11, pt.Y / m.M22); } From f80e1802f81b341bb1e023bee207c0670d4b0350 Mon Sep 17 00:00:00 2001 From: Dirkster99 Date: Wed, 16 Aug 2023 12:05:22 +0200 Subject: [PATCH 09/10] AvalonDock Version 4.72.1 --- .../AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj | 8 ++++---- .../AvalonDock.Themes.Expression.csproj | 8 ++++---- .../AvalonDock.Themes.Metro.csproj | 8 ++++---- .../AvalonDock.Themes.VS2010.csproj | 8 ++++---- .../AvalonDock.Themes.VS2013.csproj | 8 ++++---- source/Components/AvalonDock/AvalonDock.csproj | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj b/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj index 125f3ef7..33b4310a 100644 --- a/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj +++ b/source/Components/AvalonDock.Themes.Aero/AvalonDock.Themes.Aero.csproj @@ -6,10 +6,10 @@ sn.snk true true - 4.72.0 - 4.72.0 - 4.72.0 - 4.72.0 + 4.72.1 + 4.72.1 + 4.72.1 + 4.72.1 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj b/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj index d6995897..d7ed522c 100644 --- a/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj +++ b/source/Components/AvalonDock.Themes.Expression/AvalonDock.Themes.Expression.csproj @@ -6,10 +6,10 @@ sn.snk true true - 4.72.0 - 4.72.0 - 4.72.0 - 4.72.0 + 4.72.1 + 4.72.1 + 4.72.1 + 4.72.1 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj b/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj index 70e216a4..34203fe8 100644 --- a/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj +++ b/source/Components/AvalonDock.Themes.Metro/AvalonDock.Themes.Metro.csproj @@ -6,10 +6,10 @@ sn.snk true true - 4.72.0 - 4.72.0 - 4.72.0 - 4.72.0 + 4.72.1 + 4.72.1 + 4.72.1 + 4.72.1 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj b/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj index 3b8692e2..844d5fde 100644 --- a/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj +++ b/source/Components/AvalonDock.Themes.VS2010/AvalonDock.Themes.VS2010.csproj @@ -6,10 +6,10 @@ sn.snk true true - 4.72.0 - 4.72.0 - 4.72.0 - 4.72.0 + 4.72.1 + 4.72.1 + 4.72.1 + 4.72.1 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj b/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj index 454ce40f..cc2bf377 100644 --- a/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj +++ b/source/Components/AvalonDock.Themes.VS2013/AvalonDock.Themes.VS2013.csproj @@ -6,10 +6,10 @@ sn.snk true true - 4.72.0 - 4.72.0 - 4.72.0 - 4.72.0 + 4.72.1 + 4.72.1 + 4.72.1 + 4.72.1 Open Source Dirkster.AvalonDock 2017-2023 diff --git a/source/Components/AvalonDock/AvalonDock.csproj b/source/Components/AvalonDock/AvalonDock.csproj index 362bf56e..6986bf34 100644 --- a/source/Components/AvalonDock/AvalonDock.csproj +++ b/source/Components/AvalonDock/AvalonDock.csproj @@ -6,10 +6,10 @@ true sn.snk true - 4.72.0 - 4.72.0 - 4.72.0 - 4.72.0 + 4.72.1 + 4.72.1 + 4.72.1 + 4.72.1 Open Source Dirkster.AvalonDock 2017-2023 From 30599e401419ad238187a3594f5dd85acaa5546b Mon Sep 17 00:00:00 2001 From: Dirkster99 Date: Wed, 16 Aug 2023 12:18:05 +0200 Subject: [PATCH 10/10] Updated Readme.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 171ad87f..6f6d2157 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,12 @@ to also theme standard elements, such as, button and textblock etc. # Mile Stone History + +## Fixes and Features Added in Version 4.72.0 + +- [#436 Changed how the next active document is picked on document close.](https://github.com/Dirkster99/AvalonDock/pull/436) (thanx to [FredrikS fredriks123](https://github.com/fredriks123)) +- [#438 NullCheck for DragPoint](https://github.com/Dirkster99/AvalonDock/pull/438) (thanx to [Ben bbuerger](https://github.com/bbuerger)) + ## Fixes and Features Added in Version 4.72.0 - [#423 issue #422 DockingManager.LayoutItemTemplateSelector is applied twice because...](https://github.com/Dirkster99/AvalonDock/pull/423) (thanx to [Mona04](https://github.com/Mona04))