Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,6 @@
Package="{x:Bind Package}" Wrapper="{x:Bind Self}"
RightTapped="PackageItemContainer_RightTapped"
DoubleTapped="PackageItemContainer_DoubleTapped"
KeyUp="PackageItemContainer_KeyUp"
PreviewKeyDown="PackageItemContainer_PreviewKeyDown">

<Grid ColumnSpacing="5" Opacity="{x:Bind ListedOpacity, Mode=OneWay}" Padding="12,3,8,3">
Expand Down
98 changes: 54 additions & 44 deletions src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -950,44 +950,6 @@ private void PackageItemContainer_DoubleTapped(object sender, DoubleTappedRouted
}
}

private void PackageItemContainer_KeyUp(object sender, KeyRoutedEventArgs e)
{
IPackage? package = (sender as PackageItemContainer)?.Package;

bool IS_CONTROL_PRESSED = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
//bool IS_SHIFT_PRESSED = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down);
bool IS_ALT_PRESSED = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.LeftMenu).HasFlag(CoreVirtualKeyStates.Down);
IS_ALT_PRESSED |= InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.RightMenu).HasFlag(CoreVirtualKeyStates.Down);

if (e.Key == VirtualKey.Enter && package is not null)
{
if (IS_ALT_PRESSED)
{
if (!package.Source.IsVirtualManager && package is not InvalidImportedPackage)
ShowInstallationOptionsForPackage(package);
}
else if (IS_CONTROL_PRESSED)
{
if (package is not InvalidImportedPackage)
PerformMainPackageAction(package);
}
else
{
if (!package.Source.IsVirtualManager && package is not InvalidImportedPackage)
{
TEL_InstallReferral referral = TEL_InstallReferral.ALREADY_INSTALLED;
if (PAGE_NAME == "Bundles") referral = TEL_InstallReferral.FROM_BUNDLE;
if (PAGE_NAME == "Discover") referral = TEL_InstallReferral.DIRECT_SEARCH;
ShowDetailsForPackage(package, referral);
}
}
}
else if (e.Key == VirtualKey.Space && package is not null)
{
package.IsChecked = !package.IsChecked;
}
}

private void SelectAllCheckBox_ValueChanged(object sender, RoutedEventArgs e)
{
if (SelectAllCheckBox.IsChecked == true)
Expand Down Expand Up @@ -1118,7 +1080,7 @@ public void OnLeave()

private void PackageItemContainer_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key is not (VirtualKey.Up or VirtualKey.Down or VirtualKey.Home or VirtualKey.End) ||
if (e.Key is not (VirtualKey.Up or VirtualKey.Down or VirtualKey.Home or VirtualKey.End or VirtualKey.Enter or VirtualKey.Space) ||
sender is not PackageItemContainer packageItemContainer)
{
return;
Expand All @@ -1128,15 +1090,63 @@ private void PackageItemContainer_PreviewKeyDown(object sender, KeyRoutedEventAr
switch (e.Key)
{
case VirtualKey.Up when index > 0:
SelectAndScrollTo(index - 1, true); break;
SelectAndScrollTo(index - 1, true); e.Handled = true; break;
case VirtualKey.Down when index < FilteredPackages.Count - 1:
SelectAndScrollTo(index + 1, true); break;
SelectAndScrollTo(index + 1, true); e.Handled = true; break;
case VirtualKey.Home when index > 0:
SelectAndScrollTo(0, true); break;
SelectAndScrollTo(0, true); e.Handled = true; break;
case VirtualKey.End when index < FilteredPackages.Count - 1:
SelectAndScrollTo(FilteredPackages.Count - 1, true); break;
SelectAndScrollTo(FilteredPackages.Count - 1, true); e.Handled = true; break;
}

if (e.KeyStatus.WasKeyDown)
{
// ignore repeated KeyDown events when pressing and holding a key
return;
}

IPackage? package = packageItemContainer.Package;

bool IS_CONTROL_PRESSED = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
//bool IS_SHIFT_PRESSED = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down);
bool IS_ALT_PRESSED = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.LeftMenu).HasFlag(CoreVirtualKeyStates.Down);
IS_ALT_PRESSED |= InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.RightMenu).HasFlag(CoreVirtualKeyStates.Down);

if (e.Key == VirtualKey.Enter && package is not null)
{
if (IS_ALT_PRESSED)
{
if (!package.Source.IsVirtualManager && package is not InvalidImportedPackage)
{
ShowInstallationOptionsForPackage(package);
e.Handled = true;
}
}
else if (IS_CONTROL_PRESSED)
{
if (package is not InvalidImportedPackage)
{
PerformMainPackageAction(package);
e.Handled = true;
}
}
else
{
if (!package.Source.IsVirtualManager && package is not InvalidImportedPackage)
{
TEL_InstallReferral referral = TEL_InstallReferral.ALREADY_INSTALLED;
if (PAGE_NAME == "Bundles") referral = TEL_InstallReferral.FROM_BUNDLE;
if (PAGE_NAME == "Discover") referral = TEL_InstallReferral.DIRECT_SEARCH;
ShowDetailsForPackage(package, referral);
e.Handled = true;
}
}
}
else if (e.Key == VirtualKey.Space && package is not null)
{
package.IsChecked = !package.IsChecked;
e.Handled = true;
}
e.Handled = true;
}
}
}
Loading