danwalmsley
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with
94 additions and
10 deletions
-
samples/ControlCatalog.Android/ControlCatalog.Android.csproj
-
samples/interop/WindowsInteropTest/Program.cs
-
samples/interop/WindowsInteropTest/WindowsInteropTest.csproj
-
src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
-
src/Avalonia.Base/Data/BindingOperations.cs
-
src/Avalonia.Base/Data/Core/PropertyAccessorNode.cs
-
src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
-
tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs
-
tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs
-
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs
|
|
|
@ -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> |
|
|
|
|
|
|
|
@ -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()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -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> |
|
|
|
@ -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> |
|
|
|
|
|
|
|
@ -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."); |
|
|
|
} |
|
|
|
|
|
|
|
@ -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() |
|
|
|
|
|
|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -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() |
|
|
|
{ |
|
|
|
|
|
|
|
@ -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() |
|
|
|
{ |
|
|
|
|
|
|
|
@ -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; } |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|