diff --git a/Lantean.QBTMud.Test/Lantean.QBTMud.Test.csproj b/Lantean.QBTMud.Test/Lantean.QBTMud.Test.csproj index b21e876..d3e95c3 100644 --- a/Lantean.QBTMud.Test/Lantean.QBTMud.Test.csproj +++ b/Lantean.QBTMud.Test/Lantean.QBTMud.Test.csproj @@ -10,11 +10,11 @@ - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Lantean.QBTMud/Components/FilesTab.razor.cs b/Lantean.QBTMud/Components/FilesTab.razor.cs index c1c7347..96f7c05 100644 --- a/Lantean.QBTMud/Components/FilesTab.razor.cs +++ b/Lantean.QBTMud/Components/FilesTab.razor.cs @@ -186,7 +186,9 @@ namespace Lantean.QBTMud.Components return; } - await ContextMenu.OpenMenuAsync(eventArgs); + var normalizedEventArgs = eventArgs.NormalizeForContextMenu(); + + await ContextMenu.OpenMenuAsync(normalizedEventArgs); } protected override async Task OnAfterRenderAsync(bool firstRender) diff --git a/Lantean.QBTMud/Components/FiltersNav.razor.cs b/Lantean.QBTMud/Components/FiltersNav.razor.cs index 2637c14..d066e23 100644 --- a/Lantean.QBTMud/Components/FiltersNav.razor.cs +++ b/Lantean.QBTMud/Components/FiltersNav.razor.cs @@ -1,6 +1,5 @@ using Blazored.LocalStorage; using Lantean.QBitTorrentClient; -using Lantean.QBTMud.Components.UI; using Lantean.QBTMud.Helpers; using Lantean.QBTMud.Models; using Microsoft.AspNetCore.Components; @@ -154,7 +153,9 @@ namespace Lantean.QBTMud.Components ContextMenuStatus = value; - return StatusContextMenu.OpenMenuAsync(args); + var normalizedArgs = args.NormalizeForContextMenu(); + + return StatusContextMenu.OpenMenuAsync(normalizedArgs); } protected async Task CategoryValueChanged(string value) @@ -192,7 +193,9 @@ namespace Lantean.QBTMud.Components IsCategoryTarget = value != FilterHelper.CATEGORY_ALL && value != FilterHelper.CATEGORY_UNCATEGORIZED; ContextMenuCategory = value; - return CategoryContextMenu.OpenMenuAsync(args); + var normalizedArgs = args.NormalizeForContextMenu(); + + return CategoryContextMenu.OpenMenuAsync(normalizedArgs); } protected async Task TagValueChanged(string value) @@ -230,7 +233,9 @@ namespace Lantean.QBTMud.Components IsTagTarget = value != FilterHelper.TAG_ALL && value != FilterHelper.TAG_UNTAGGED; ContextMenuTag = value; - return TagContextMenu.OpenMenuAsync(args); + var normalizedArgs = args.NormalizeForContextMenu(); + + return TagContextMenu.OpenMenuAsync(normalizedArgs); } protected async Task TrackerValueChanged(string value) @@ -267,7 +272,9 @@ namespace Lantean.QBTMud.Components ContextMenuTracker = value; - return TrackerContextMenu.OpenMenuAsync(args); + var normalizedArgs = args.NormalizeForContextMenu(); + + return TrackerContextMenu.OpenMenuAsync(normalizedArgs); } protected async Task AddCategory() @@ -470,4 +477,4 @@ namespace Lantean.QBTMud.Components } } } -} \ No newline at end of file +} diff --git a/Lantean.QBTMud/Components/PeersTab.razor.cs b/Lantean.QBTMud/Components/PeersTab.razor.cs index e8d6733..eb094f2 100644 --- a/Lantean.QBTMud/Components/PeersTab.razor.cs +++ b/Lantean.QBTMud/Components/PeersTab.razor.cs @@ -153,7 +153,9 @@ namespace Lantean.QBTMud.Components return; } - await ContextMenu.OpenMenuAsync(eventArgs); + var normalizedEventArgs = eventArgs.NormalizeForContextMenu(); + + await ContextMenu.OpenMenuAsync(normalizedEventArgs); } protected void SelectedItemChanged(Peer peer) @@ -255,4 +257,4 @@ namespace Lantean.QBTMud.Components GC.SuppressFinalize(this); } } -} \ No newline at end of file +} diff --git a/Lantean.QBTMud/Components/TrackersTab.razor.cs b/Lantean.QBTMud/Components/TrackersTab.razor.cs index c9bf214..eda4c95 100644 --- a/Lantean.QBTMud/Components/TrackersTab.razor.cs +++ b/Lantean.QBTMud/Components/TrackersTab.razor.cs @@ -148,7 +148,9 @@ namespace Lantean.QBTMud.Components return; } - await ContextMenu.OpenMenuAsync(eventArgs); + var normalizedEventArgs = eventArgs.NormalizeForContextMenu(); + + await ContextMenu.OpenMenuAsync(normalizedEventArgs); } protected void SelectedItemChanged(TorrentTracker torrentTracker) @@ -301,4 +303,4 @@ namespace Lantean.QBTMud.Components GC.SuppressFinalize(this); } } -} \ No newline at end of file +} diff --git a/Lantean.QBTMud/Helpers/EventArgsExtensions.cs b/Lantean.QBTMud/Helpers/EventArgsExtensions.cs new file mode 100644 index 0000000..587a4aa --- /dev/null +++ b/Lantean.QBTMud/Helpers/EventArgsExtensions.cs @@ -0,0 +1,47 @@ +using System; +using Lantean.QBTMud; +using Microsoft.AspNetCore.Components.Web; + +namespace Lantean.QBTMud.Helpers +{ + public static class EventArgsExtensions + { + public static EventArgs NormalizeForContextMenu(this EventArgs eventArgs) + { + if (eventArgs is null) + { + throw new ArgumentNullException(nameof(eventArgs)); + } + + if (eventArgs is LongPressEventArgs longPressEventArgs) + { + return longPressEventArgs.ToMouseEventArgs(); + } + + return eventArgs; + } + + public static MouseEventArgs ToMouseEventArgs(this LongPressEventArgs longPressEventArgs) + { + if (longPressEventArgs is null) + { + throw new ArgumentNullException(nameof(longPressEventArgs)); + } + + return new MouseEventArgs + { + Button = 2, + Buttons = 2, + ClientX = longPressEventArgs.ClientX, + ClientY = longPressEventArgs.ClientY, + OffsetX = longPressEventArgs.OffsetX, + OffsetY = longPressEventArgs.OffsetY, + PageX = longPressEventArgs.PageX, + PageY = longPressEventArgs.PageY, + ScreenX = longPressEventArgs.ScreenX, + ScreenY = longPressEventArgs.ScreenY, + Type = longPressEventArgs.Type ?? "contextmenu", + }; + } + } +} diff --git a/Lantean.QBTMud/Pages/TorrentList.razor.cs b/Lantean.QBTMud/Pages/TorrentList.razor.cs index 5496fe9..6b4611a 100644 --- a/Lantean.QBTMud/Pages/TorrentList.razor.cs +++ b/Lantean.QBTMud/Pages/TorrentList.razor.cs @@ -1,4 +1,4 @@ -using Lantean.QBitTorrentClient; +using Lantean.QBitTorrentClient; using Lantean.QBTMud.Components.UI; using Lantean.QBTMud.Helpers; using Lantean.QBTMud.Models; @@ -272,7 +272,9 @@ namespace Lantean.QBTMud.Pages return; } - await ContextMenu.OpenMenuAsync(eventArgs); + var normalizedEventArgs = eventArgs.NormalizeForContextMenu(); + + await ContextMenu.OpenMenuAsync(normalizedEventArgs); } protected IEnumerable> Columns => ColumnsDefinitions.Where(c => c.Id != "#" || Preferences?.QueueingEnabled == true);