Merge branch 'master' of https://github.com/rmcrackan/Libation
This commit is contained in:
commit
66fb392b7f
54
Source/LibationAvalonia/AccessKeyHandlerEx.cs
Normal file
54
Source/LibationAvalonia/AccessKeyHandlerEx.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Input;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace LibationAvalonia
|
||||||
|
{
|
||||||
|
internal class AccessKeyHandlerEx : AccessKeyHandler
|
||||||
|
{
|
||||||
|
public KeyModifiers KeyModifier { get; }
|
||||||
|
private readonly Key[] ActivatorKeys;
|
||||||
|
|
||||||
|
public AccessKeyHandlerEx(KeyModifiers menuKeyModifier)
|
||||||
|
{
|
||||||
|
KeyModifier = menuKeyModifier;
|
||||||
|
ActivatorKeys = menuKeyModifier switch
|
||||||
|
{
|
||||||
|
KeyModifiers.Alt => new[] { Key.LeftAlt, Key.RightAlt },
|
||||||
|
KeyModifiers.Control => new[] { Key.LeftCtrl, Key.RightCtrl },
|
||||||
|
KeyModifiers.Meta => new[] { Key.LWin, Key.RWin },
|
||||||
|
_ => throw new System.NotSupportedException($"{nameof(KeyModifiers)}.{menuKeyModifier} is not implemented"),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPreviewKeyDown(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (ActivatorKeys.Contains(e.Key) && e.KeyModifiers.HasAllFlags(KeyModifier))
|
||||||
|
{
|
||||||
|
var newArgs = new KeyEventArgs { Key = Key.LeftAlt, Handled = e.Handled };
|
||||||
|
base.OnPreviewKeyDown(sender, newArgs);
|
||||||
|
e.Handled = newArgs.Handled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPreviewKeyUp(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (ActivatorKeys.Contains(e.Key) && e.KeyModifiers.HasAllFlags(KeyModifier))
|
||||||
|
{
|
||||||
|
var newArgs = new KeyEventArgs { Key = Key.LeftAlt, Handled = e.Handled };
|
||||||
|
base.OnPreviewKeyUp(sender, newArgs);
|
||||||
|
e.Handled = newArgs.Handled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnKeyDown(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.KeyModifiers.HasAllFlags(KeyModifier))
|
||||||
|
{
|
||||||
|
var newArgs = new KeyEventArgs { Key = e.Key, Handled = e.Handled, KeyModifiers = KeyModifiers.Alt };
|
||||||
|
base.OnKeyDown(sender, newArgs);
|
||||||
|
e.Handled = newArgs.Handled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
|
using Avalonia.Input;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Markup.Xaml;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Avalonia.Platform;
|
using Avalonia.Platform;
|
||||||
@ -44,6 +45,9 @@ namespace LibationAvalonia
|
|||||||
{
|
{
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
|
var acceleratorKey = Configuration.IsMacOs ? KeyModifiers.Meta : KeyModifiers.Alt;
|
||||||
|
AvaloniaLocator.CurrentMutable.Bind<IAccessKeyHandler>().ToFunc(() => new AccessKeyHandlerEx(acceleratorKey));
|
||||||
|
|
||||||
var config = Configuration.Instance;
|
var config = Configuration.Instance;
|
||||||
|
|
||||||
if (!config.LibationSettingsAreValid)
|
if (!config.LibationSettingsAreValid)
|
||||||
|
|||||||
@ -2,9 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d" d:DesignWidth="240" d:DesignHeight="120"
|
mc:Ignorable="d" d:DesignWidth="240" d:DesignHeight="140"
|
||||||
MinWidth="240" MinHeight="120"
|
MinWidth="240" MinHeight="140"
|
||||||
MaxWidth="240" MaxHeight="120"
|
MaxWidth="240" MaxHeight="140"
|
||||||
|
Width="240" Height="140"
|
||||||
x:Class="LibationAvalonia.Dialogs.Login.ApprovalNeededDialog"
|
x:Class="LibationAvalonia.Dialogs.Login.ApprovalNeededDialog"
|
||||||
Title="Approval Alert Detected"
|
Title="Approval Alert Detected"
|
||||||
Icon="/Assets/libation.ico">
|
Icon="/Assets/libation.ico">
|
||||||
|
|||||||
@ -25,7 +25,8 @@ namespace LibationAvalonia.Dialogs.Login
|
|||||||
{
|
{
|
||||||
var dialog = new LoginChoiceEagerDialog(_account);
|
var dialog = new LoginChoiceEagerDialog(_account);
|
||||||
|
|
||||||
if (await dialog.ShowDialogAsync() is not DialogResult.OK || string.IsNullOrWhiteSpace(dialog.Password))
|
if (await dialog.ShowDialogAsync() is not DialogResult.OK ||
|
||||||
|
(dialog.LoginMethod is LoginMethod.Api && string.IsNullOrWhiteSpace(dialog.Password)))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
switch (dialog.LoginMethod)
|
switch (dialog.LoginMethod)
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
mc:Ignorable="d" d:DesignWidth="220" d:DesignHeight="250"
|
mc:Ignorable="d" d:DesignWidth="220" d:DesignHeight="250"
|
||||||
MinWidth="220" MinHeight="250"
|
MinWidth="220" MinHeight="250"
|
||||||
MaxWidth="220" MaxHeight="250"
|
MaxWidth="220" MaxHeight="250"
|
||||||
|
Width="220" Height="250"
|
||||||
x:Class="LibationAvalonia.Dialogs.Login.CaptchaDialog"
|
x:Class="LibationAvalonia.Dialogs.Login.CaptchaDialog"
|
||||||
Title="CAPTCHA"
|
Title="CAPTCHA"
|
||||||
Icon="/Assets/libation.ico">
|
Icon="/Assets/libation.ico">
|
||||||
|
|||||||
@ -4,7 +4,8 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="200"
|
mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="200"
|
||||||
MinWidth="400" MinHeight="200"
|
MinWidth="400" MinHeight="200"
|
||||||
MaxWidth="400" MaxHeight="200"
|
MaxWidth="400" MaxHeight="400"
|
||||||
|
Width="400" Height="200"
|
||||||
x:Class="LibationAvalonia.Dialogs.Login.MfaDialog"
|
x:Class="LibationAvalonia.Dialogs.Login.MfaDialog"
|
||||||
Title="Two-Step Verification"
|
Title="Two-Step Verification"
|
||||||
Icon="/Assets/libation.ico">
|
Icon="/Assets/libation.ico">
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
mc:Ignorable="d" d:DesignWidth="200" d:DesignHeight="200"
|
mc:Ignorable="d" d:DesignWidth="200" d:DesignHeight="200"
|
||||||
MinWidth="200" MinHeight="200"
|
MinWidth="200" MinHeight="200"
|
||||||
MaxWidth="200" MaxHeight="200"
|
MaxWidth="200" MaxHeight="200"
|
||||||
|
Width="200" Height="200"
|
||||||
x:Class="LibationAvalonia.Dialogs.Login._2faCodeDialog"
|
x:Class="LibationAvalonia.Dialogs.Login._2faCodeDialog"
|
||||||
Title="2FA Code"
|
Title="2FA Code"
|
||||||
Icon="/Assets/libation.ico">
|
Icon="/Assets/libation.ico">
|
||||||
|
|||||||
@ -25,7 +25,7 @@ namespace LibationWinForms.Login
|
|||||||
{
|
{
|
||||||
using var dialog = new LoginChoiceEagerDialog(_account);
|
using var dialog = new LoginChoiceEagerDialog(_account);
|
||||||
|
|
||||||
if (!ShowDialog(dialog) || string.IsNullOrWhiteSpace(dialog.Password))
|
if (!ShowDialog(dialog) || (dialog.LoginMethod is LoginMethod.Api && string.IsNullOrWhiteSpace(dialog.Password)))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
switch (dialog.LoginMethod)
|
switch (dialog.LoginMethod)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user