1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

UI - Fixed window not opening from tray

This commit is contained in:
Robert 2023-04-11 20:58:01 +02:00
parent 87334b3acc
commit 45f02c1573

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Reactive;
using System.Threading.Tasks; using System.Threading.Tasks;
using Artemis.Core; using Artemis.Core;
using Artemis.Core.Services; using Artemis.Core.Services;
@ -61,6 +62,10 @@ public class RootViewModel : ActivatableViewModelBase, IScreen, IMainWindowProvi
mainWindowService.HostScreen = this; mainWindowService.HostScreen = this;
DisplayAccordingToSettings(); DisplayAccordingToSettings();
OpenScreen = ReactiveCommand.Create<string>(ExecuteOpenScreen);
OpenDebugger = ReactiveCommand.CreateFromTask(ExecuteOpenDebugger);
Exit = ReactiveCommand.CreateFromTask(ExecuteExit);
Router.CurrentViewModel.Subscribe(UpdateTitleBarViewModel); Router.CurrentViewModel.Subscribe(UpdateTitleBarViewModel);
Task.Run(() => Task.Run(() =>
{ {
@ -74,6 +79,10 @@ public class RootViewModel : ActivatableViewModelBase, IScreen, IMainWindowProvi
}); });
} }
public ReactiveCommand<string, Unit> OpenScreen { get; }
public ReactiveCommand<Unit, Unit> OpenDebugger { get; }
public ReactiveCommand<Unit, Unit> Exit { get; }
public SidebarViewModel? SidebarViewModel public SidebarViewModel? SidebarViewModel
{ {
get => _sidebarViewModel; get => _sidebarViewModel;
@ -128,7 +137,7 @@ public class RootViewModel : ActivatableViewModelBase, IScreen, IMainWindowProvi
#region Tray commands #region Tray commands
public void OpenScreen(string displayName) private void ExecuteOpenScreen(string displayName)
{ {
// The window will open on the UI thread at some point, respond to that to select the chosen screen // The window will open on the UI thread at some point, respond to that to select the chosen screen
MainWindowOpened += OnEventHandler; MainWindowOpened += OnEventHandler;
@ -136,18 +145,19 @@ public class RootViewModel : ActivatableViewModelBase, IScreen, IMainWindowProvi
void OnEventHandler(object? sender, EventArgs args) void OnEventHandler(object? sender, EventArgs args)
{ {
// Avoid threading issues by running this on the UI thread
if (SidebarViewModel != null) if (SidebarViewModel != null)
SidebarViewModel.SelectedSidebarScreen = SidebarViewModel.SidebarScreens.FirstOrDefault(s => s.DisplayName == displayName); Dispatcher.UIThread.InvokeAsync(() => SidebarViewModel.SelectedSidebarScreen = SidebarViewModel.SidebarScreens.FirstOrDefault(s => s.DisplayName == displayName));
MainWindowOpened -= OnEventHandler; MainWindowOpened -= OnEventHandler;
} }
} }
public async Task OpenDebugger() private async Task ExecuteOpenDebugger()
{ {
await Dispatcher.UIThread.InvokeAsync(() => _debugService.ShowDebugger()); await Dispatcher.UIThread.InvokeAsync(() => _debugService.ShowDebugger());
} }
public async Task Exit() private async Task ExecuteExit()
{ {
// Don't freeze the UI right after clicking // Don't freeze the UI right after clicking
await Task.Delay(200); await Task.Delay(200);