Skip to content

Commit

Permalink
Merge pull request unoplatform#18369 from unoplatform/dev/mazi/closin…
Browse files Browse the repository at this point in the history
…g-singlewindow

fix: Do not destroy the singleton Window for single-window targets
  • Loading branch information
jeromelaban authored Oct 4, 2024
2 parents 4a4d515 + ff0b183 commit 9817a07
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 8 deletions.
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();
}
}
9 changes: 8 additions & 1 deletion src/SamplesApp/UITests.Shared/UITests.Shared.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,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 @@ -5496,6 +5500,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 Expand Up @@ -9834,4 +9841,4 @@
</Compile>
</ItemGroup>
<Import Project="ItemExclusions.props" />
</Project>
</Project>
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

0 comments on commit 9817a07

Please sign in to comment.