Skip to content

Commit

Permalink
Merge branch 'release/11.2' into release/11.2.2
Browse files Browse the repository at this point in the history
  • Loading branch information
maxkatz6 committed Nov 26, 2024
2 parents 43753b8 + 35f6d73 commit 578bdc7
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 14 deletions.
9 changes: 3 additions & 6 deletions native/Avalonia.Native/src/OSX/StorageProvider.mm
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,7 @@ virtual void SelectFolderDialog (IAvnWindow* parentWindowHandle,
if(initialDirectory != nullptr)
{
auto directoryString = [NSString stringWithUTF8String:initialDirectory];
panel.directoryURL = [NSURL fileURLWithPath:directoryString
isDirectory:true];
panel.directoryURL = [NSURL URLWithString:directoryString];
}

auto handler = ^(NSModalResponse result) {
Expand Down Expand Up @@ -239,8 +238,7 @@ virtual void OpenFileDialog (IAvnWindow* parentWindowHandle,
if(initialDirectory != nullptr)
{
auto directoryString = [NSString stringWithUTF8String:initialDirectory];
panel.directoryURL = [NSURL fileURLWithPath:directoryString
isDirectory:true];
panel.directoryURL = [NSURL URLWithString:directoryString];
}

if(initialFile != nullptr)
Expand Down Expand Up @@ -309,8 +307,7 @@ virtual void SaveFileDialog (IAvnWindow* parentWindowHandle,
if(initialDirectory != nullptr)
{
auto directoryString = [NSString stringWithUTF8String:initialDirectory];
panel.directoryURL = [NSURL fileURLWithPath:directoryString
isDirectory:true];
panel.directoryURL = [NSURL URLWithString:directoryString];
}

if(initialFile != nullptr)
Expand Down
9 changes: 3 additions & 6 deletions src/Avalonia.Base/Layout/LayoutManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,7 @@ public void Dispose()
void ILayoutManager.RegisterEffectiveViewportListener(Layoutable control)
{
_effectiveViewportChangedListeners ??= new List<EffectiveViewportChangedListener>();
_effectiveViewportChangedListeners.Add(new EffectiveViewportChangedListener(
control,
CalculateEffectiveViewport(control)));
_effectiveViewportChangedListeners.Add(new EffectiveViewportChangedListener(control));
}

void ILayoutManager.UnregisterEffectiveViewportListener(Layoutable control)
Expand Down Expand Up @@ -438,14 +436,13 @@ private void CalculateEffectiveViewport(Visual target, Visual control, ref Rect

private class EffectiveViewportChangedListener
{
public EffectiveViewportChangedListener(Layoutable listener, Rect viewport)
public EffectiveViewportChangedListener(Layoutable listener)
{
Listener = listener;
Viewport = viewport;
}

public Layoutable Listener { get; }
public Rect Viewport { get; set; }
public Rect? Viewport { get; set; }
}

private enum ArrangeResult
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace Avalonia.Base.UnitTests.Layout
public class LayoutableTests_EffectiveViewportChanged
{
[Fact]
public async Task EffectiveViewportChanged_Not_Raised_When_Control_Added_To_Tree()
public async Task EffectiveViewportChanged_Not_Raised_When_Control_Added_To_Tree_And_Layout_Pass_Has_Not_Run()
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
await RunOnUIThread.Execute(async () =>
Expand All @@ -34,6 +34,60 @@ await RunOnUIThread.Execute(async () =>
Assert.Equal(0, raised);
});
}

[Fact]
public async Task EffectiveViewportChanged_Raised_When_Control_Added_To_Tree_And_Layout_Pass_Has_Run()
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
await RunOnUIThread.Execute(async () =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
{
var root = CreateRoot();
var target = new Canvas();
var raised = 0;

target.EffectiveViewportChanged += (s, e) =>
{
++raised;
};

root.Child = target;

Assert.Equal(0, raised);

await ExecuteInitialLayoutPass(root);

Assert.Equal(1, raised);
});
}

[Fact]
public async Task EffectiveViewportChanged_Raised_When_Root_LayedOut_And_Then_Control_Added_To_Tree_And_Layout_Pass_Runs()
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
await RunOnUIThread.Execute(async () =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
{
var root = CreateRoot();
var target = new Canvas();
var raised = 0;

target.EffectiveViewportChanged += (s, e) =>
{
++raised;
};

await ExecuteInitialLayoutPass(root);

root.Child = target;

Assert.Equal(0, raised);

await ExecuteInitialLayoutPass(root);

Assert.Equal(1, raised);
});
}

[Fact]
public async Task EffectiveViewportChanged_Raised_Before_LayoutUpdated()
Expand Down Expand Up @@ -268,8 +322,11 @@ await RunOnUIThread.Execute(async () =>

root.Child = parent;

await ExecuteInitialLayoutPass(root);
target.EffectiveViewportChanged += (s, e) => ++raised;
await ExecuteInitialLayoutPass(root);

raised = 0; // The initial layout pass is expected to raise.

target.RenderTransform = new TranslateTransform { X = 8 };
target.InvalidateMeasure();
await ExecuteLayoutPass(root);
Expand Down

0 comments on commit 578bdc7

Please sign in to comment.