diff --git a/CHANGELOG.md b/CHANGELOG.md index 5666f48..88e5ab7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.6.2 (Unreleased) - Fixed rolled log files created with trailing sequence sometimes created on app startup ([#136](https://github.com/tetsuo13/TeamsStatusPub/issues/136)) +- Prevent multiple About windows ([#129](https://github.com/tetsuo13/TeamsStatusPub/issues/129)) ## 1.6.1 (2024-08-28) diff --git a/src/TeamsStatusPub/App.axaml.cs b/src/TeamsStatusPub/App.axaml.cs index 4c42733..e1d4fd1 100644 --- a/src/TeamsStatusPub/App.axaml.cs +++ b/src/TeamsStatusPub/App.axaml.cs @@ -6,10 +6,11 @@ using Avalonia.Markup.Xaml; using Microsoft.Extensions.DependencyInjection; using ReactiveUI; -using TeamsStatusPub.ViewModels; using TeamsStatusPub.Core.Configuration; using TeamsStatusPub.Core.Services; using TeamsStatusPub.Core.Services.AvailabilityHandlers; +using TeamsStatusPub.ViewModels; +using TeamsStatusPub.Views; namespace TeamsStatusPub; @@ -31,6 +32,7 @@ public override void OnFrameworkInitializationCompleted() collection.ConfigureAppServices(); collection.AddTransient(); collection.AddTransient(); + collection.AddSingleton(); ServiceProvider = collection.BuildServiceProvider(); diff --git a/src/TeamsStatusPub/TeamsStatusPub.csproj b/src/TeamsStatusPub/TeamsStatusPub.csproj index 0da77e9..ed3da19 100644 --- a/src/TeamsStatusPub/TeamsStatusPub.csproj +++ b/src/TeamsStatusPub/TeamsStatusPub.csproj @@ -2,7 +2,7 @@ WinExe net8.0 - win-x64 + win-x64;linux-x64 AnyCPU enable true diff --git a/src/TeamsStatusPub/ViewModels/AppViewModel.cs b/src/TeamsStatusPub/ViewModels/AppViewModel.cs index 86a94df..1c20728 100644 --- a/src/TeamsStatusPub/ViewModels/AppViewModel.cs +++ b/src/TeamsStatusPub/ViewModels/AppViewModel.cs @@ -1,6 +1,7 @@ using System.Reactive; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; +using Microsoft.Extensions.DependencyInjection; using ReactiveUI; using TeamsStatusPub.Views; @@ -15,8 +16,18 @@ public AppViewModel() { AboutCommand = ReactiveCommand.Create(() => { - var view = new AboutWindow(); - view.Show(); + // Treat the about window like a dialog: only one instance should + // ever be shown. + var view = App.ServiceProvider.GetRequiredService(); + + if (!view.IsVisible) + { + view.Show(); + } + else + { + view.Activate(); + } }); ExitCommand = ReactiveCommand.Create(() =>