Windows modal key bubbling fix
This commit is contained in:
@@ -11,9 +11,9 @@ 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);
|
||||||
|
|
||||||
public void CloseModal(IModalViewModelBase modalToClose) => _openModals.Remove(modalToClose);
|
public void CloseModal(IModalViewModelBase modalToClose) => _openModals.Remove(modalToClose);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user