Skip to content

Commit

Permalink
Merge pull request #1544 from Nexus-Mods/window-foreground
Browse files Browse the repository at this point in the history
Feat: Bring Window to Foreground on Login
  • Loading branch information
Al12rs authored Jun 5, 2024
2 parents 22a7555 + 22fa21c commit 605152d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
7 changes: 7 additions & 0 deletions src/NexusMods.App.UI/Windows/IWorkspaceWindow.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Reactive;
using NexusMods.App.UI.WorkspaceSystem;
using ReactiveUI;

namespace NexusMods.App.UI.Windows;

Expand All @@ -21,4 +23,9 @@ public interface IWorkspaceWindow
/// Gets the workspace controller of the window.
/// </summary>
public IWorkspaceController WorkspaceController { get; }

/// <summary>
/// This command is used to bring the window to front.
/// </summary>
ReactiveCommand<Unit, Unit> BringWindowToFront { get; }
}
9 changes: 9 additions & 0 deletions src/NexusMods.App.UI/Windows/MainWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,15 @@ public MainWindow()
this.WhenAnyValue(view => view.IsActive)
.BindTo(this, view => view.ViewModel!.IsActive)
.DisposeWith(disposables);

this.WhenAnyObservable(view => view.ViewModel!.BringWindowToFront)
.OnUI()
.Subscribe(_ => {
if (WindowState == WindowState.Minimized)
WindowState = WindowState.Normal;

Activate();
}).DisposeWith(disposables);
});
}

Expand Down
12 changes: 8 additions & 4 deletions src/NexusMods.App.UI/Windows/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Reactive;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using Microsoft.Extensions.DependencyInjection;
Expand All @@ -12,8 +13,6 @@
using NexusMods.App.UI.Overlays.MetricsOptIn;
using NexusMods.App.UI.Overlays.Updater;
using NexusMods.App.UI.WorkspaceSystem;
using NexusMods.MnemonicDB.Abstractions;
using NexusMods.Networking.Downloaders.Interfaces;
using NexusMods.Paths;
using ReactiveUI;
using ReactiveUI.Fody.Helpers;
Expand All @@ -23,14 +22,14 @@ namespace NexusMods.App.UI.Windows;
public class MainWindowViewModel : AViewModel<IMainWindowViewModel>, IMainWindowViewModel
{
private readonly IWindowManager _windowManager;

public ReactiveCommand<Unit, Unit> BringWindowToFront { get; } = ReactiveCommand.Create(() => { });

public MainWindowViewModel(
IServiceProvider serviceProvider,
IOSInformation osInformation,
IWindowManager windowManager,
IDownloadService downloadService,
IOverlayController overlayController,
IConnection conn,
ILoginManager loginManager)
{
// NOTE(erri120): can't use DI for VMs that require an active Window because
Expand Down Expand Up @@ -70,6 +69,11 @@ public MainWindowViewModel(
updaterViewModel.MaybeShow();
}

loginManager.IsLoggedInObservable
.Where(isSignedIn => isSignedIn)
.InvokeCommand(BringWindowToFront)
.DisposeWith(d);

var loginMessageVM = serviceProvider.GetRequiredService<ILoginMessageBoxViewModel>();
loginMessageVM.Controller = overlayController;
loginMessageVM.MaybeShow();
Expand Down

0 comments on commit 605152d

Please sign in to comment.