Browse Source

Merge branch 'master' into xamlil

pull/2322/head
danwalmsley 7 years ago
committed by GitHub
parent
commit
fe1a6d9b86
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      samples/ControlCatalog.Android/ControlCatalog.Android.csproj
  2. 2
      samples/interop/WindowsInteropTest/Program.cs
  3. 5
      samples/interop/WindowsInteropTest/WindowsInteropTest.csproj
  4. 4
      src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
  5. 6
      src/Avalonia.Base/Data/BindingOperations.cs
  6. 2
      src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs
  7. 13
      src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
  8. 17
      tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs
  9. 22
      tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs
  10. 29
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs

4
samples/ControlCatalog.Android/ControlCatalog.Android.csproj

@ -32,7 +32,7 @@
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<BundleAssemblies>False</BundleAssemblies>
<AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
<AndroidSupportedAbis>armeabi;armeabi-v7a;x86</AndroidSupportedAbis>
<AndroidSupportedAbis>armeabi-v7a;x86</AndroidSupportedAbis>
<Debugger>Xamarin</Debugger>
<AndroidEnableMultiDex>False</AndroidEnableMultiDex>
<AotAssemblies>False</AotAssemblies>
@ -51,7 +51,7 @@
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<BundleAssemblies>False</BundleAssemblies>
<AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
<AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>
<AndroidSupportedAbis>armeabi-v7a,x86</AndroidSupportedAbis>
<Debugger>Xamarin</Debugger>
<AotAssemblies>False</AotAssemblies>
<EnableLLVM>False</EnableLLVM>

2
samples/interop/WindowsInteropTest/Program.cs

@ -15,7 +15,7 @@ namespace WindowsInteropTest
{
System.Windows.Forms.Application.EnableVisualStyles();
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
AppBuilder.Configure<App>().UseWin32().UseDirect2D1().SetupWithoutStarting();
AppBuilder.Configure<App>().UseWin32().UseDirect2D1().UseDataGrid().SetupWithoutStarting();
System.Windows.Forms.Application.Run(new SelectorForm());
}
}

5
samples/interop/WindowsInteropTest/WindowsInteropTest.csproj

@ -104,6 +104,10 @@
<Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project>
<Name>Avalonia.Base</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Avalonia.Controls.DataGrid\Avalonia.Controls.DataGrid.csproj">
<Project>{3278f3a9-9509-4a3f-a15b-bdc8b5bff632}</Project>
<Name>Avalonia.Controls.DataGrid</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Avalonia.Controls\Avalonia.Controls.csproj">
<Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project>
<Name>Avalonia.Controls</Name>
@ -185,6 +189,5 @@
</ItemGroup>
<Import Project="..\..\..\build\Rx.props" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\..\..\build\SkiaSharp.props" />
<Import Project="..\..\..\build\LegacyProject.targets" />
</Project>

4
src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj

@ -32,7 +32,7 @@
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<BundleAssemblies>False</BundleAssemblies>
<AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
<AndroidSupportedAbis>armeabi;armeabi-v7a;x86</AndroidSupportedAbis>
<AndroidSupportedAbis>armeabi-v7a;x86</AndroidSupportedAbis>
<Debugger>Xamarin</Debugger>
<AndroidEnableMultiDex>False</AndroidEnableMultiDex>
<DevInstrumentationEnabled>True</DevInstrumentationEnabled>
@ -52,7 +52,7 @@
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<BundleAssemblies>False</BundleAssemblies>
<AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
<AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>
<AndroidSupportedAbis>armeabi-v7a,x86</AndroidSupportedAbis>
<Debugger>Xamarin</Debugger>
<AotAssemblies>False</AotAssemblies>
<EnableLLVM>False</EnableLLVM>

6
src/Avalonia.Base/Data/BindingOperations.cs

@ -65,7 +65,11 @@ namespace Avalonia.Data
return Disposable.Empty;
}
case BindingMode.OneWayToSource:
return target.GetObservable(property).Subscribe(binding.Subject);
return Observable.CombineLatest(
binding.Observable,
target.GetObservable(property),
(_, v) => v)
.Subscribe(x => binding.Subject.OnNext(x));
default:
throw new ArgumentException("Invalid binding mode.");
}

2
src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs

@ -59,8 +59,8 @@ namespace Avalonia.Data.Core
$"Could not find a matching property accessor for {PropertyName}.");
}
accessor.Subscribe(ValueChanged);
_accessor = accessor;
accessor.Subscribe(ValueChanged);
}
protected override void StopListeningCore()

13
src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs

@ -336,7 +336,18 @@ namespace Avalonia.Controls.Platform
if (e.MouseButton == MouseButton.Left && item?.HasSubMenu == true)
{
Open(item, false);
if (item.IsSubMenuOpen)
{
if (item.IsTopLevel)
{
CloseMenu(item);
}
}
else
{
Open(item, false);
}
e.Handled = true;
}
}

17
tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

@ -1,6 +1,7 @@
using System;
using Avalonia.Controls.Platform;
using Avalonia.Input;
using Avalonia.Interactivity;
using Moq;
using Xunit;
@ -110,6 +111,22 @@ namespace Avalonia.Controls.UnitTests.Platform
Assert.True(e.Handled);
}
[Fact]
public void Click_On_Open_TopLevel_Menu_Closes_Menu()
{
var target = new DefaultMenuInteractionHandler(false);
var menu = Mock.Of<IMenu>();
var item = Mock.Of<IMenuItem>(x =>
x.IsSubMenuOpen == true &&
x.IsTopLevel == true &&
x.HasSubMenu == true &&
x.Parent == menu);
var e = new PointerPressedEventArgs { MouseButton = MouseButton.Left, Source = item };
target.PointerPressed(item, e);
Mock.Get(menu).Verify(x => x.Close());
}
[Fact]
public void PointerEnter_Opens_Item_When_Old_Item_Is_Open()
{

22
tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs

@ -100,6 +100,28 @@ namespace Avalonia.Markup.UnitTests.Data
Assert.Equal("baz", target.Text);
}
[Fact]
public void OneWayToSource_Binding_Should_React_To_DataContext_Changed()
{
var target = new TextBlock { Text = "bar" };
var binding = new Binding
{
Path = "Foo",
Mode = BindingMode.OneWayToSource,
};
target.Bind(TextBox.TextProperty, binding);
var source = new Source { Foo = "foo" };
target.DataContext = source;
Assert.Equal("bar", source.Foo);
target.Text = "baz";
Assert.Equal("baz", source.Foo);
source.Foo = "quz";
Assert.Equal("baz", target.Text);
}
[Fact]
public void Default_BindingMode_Should_Be_Used()
{

29
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs

@ -329,6 +329,33 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
Assert.Equal("Hello world", textBlock.Text);
}
}
}
[Fact]
public void Binding_OneWayToSource_Works()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
ShowInTaskbar='{Binding ShowInTaskbar, Mode=OneWayToSource}'>
</Window>";
var loader = new AvaloniaXamlLoader();
var window = (Window)loader.Load(xaml);
var viewModel = new WindowViewModel();
window.DataContext = viewModel;
window.ApplyTemplate();
Assert.True(window.ShowInTaskbar);
Assert.True(viewModel.ShowInTaskbar);
}
}
private class WindowViewModel
{
public bool ShowInTaskbar { get; set; }
}
}
}

Loading…
Cancel
Save