Просмотр исходного кода

UI: Only allow right click to create a context menu if a game is selected.

Evan Husted 1 год назад
Родитель
Сommit
4135d74e4d

+ 3 - 4
src/Ryujinx/UI/Controls/ApplicationGridView.axaml

@@ -15,7 +15,6 @@
     x:DataType="viewModels:MainWindowViewModel">
     x:DataType="viewModels:MainWindowViewModel">
     <UserControl.Resources>
     <UserControl.Resources>
         <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
         <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
-        <controls:ApplicationContextMenu x:Key="ApplicationContextMenu" />
     </UserControl.Resources>
     </UserControl.Resources>
     <Grid>
     <Grid>
         <Grid.RowDefinitions>
         <Grid.RowDefinitions>
@@ -26,10 +25,10 @@
             Padding="8"
             Padding="8"
             HorizontalAlignment="Stretch"
             HorizontalAlignment="Stretch"
             VerticalAlignment="Stretch"
             VerticalAlignment="Stretch"
-            ContextFlyout="{StaticResource ApplicationContextMenu}"
+            SelectedItem="{Binding GridSelectedApplication}"
+            ContextFlyout="{Binding GridAppContextMenu}"
             DoubleTapped="GameList_DoubleTapped"
             DoubleTapped="GameList_DoubleTapped"
-            ItemsSource="{Binding AppsObservableList}"
-            SelectionChanged="GameList_SelectionChanged">
+            ItemsSource="{Binding AppsObservableList}">
             <ListBox.ItemsPanel>
             <ListBox.ItemsPanel>
                 <ItemsPanelTemplate>
                 <ItemsPanelTemplate>
                     <WrapPanel
                     <WrapPanel

+ 0 - 6
src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs

@@ -26,11 +26,5 @@ namespace Ryujinx.Ava.UI.Controls
             if (sender is ListBox { SelectedItem: ApplicationData selected })
             if (sender is ListBox { SelectedItem: ApplicationData selected })
                 RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
                 RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
         }
         }
-
-        public void GameList_SelectionChanged(object sender, SelectionChangedEventArgs args)
-        {
-            if (DataContext is MainWindowViewModel viewModel && sender is ListBox { SelectedItem: ApplicationData selected })
-                viewModel.GridSelectedApplication = selected;
-        }
     }
     }
 }
 }

+ 3 - 5
src/Ryujinx/UI/Controls/ApplicationListView.axaml

@@ -7,7 +7,6 @@
     xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-    xmlns:converters="clr-namespace:Avalonia.Data.Converters;assembly=Avalonia.Base"
     d:DesignHeight="450"
     d:DesignHeight="450"
     d:DesignWidth="800"
     d:DesignWidth="800"
     Focusable="True"
     Focusable="True"
@@ -16,7 +15,6 @@
     x:DataType="viewModels:MainWindowViewModel">
     x:DataType="viewModels:MainWindowViewModel">
     <UserControl.Resources>
     <UserControl.Resources>
         <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
         <helpers:BitmapArrayValueConverter x:Key="ByteImage" />
-        <controls:ApplicationContextMenu x:Key="ApplicationContextMenu" />
     </UserControl.Resources>
     </UserControl.Resources>
     <Grid>
     <Grid>
         <Grid.RowDefinitions>
         <Grid.RowDefinitions>
@@ -28,10 +26,10 @@
             Padding="8"
             Padding="8"
             HorizontalAlignment="Stretch"
             HorizontalAlignment="Stretch"
             VerticalAlignment="Stretch"
             VerticalAlignment="Stretch"
-            ContextFlyout="{StaticResource ApplicationContextMenu}"
+            SelectedItem="{Binding ListSelectedApplication}"
+            ContextFlyout="{Binding ListAppContextMenu}"
             DoubleTapped="GameList_DoubleTapped"
             DoubleTapped="GameList_DoubleTapped"
