Windows modal key bubbling fix

This commit is contained in:
2022-05-24 09:50:34 +02:00
parent 60ab7f94ea
commit b2db3675e8
2 changed files with 10 additions and 3 deletions

View File

@@ -11,7 +11,7 @@ public class ModalService : IModalService
public ModalService() public ModalService()
{ {
OpenModals = _openModals.Connect(); OpenModals = _openModals.Connect().StartWithEmpty();
} }
public void OpenModal(IModalViewModelBase modalToOpen) => _openModals.Add(modalToOpen); public void OpenModal(IModalViewModelBase modalToOpen) => _openModals.Add(modalToOpen);

View File

@@ -1,7 +1,9 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input; 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.Core.Models;
using FileTime.GuiApp.Models; using FileTime.GuiApp.Models;
using FileTime.GuiApp.ViewModels; using FileTime.GuiApp.ViewModels;
@@ -13,6 +15,8 @@ namespace FileTime.GuiApp.Views;
public partial class MainWindow : Window public partial class MainWindow : Window
{ {
private readonly ILogger<MainWindow>? _logger; private readonly ILogger<MainWindow>? _logger;
private readonly IModalService _modalService;
private IReadOnlyCollection<IModalViewModelBase>? _openModals;
public MainWindowViewModel? ViewModel public MainWindowViewModel? ViewModel
{ {
@@ -30,6 +34,8 @@ public partial class MainWindow : Window
{ {
_logger = DI.ServiceProvider.GetService<ILogger<MainWindow>>(); _logger = DI.ServiceProvider.GetService<ILogger<MainWindow>>();
_logger?.LogInformation($"Starting {nameof(MainWindow)} initialization..."); _logger?.LogInformation($"Starting {nameof(MainWindow)} initialization...");
_modalService = DI.ServiceProvider.GetRequiredService<IModalService>();
_modalService.OpenModals.ToCollection().Subscribe(m => _openModals = m);
InitializeComponent(); InitializeComponent();
} }
@@ -45,6 +51,7 @@ public partial class MainWindow : Window
private void OnKeyDown(object sender, KeyEventArgs e) private void OnKeyDown(object sender, KeyEventArgs e)
{ {
if ((_openModals?.Count ?? 0) > 0) return;
ViewModel?.ProcessKeyDown(e.Key, e.KeyModifiers, h => e.Handled = h); ViewModel?.ProcessKeyDown(e.Key, e.KeyModifiers, h => e.Handled = h);
} }