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 bool _isSaved; public MainWindow(ISessionService sessionService) { _sessionService = sessionService; 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; await _sessionService.SaveAsync(); _isSaved = true; Close(); } }