-            ItemsSource="{Binding AppsObservableList}"
-            SelectionChanged="GameList_SelectionChanged">
+            ItemsSource="{Binding AppsObservableList}">
             <ListBox.ItemsPanel>
             <ListBox.ItemsPanel>
                 <ItemsPanelTemplate>
                 <ItemsPanelTemplate>
                     <StackPanel
                     <StackPanel

+ 0 - 6
src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs

@@ -30,12 +30,6 @@ namespace Ryujinx.Ava.UI.Controls
                 RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
                 RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
         }
         }
 
 
-        public void GameList_SelectionChanged(object sender, SelectionChangedEventArgs args)
-        {
-            if (DataContext is MainWindowViewModel viewModel && sender is ListBox { SelectedItem: ApplicationData selected })
-                viewModel.ListSelectedApplication = selected;
-        }
-
         private async void IdString_OnClick(object sender, RoutedEventArgs e)
         private async void IdString_OnClick(object sender, RoutedEventArgs e)
         {
         {
             if (DataContext is not MainWindowViewModel mwvm)
             if (DataContext is not MainWindowViewModel mwvm)

+ 59 - 3
src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs

@@ -123,8 +123,42 @@ namespace Ryujinx.Ava.UI.ViewModels
         private bool _isActive;
         private bool _isActive;
         private bool _isSubMenuOpen;
         private bool _isSubMenuOpen;
 
 
-        public ApplicationData ListSelectedApplication;
-        public ApplicationData GridSelectedApplication;
+        private ApplicationData _listSelectedApplication;
+        private ApplicationData _gridSelectedApplication;
+        private ApplicationContextMenu _listAppContextMenu;
+        private ApplicationContextMenu _gridAppContextMenu;
+
+        public ApplicationData ListSelectedApplication
+        {
+            get => _listSelectedApplication;
+            set
+            {
+                _listSelectedApplication = value;
+
+                if (_listSelectedApplication != null && _listAppContextMenu == null)
+                    ListAppContextMenu = new ApplicationContextMenu();
+                else if (_listSelectedApplication == null && _listAppContextMenu != null)
+                    ListAppContextMenu = null;
+
+                OnPropertyChanged();
+            }
+        }
+
+        public ApplicationData GridSelectedApplication
+        {
+            get => _gridSelectedApplication;
+            set
+            {
+                _gridSelectedApplication = value;
+
+                if (_gridSelectedApplication != null && _gridAppContextMenu == null)
+                    GridAppContextMenu = new ApplicationContextMenu();
+                else if (_gridSelectedApplication == null && _gridAppContextMenu != null)
+                    GridAppContextMenu = null;
+                
+                OnPropertyChanged();
+            }
+        }
         
         
         // Key is Title ID
         // Key is Title ID
         public SafeDictionary<string, LdnGameData.Array> LdnData = [];
         public SafeDictionary<string, LdnGameData.Array> LdnData = [];
@@ -218,7 +252,7 @@ namespace Ryujinx.Ava.UI.ViewModels
 
 
         public bool CanUpdate
         public bool CanUpdate
         {
         {
-            get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(false);
+            get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate();
             set
             set
             {
             {
                 _canUpdate = value;
                 _canUpdate = value;
@@ -247,6 +281,28 @@ namespace Ryujinx.Ava.UI.ViewModels
             }
             }
         }
         }
 
 
+        public ApplicationContextMenu ListAppContextMenu
+        {
+            get => _listAppContextMenu;
+            set
+            {
+                _listAppContextMenu = value;
+                
+                OnPropertyChanged();
+            }
+        }
+        
+        public ApplicationContextMenu GridAppContextMenu
+        {
+            get => _gridAppContextMenu;
+            set
+            {
+                _gridAppContextMenu = value;
+                
+                OnPropertyChanged();
+            }
+        }
+
         public bool IsPaused
         public bool IsPaused
         {
         {
             get => _isPaused;
             get => _isPaused;