Files
harmonia/Harmonia.WinUI/MainWindow.xaml.cs

68 lines
1.8 KiB
C#

using Harmonia.WinUI.Session;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
namespace Harmonia.WinUI;
public sealed partial class MainWindow : Window
{
private const string ApplicationTitle = "Harmonia";
private readonly ISessionService _sessionService;
private readonly ISessionTracker _sessionTracker;
private bool _isSaved;
public MainWindow(ISessionService sessionService, ISessionTracker sessionTracker)
{
_sessionService = sessionService;
_sessionTracker = sessionTracker;
InitializeComponent();
InitializeTitleBar();
InitializeWindowState();
}
private void InitializeTitleBar()
{
Title = ApplicationTitle;
ExtendsContentIntoTitleBar = true;
SetTitleBar(AppTitleBar);
}
private void InitializeWindowState()
{
if (AppWindow.Presenter is OverlappedPresenter presenter && _sessionService.Session.Window.IsMaximized)
{
presenter.Maximize();
}
AppWindow.Changed += OnAppWindowChanged;
}
private void OnAppWindowChanged(AppWindow sender, AppWindowChangedEventArgs args)
{
if (sender.Presenter is not OverlappedPresenter presenter)
return;
// Ignore the minimized state so a minimize-then-close doesn't lose the maximized flag.
if (presenter.State is OverlappedPresenterState.Minimized)
return;
_sessionService.Session.Window.IsMaximized = presenter.State == OverlappedPresenterState.Maximized;
}
private async void OnMainWindowClosed(object sender, WindowEventArgs args)
{
if (_isSaved)
return;
args.Handled = true;
_sessionTracker.Capture();
await _sessionService.SaveAsync();
_isSaved = true;
Close();
}
}