diff --git a/TheXamlGuy.TaskbarGroup/LifeCycles/ApplicationHost.cs b/TheXamlGuy.TaskbarGroup/LifeCycles/ApplicationHost.cs index debc22a..d5a0a5d 100644 --- a/TheXamlGuy.TaskbarGroup/LifeCycles/ApplicationHost.cs +++ b/TheXamlGuy.TaskbarGroup/LifeCycles/ApplicationHost.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using System.Windows; using TheXamlGuy.TaskbarGroup.Core; namespace TheXamlGuy.TaskbarGroup @@ -11,20 +10,13 @@ namespace TheXamlGuy.TaskbarGroup { private readonly TaskbarButtonFlyoutWindow flyoutWindow; private readonly IEnumerable initializables; - private readonly IMediator mediator; private bool isInitialized; public ApplicationHost(IEnumerable initializables, - IMessenger messenger, - IMediator mediator, TaskbarButtonFlyoutWindow flyoutWindow) { this.initializables = initializables; - this.mediator = mediator; this.flyoutWindow = flyoutWindow; - - messenger.Subscribe(OnTaskbarButtonInvoked); - messenger.Subscribe(OnTaskbarButtonDragEnter); } public async Task StartAsync(CancellationToken cancellationToken) @@ -40,6 +32,7 @@ namespace TheXamlGuy.TaskbarGroup { await Task.CompletedTask; } + private async Task InitializeAsync() { if (!isInitialized) @@ -53,21 +46,6 @@ namespace TheXamlGuy.TaskbarGroup } } - private void OnTaskbarButtonDragEnter(TaskbarButtonDragEnter args) - { - Application.Current.Dispatcher.Invoke(() => Open(args.Button)); - } - - private void OnTaskbarButtonInvoked(TaskbarButtonInvoked args) - { - Application.Current.Dispatcher.Invoke(() => Open(args.Button)); - } - - private void Open(TaskbarButton button) - { - mediator.Handle(new TaskbarButtonFlyoutActivation(button)); - } - private async Task StartupAsync() { if (!isInitialized) diff --git a/TheXamlGuy.TaskbarGroup/Program.cs b/TheXamlGuy.TaskbarGroup/Program.cs new file mode 100644 index 0000000..a3980dd --- /dev/null +++ b/TheXamlGuy.TaskbarGroup/Program.cs @@ -0,0 +1,28 @@ +using System; +using System.Threading; + +namespace TheXamlGuy.TaskbarGroup +{ + public class Program + { + [STAThread()] + public static void Main() + { + using (new Mutex(true, "TheXamlGuy.TaskbarGroup", out var createdNew)) + { + if (createdNew) + { + using (new Flyout.App()) + { + var app = new App(); + app.Run(); + } + } + else + { + Environment.Exit(0); + } + } + } + } +} diff --git a/TheXamlGuy.TaskbarGroup/AssemblyInfo.cs b/TheXamlGuy.TaskbarGroup/Properties/AssemblyInfo.cs similarity index 100% rename from TheXamlGuy.TaskbarGroup/AssemblyInfo.cs rename to TheXamlGuy.TaskbarGroup/Properties/AssemblyInfo.cs diff --git a/TheXamlGuy.TaskbarGroup/Properties/Program.cs b/TheXamlGuy.TaskbarGroup/Properties/Program.cs deleted file mode 100644 index 2a37422..0000000 --- a/TheXamlGuy.TaskbarGroup/Properties/Program.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace TheXamlGuy.TaskbarGroup -{ - public class Program - { - [STAThread()] - public static void Main() - { - using (new Flyout.App()) - { - var app = new App(); - app.Run(); - } - } - } -} diff --git a/TheXamlGuy.TaskbarGroup/TheXamlGuy.TaskbarGroup.csproj b/TheXamlGuy.TaskbarGroup/TheXamlGuy.TaskbarGroup.csproj index 96a187b..0f51b4d 100644 --- a/TheXamlGuy.TaskbarGroup/TheXamlGuy.TaskbarGroup.csproj +++ b/TheXamlGuy.TaskbarGroup/TheXamlGuy.TaskbarGroup.csproj @@ -5,7 +5,9 @@ true TheXamlGuy.TaskbarGroup.Program uap10.0.19041 + 10.0.19041 x64;x86 + win10-x64;win10-x86 10.0 enable diff --git a/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs b/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs index 5eef51e..9fb43e7 100644 --- a/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs +++ b/TheXamlGuy.TaskbarGroup/Windows/TaskbarButtonFlyoutWindow.cs @@ -1,16 +1,19 @@ using System; -using System.Windows; -using System.Windows.Media; using System.Windows.Threading; +using TheXamlGuy.TaskbarGroup.Core; using TheXamlGuy.TaskbarGroup.Flyout.Controls; namespace TheXamlGuy.TaskbarGroup { public class TaskbarButtonFlyoutWindow : TransparentXamlWindow { - public TaskbarButtonFlyoutWindow() + private readonly IMediator mediator; + + public TaskbarButtonFlyoutWindow(IMessenger messenger, + IMediator mediator) { - Deactivated += OnDeactivated; + this.mediator = mediator; + Topmost = true; Width = 258; Height = 258; @@ -19,15 +22,36 @@ namespace TheXamlGuy.TaskbarGroup { Hide(); }), DispatcherPriority.ContextIdle, null); + + messenger.Subscribe(OnTaskbarButtonInvoked); + messenger.Subscribe(OnTaskbarButtonDragEnter); } - private void OnDeactivated(object? sender, EventArgs args) + protected override void OnDeactivated(EventArgs args) { if (XamlContent is TaskbarButtonFlyout flyout) { flyout.Close(); Hide(); } + + base.OnDeactivated(args); } + + private void Open(TaskbarButton button) + { + mediator.Handle(new TaskbarButtonFlyoutActivation(button)); + } + + private void OnTaskbarButtonDragEnter(TaskbarButtonDragEnter args) + { + Dispatcher.Invoke(() => Open(args.Button)); + } + + private void OnTaskbarButtonInvoked(TaskbarButtonInvoked args) + { + Dispatcher.Invoke(() => Open(args.Button)); + } + } }