From 53a73df9fc6c5f7199f4c8659155f0fd896a4854 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 18 Feb 2018 00:55:41 +0100 Subject: [PATCH 1/5] Updated version. --- src/Shared/SharedAssemblyInfo.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Shared/SharedAssemblyInfo.cs b/src/Shared/SharedAssemblyInfo.cs index 548a46dde4..98047b4cc8 100644 --- a/src/Shared/SharedAssemblyInfo.cs +++ b/src/Shared/SharedAssemblyInfo.cs @@ -14,6 +14,6 @@ using System.Runtime.CompilerServices; [assembly: AssemblyTrademark("")] [assembly: NeutralResourcesLanguage("en")] -[assembly: AssemblyVersion("0.5.2")] -[assembly: AssemblyFileVersion("0.5.2")] -[assembly: AssemblyInformationalVersion("0.5.2")] +[assembly: AssemblyVersion("0.6.0")] +[assembly: AssemblyFileVersion("0.6.0")] +[assembly: AssemblyInformationalVersion("0.6.0")] From c93335e6c88760d2055f9254d349bfb866b673f3 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 18 Feb 2018 09:06:47 +0300 Subject: [PATCH 2/5] Removed NUGET_API_KEY from appveyor.yml --- appveyor.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 55e703d0d5..5fe05598af 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,8 +5,6 @@ configuration: environment: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 DOTNET_CLI_TELEMETRY_OPTOUT: 1 - NUGET_API_KEY: - secure: Xv89dlP2MSBZKhl1nrWSxqcDgCXB0HRhOd4SWQ+jRJ7QoLxQel5mLTipXM++J3G5 NUGET_API_URL: https://www.nuget.org/api/v2/package MYGET_API_KEY: secure: OtVfyN3ErqQrDTnWH2HDfJDlCiu/i4/X4wFmK3ZXXP7HmCiXYPSbTjMPwwdOxRaK From 53ff0e178c169c4bf074803f96fa6431b2f5b8b3 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 18 Feb 2018 18:17:33 +0100 Subject: [PATCH 3/5] Added failing test for #1376 --- .../TextBoxTests.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index b091f6826e..5ddc8e71e7 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -4,10 +4,12 @@ using System; using System.Reactive.Linq; using Avalonia.Controls.Presenters; +using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Data; using Avalonia.Input; using Avalonia.Markup.Xaml.Data; +using Avalonia.Media; using Avalonia.Platform; using Avalonia.UnitTests; using Moq; @@ -245,6 +247,28 @@ namespace Avalonia.Controls.UnitTests } } + [Theory] + [InlineData(new object[] { false, TextWrapping.NoWrap, ScrollBarVisibility.Hidden })] + [InlineData(new object[] { false, TextWrapping.Wrap, ScrollBarVisibility.Hidden })] + [InlineData(new object[] { true, TextWrapping.NoWrap, ScrollBarVisibility.Auto })] + [InlineData(new object[] { true, TextWrapping.Wrap, ScrollBarVisibility.Disabled })] + public void Has_Correct_Horizontal_ScrollBar_Visibility( + bool acceptsReturn, + TextWrapping wrapping, + ScrollBarVisibility expected) + { + using (UnitTestApplication.Start(Services)) + { + var target = new TextBox + { + AcceptsReturn = acceptsReturn, + TextWrapping = wrapping, + }; + + Assert.Equal(expected, ScrollViewer.GetHorizontalScrollBarVisibility(target)); + } + } + private static TestServices Services => TestServices.MockThreadingInterface.With( standardCursorFactory: Mock.Of()); From 83f795480ba8b10431b925acd58854a1430eadec Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 18 Feb 2018 18:17:41 +0100 Subject: [PATCH 4/5] Fixed #1376 --- src/Avalonia.Controls/TextBox.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index e939ace66d..3ec3d6ed5b 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -103,7 +103,7 @@ namespace Avalonia.Controls if (acceptsReturn) { return wrapping == TextWrapping.NoWrap ? - ScrollBarVisibility.Visible : + ScrollBarVisibility.Auto : ScrollBarVisibility.Disabled; } else From 92d171f154b4537213ce2e073039cde1188de629 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sun, 18 Feb 2018 12:51:49 -0600 Subject: [PATCH 5/5] VisualNodes are now owned by Scene objects, not by their parents. Add a Disposed member to make it easier to diagnose ownership bugs. --- .../Rendering/SceneGraph/IVisualNode.cs | 2 ++ .../Rendering/SceneGraph/Scene.cs | 7 +++++- .../Rendering/SceneGraph/VisualNode.cs | 22 ++++++++++--------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs index 681f00799b..1668f592ec 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs @@ -93,5 +93,7 @@ namespace Avalonia.Rendering.SceneGraph /// to hit test children they must be hit tested manually. /// bool HitTest(Point p); + + bool Disposed { get; } } } diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs index 352d41d024..ffa0b0bcc5 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs @@ -98,7 +98,10 @@ namespace Avalonia.Rendering.SceneGraph public void Dispose() { - Root.Dispose(); + foreach (var node in _index.Values) + { + node.Dispose(); + } } /// @@ -137,6 +140,8 @@ namespace Avalonia.Rendering.SceneGraph Contract.Requires(node != null); _index.Remove(node.Visual); + + node.Dispose(); } private VisualNode Clone(VisualNode source, IVisualNode parent, Dictionary index) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs index 427f819200..3ee689b6d2 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs @@ -113,6 +113,11 @@ namespace Avalonia.Rendering.SceneGraph /// The child to add. public void AddChild(IVisualNode child) { + if (child.Disposed) + { + throw new ObjectDisposedException("Visual node for {node.Visual}"); + } + EnsureChildrenCreated(); _children.Add(child); } @@ -135,7 +140,6 @@ namespace Avalonia.Rendering.SceneGraph { EnsureChildrenCreated(); _children.Remove(child); - child.Dispose(); } /// @@ -145,13 +149,13 @@ namespace Avalonia.Rendering.SceneGraph /// The child to add. public void ReplaceChild(int index, IVisualNode node) { - EnsureChildrenCreated(); - var old = _children[index]; - _children[index] = node; - if (node != old) + if (node.Disposed) { - old.Dispose(); + throw new ObjectDisposedException("Visual node for {node.Visual}"); } + + EnsureChildrenCreated(); + _children[index] = node; } /// @@ -332,13 +336,11 @@ namespace Avalonia.Rendering.SceneGraph _drawOperationsCloned = false; } } + + public bool Disposed { get; } public void Dispose() { - foreach (var child in Children) - { - child.Dispose(); - } _drawOperationsRefCounter?.Dispose(); }