diff --git a/v2rayN/v2rayN/Mode/ConfigItems.cs b/v2rayN/v2rayN/Mode/ConfigItems.cs index 991828c6..1fb2e4fe 100644 --- a/v2rayN/v2rayN/Mode/ConfigItems.cs +++ b/v2rayN/v2rayN/Mode/ConfigItems.cs @@ -63,6 +63,7 @@ namespace v2rayN.Mode public string? colorPrimaryName { get; set; } public string currentLanguage { get; set; } public bool enableDragDropSort { get; set; } + public bool doubleClick2Activate { get; set; } public Dictionary mainLvColWidth { get; set; } } diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 5d94dc01..7c38a0e3 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -2401,6 +2401,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Double-click server make active 的本地化字符串。 + /// + public static string TbSettingsDoubleClick2Activate { + get { + return ResourceManager.GetString("TbSettingsDoubleClick2Activate", resourceCulture); + } + } + /// /// 查找类似 Automatically adjust column width after updating subscription 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index dc4904d6..d10ca625 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -1078,4 +1078,7 @@ Edit Server (Ctrl+D) + + Double-click server make active + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index fbe67f91..02ff3a5b 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -1078,4 +1078,7 @@ 编辑服务器 (Ctrl+D) + + 主界面双击设为活动服务器 + \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs index daabf9fa..6f7a6430 100644 --- a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs @@ -560,7 +560,16 @@ namespace v2rayN.ViewModels item.totalDown = Utils.HumanFy(update.totalDown); item.totalUp = Utils.HumanFy(update.totalUp); - _profileItems.Replace(item, Utils.DeepCopy(item)); + if (SelectedProfile?.indexId == item.indexId) + { + var temp = Utils.DeepCopy(item); + _profileItems.Replace(item, temp); + SelectedProfile = temp; + } + else + { + _profileItems.Replace(item, Utils.DeepCopy(item)); + } } } } @@ -727,7 +736,15 @@ namespace v2rayN.ViewModels _profileItems.AddRange(lstModel); if (lstModel.Count > 0) { - SelectedProfile = lstModel[0]; + var selected = lstModel.FirstOrDefault(t => t.indexId == _config.indexId); + if (selected != null) + { + SelectedProfile = selected; + } + else + { + SelectedProfile = lstModel[0]; + } } RefreshServersMenu(); @@ -918,7 +935,7 @@ namespace v2rayN.ViewModels public void SetDefaultServer() { - if (Utils.IsNullOrEmpty(SelectedProfile.indexId)) + if (Utils.IsNullOrEmpty(SelectedProfile?.indexId)) { return; } diff --git a/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs index 36c176aa..96671fda 100644 --- a/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs @@ -56,6 +56,7 @@ namespace v2rayN.ViewModels [Reactive] public bool AutoHideStartup { get; set; } [Reactive] public bool EnableCheckPreReleaseUpdate { get; set; } [Reactive] public bool EnableDragDropSort { get; set; } + [Reactive] public bool DoubleClick2Activate { get; set; } [Reactive] public int autoUpdateInterval { get; set; } [Reactive] public int autoUpdateSubInterval { get; set; } [Reactive] public int trayMenuServersLimit { get; set; } @@ -137,6 +138,7 @@ namespace v2rayN.ViewModels AutoHideStartup = _config.autoHideStartup; EnableCheckPreReleaseUpdate = _config.checkPreReleaseUpdate; EnableDragDropSort = _config.uiItem.enableDragDropSort; + DoubleClick2Activate = _config.uiItem.doubleClick2Activate; autoUpdateInterval = _config.autoUpdateInterval; autoUpdateSubInterval = _config.autoUpdateSubInterval; trayMenuServersLimit = _config.trayMenuServersLimit; @@ -302,6 +304,7 @@ namespace v2rayN.ViewModels _config.autoUpdateSubInterval = autoUpdateSubInterval; _config.checkPreReleaseUpdate = EnableCheckPreReleaseUpdate; _config.uiItem.enableDragDropSort = EnableDragDropSort; + _config.uiItem.doubleClick2Activate = DoubleClick2Activate; _config.trayMenuServersLimit = trayMenuServersLimit; //systemProxy diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index b8e0c0f6..1ba77762 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -241,7 +241,14 @@ namespace v2rayN.Views private void LstProfiles_MouseDoubleClick(object sender, MouseButtonEventArgs e) { - ViewModel?.EditServer(false, EConfigType.Custom); + if (_config.uiItem.doubleClick2Activate) + { + ViewModel?.SetDefaultServer(); + } + else + { + ViewModel?.EditServer(false, EConfigType.Custom); + } } private void LstProfiles_ColumnHeader_Click(object sender, RoutedEventArgs e) diff --git a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml index 4fcdd5e9..b70bb023 100644 --- a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml +++ b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml @@ -419,6 +419,7 @@ + @@ -571,16 +572,30 @@ Margin="{StaticResource SettingItemMargin}" VerticalAlignment="Center" Style="{StaticResource ToolbarTextBlock}" + Text="{x:Static resx:ResUI.TbSettingsDoubleClick2Activate}" /> + + + diff --git a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs index 3e4ff789..a26cd5ba 100644 --- a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml.cs @@ -88,6 +88,7 @@ namespace v2rayN.Views this.Bind(ViewModel, vm => vm.AutoHideStartup, v => v.togAutoHideStartup.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.EnableCheckPreReleaseUpdate, v => v.togEnableCheckPreReleaseUpdate.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.EnableDragDropSort, v => v.togEnableDragDropSort.IsChecked).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.DoubleClick2Activate, v => v.togDoubleClick2Activate.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.autoUpdateInterval, v => v.txtautoUpdateInterval.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.autoUpdateSubInterval, v => v.txtautoUpdateSubInterval.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.trayMenuServersLimit, v => v.txttrayMenuServersLimit.Text).DisposeWith(disposables);