diff --git a/src/Artemis.UI.Shared/Controls/HotkeyBox.axaml.cs b/src/Artemis.UI.Shared/Controls/HotkeyBox.axaml.cs
index 0c50e69e4..9bfbe96b4 100644
--- a/src/Artemis.UI.Shared/Controls/HotkeyBox.axaml.cs
+++ b/src/Artemis.UI.Shared/Controls/HotkeyBox.axaml.cs
@@ -8,6 +8,8 @@ using Avalonia.Data;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
+using Avalonia.Threading;
+using DryIoc;
using FluentAvalonia.Core;
using Humanizer;
using Material.Icons;
@@ -19,6 +21,7 @@ namespace Artemis.UI.Shared;
///
public class HotkeyBox : UserControl
{
+ private readonly IInputService _inputService;
private readonly TextBox _displayTextBox;
///
@@ -26,39 +29,50 @@ public class HotkeyBox : UserControl
///
public HotkeyBox()
{
- InitializeComponent();
+ _inputService = UI.Locator.Resolve();
+ InitializeComponent();
_displayTextBox = this.Find("DisplayTextBox");
- _displayTextBox.KeyDown += DisplayTextBoxOnKeyDown;
- _displayTextBox.KeyUp += DisplayTextBoxOnKeyUp;
UpdateDisplayTextBox();
}
+ protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
+ {
+ _inputService.KeyboardKeyDown += InputServiceOnKeyboardKeyDown;
+ _inputService.KeyboardKeyUp += InputServiceOnKeyboardKeyUp;
+ }
+
+ protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
+ {
+ _inputService.KeyboardKeyDown -= InputServiceOnKeyboardKeyDown;
+ _inputService.KeyboardKeyUp -= InputServiceOnKeyboardKeyUp;
+ }
+
private static void HotkeyChanging(IAvaloniaObject sender, bool before)
{
((HotkeyBox) sender).UpdateDisplayTextBox();
}
- private void DisplayTextBoxOnKeyDown(object? sender, KeyEventArgs e)
+ private void InputServiceOnKeyboardKeyDown(object? sender, ArtemisKeyboardKeyEventArgs e)
{
- if (e.Key >= Key.LeftShift && e.Key <= Key.RightAlt)
+ if (e.Key >= KeyboardKey.LeftShift && e.Key <= KeyboardKey.RightAlt)
return;
Hotkey ??= new Hotkey();
- Hotkey.Key = (KeyboardKey?) e.Key;
- Hotkey.Modifiers = (KeyboardModifierKey?) e.KeyModifiers;
- UpdateDisplayTextBox();
- HotkeyChanged?.Invoke(this, EventArgs.Empty);
+ Hotkey.Key = e.Key;
+ Hotkey.Modifiers = e.Modifiers;
- e.Handled = true;
+ Dispatcher.UIThread.Post(() =>
+ {
+ UpdateDisplayTextBox();
+ HotkeyChanged?.Invoke(this, EventArgs.Empty);
+ });
}
- private void DisplayTextBoxOnKeyUp(object? sender, KeyEventArgs e)
+ private void InputServiceOnKeyboardKeyUp(object? sender, ArtemisKeyboardKeyEventArgs e)
{
- if (e.KeyModifiers == KeyModifiers.None)
- FocusManager.Instance?.Focus(null);
-
- e.Handled = true;
+ if (e.Modifiers == KeyboardModifierKey.None)
+ Dispatcher.UIThread.Post(() => FocusManager.Instance?.Focus(null));
}
private void UpdateDisplayTextBox()
diff --git a/src/Artemis.UI.Shared/DryIoc/ContainerExtensions.cs b/src/Artemis.UI.Shared/DryIoc/ContainerExtensions.cs
index 4c4711b02..1c86ecf84 100644
--- a/src/Artemis.UI.Shared/DryIoc/ContainerExtensions.cs
+++ b/src/Artemis.UI.Shared/DryIoc/ContainerExtensions.cs
@@ -17,5 +17,7 @@ public static class ContainerExtensions
{
Assembly artemisShared = typeof(IArtemisSharedUIService).GetAssembly();
container.RegisterMany(new[] { artemisShared }, type => type.IsAssignableTo(), Reuse.Singleton);
+
+ UI.Locator = container;
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI.Shared/Utilities.cs b/src/Artemis.UI.Shared/Utilities.cs
new file mode 100644
index 000000000..35abef7db
--- /dev/null
+++ b/src/Artemis.UI.Shared/Utilities.cs
@@ -0,0 +1,8 @@
+using DryIoc;
+
+namespace Artemis.UI.Shared;
+
+internal static class UI
+{
+ public static IContainer Locator { get; set; } = null!;
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/Services/Updating/UpdateService.cs b/src/Artemis.UI/Services/Updating/UpdateService.cs
index fee0b93b0..15e66985e 100644
--- a/src/Artemis.UI/Services/Updating/UpdateService.cs
+++ b/src/Artemis.UI/Services/Updating/UpdateService.cs
@@ -5,7 +5,6 @@ using System.Threading;
using System.Threading.Tasks;
using Artemis.Core;
using Artemis.Core.Services;
-using Artemis.Storage.Entities.General;
using Artemis.Storage.Repositories;
using Artemis.UI.Exceptions;
using Artemis.UI.Shared.Services.MainWindow;
@@ -110,6 +109,9 @@ public class UpdateService : IUpdateService
private async void HandleAutoUpdateEvent(object? sender, EventArgs e)
{
+ if (Constants.CurrentVersion == "local")
+ return;
+
// The event can trigger from multiple sources with a timer acting as a fallback, only actual perform an action once per max 59 minutes
if (DateTime.UtcNow - _lastAutoUpdateCheck < TimeSpan.FromMinutes(59))
return;
@@ -204,6 +206,9 @@ public class UpdateService : IUpdateService
///
public bool Initialize()
{
+ if (Constants.CurrentVersion == "local")
+ return false;
+
string? channelArgument = Constants.StartupArguments.FirstOrDefault(a => a.StartsWith("--channel="));
if (channelArgument != null)
Channel = channelArgument.Split("=")[1];