Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Do not destroy the singleton Window for single-window targets (backport #18369) #18389

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<Page
x:Class="UITests.Microsoft_UI_Windowing.SingleWindowClose"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:UITests.Microsoft_UI_Windowing"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="using:Microsoft.UI.Xaml.Controls"
x:DefaultBindMode="TwoWay"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">

<StackPanel Padding="8" Spacing="8">
<TextBlock Text="This sample is only relevant to Android and iOS." x:Name="LogTextBlock" />
</StackPanel>
</Page>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Threading.Tasks;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using SamplesApp;
using Uno.Disposables;
using Uno.UI.Common;
using Uno.UI.Samples.Controls;
using Uno.UI.Samples.UITests.Helpers;
using Windows.Graphics;

#if !WINDOWS_UWP && !WINAPPSDK
using Uno.UI.Xaml;
using Uno.UI.Xaml.Controls;
using WinUICoreServices = Uno.UI.Xaml.Core.CoreServices;
#endif

namespace UITests.Microsoft_UI_Windowing;

[Sample(
"Windowing",
IsManualTest = true,
Description =
"- On Android and iOS, try to back out of this app to the main screen and reopen the app via its icon. " +
"You should see the Samples app UI load normally - not a blank screen and the app should also not crash. \r\n" +
"- On Android and iOS, try to back out of this app and then activate it by opening an URI like uno-samples-test:something. " +
"You should see the Samples app UI load normally - not a blank screen and the app should also not crash. ")]
public sealed partial class SingleWindowClose : Page
{
public SingleWindowClose()
{
this.InitializeComponent();
}
}
7 changes: 7 additions & 0 deletions src/SamplesApp/UITests.Shared/UITests.Shared.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="$(MSBuildThisFileDirectory)Microsoft_UI_Windowing\SingleWindowClose.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="$(MSBuildThisFileDirectory)Microsoft_UI_Windowing\OverlappedPresenterTests.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
Expand Down Expand Up @@ -5473,6 +5477,9 @@
<Compile Include="$(MSBuildThisFileDirectory)Microsoft_UI_Windowing\AppWindowClosing.xaml.cs">
<DependentUpon>AppWindowClosing.xaml</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)Microsoft_UI_Windowing\SingleWindowClose.xaml.cs">
<DependentUpon>SingleWindowClose.xaml</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)Microsoft_UI_Windowing\OverlappedPresenterTests.xaml.cs">
<DependentUpon>OverlappedPresenterTests.xaml</DependentUpon>
</Compile>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public virtual void Initialize()

public virtual void Activate()
{
if (_isClosed)
if (NativeWindowFactory.SupportsMultipleWindows && _isClosed)
{
throw new InvalidOperationException("Cannot reactivate a closed window.");
}
Expand Down Expand Up @@ -318,10 +318,18 @@ public bool Close()

// Window.PrepareToClose();

// set these to null before marking window as closed as they fail if called after m_bIsClosed is set
// because they check if window is closed already
Window.SetTitleBar(null);
Window.Content = null;
if (NativeWindowFactory.SupportsMultipleWindows)
{
// set these to null before marking window as closed as they fail if called after m_bIsClosed is set
// because they check if window is closed already
Window.SetTitleBar(null);
Window.Content = null;
}
else
{
// Just reset the window to not shown state so it can be reactivated
_wasShown = false;
}

// _windowChrome.SetDesktopWindow(null);

Expand All @@ -336,8 +344,11 @@ public bool Close()
RaiseWindowVisibilityChangedEvent(false);
}

// Close native window, cleanup, and unregister from hwnd mapping from DXamlCore
Shutdown();
if (NativeWindowFactory.SupportsMultipleWindows)
{
// Close native window, cleanup, and unregister from hwnd mapping from DXamlCore
Shutdown();
}

return true;
}
Expand Down
Loading