diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp/Services/ModalService.cs b/src/GuiApp/Avalonia/FileTime.GuiApp/Services/ModalService.cs index 7d27802..f928f4a 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp/Services/ModalService.cs +++ b/src/GuiApp/Avalonia/FileTime.GuiApp/Services/ModalService.cs @@ -11,9 +11,9 @@ public class ModalService : IModalService public ModalService() { - OpenModals = _openModals.Connect(); + OpenModals = _openModals.Connect().StartWithEmpty(); } - + public void OpenModal(IModalViewModelBase modalToOpen) => _openModals.Add(modalToOpen); public void CloseModal(IModalViewModelBase modalToClose) => _openModals.Remove(modalToClose); diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs index fc2c7c0..847cadd 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs +++ b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml.cs @@ -1,7 +1,9 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Input; -using FileTime.App.Core.UserCommand; +using DynamicData; +using FileTime.App.Core.Services; +using FileTime.App.Core.ViewModels; using FileTime.Core.Models; using FileTime.GuiApp.Models; using FileTime.GuiApp.ViewModels; @@ -13,6 +15,8 @@ namespace FileTime.GuiApp.Views; public partial class MainWindow : Window { private readonly ILogger? _logger; + private readonly IModalService _modalService; + private IReadOnlyCollection? _openModals; public MainWindowViewModel? ViewModel { @@ -30,6 +34,8 @@ public partial class MainWindow : Window { _logger = DI.ServiceProvider.GetService>(); _logger?.LogInformation($"Starting {nameof(MainWindow)} initialization..."); + _modalService = DI.ServiceProvider.GetRequiredService(); + _modalService.OpenModals.ToCollection().Subscribe(m => _openModals = m); InitializeComponent(); } @@ -45,6 +51,7 @@ public partial class MainWindow : Window private void OnKeyDown(object sender, KeyEventArgs e) { + if ((_openModals?.Count ?? 0) > 0) return; ViewModel?.ProcessKeyDown(e.Key, e.KeyModifiers, h => e.Handled = h); }