diff --git a/src/ViewModels/Preference.cs b/src/ViewModels/Preference.cs index 0dcf20a9..3d504155 100644 --- a/src/ViewModels/Preference.cs +++ b/src/ViewModels/Preference.cs @@ -123,7 +123,14 @@ namespace SourceGit.ViewModels { public int ExternalMergeToolType { get => _externalMergeToolType; - set => SetProperty(ref _externalMergeToolType, value); + set { + var changed = SetProperty(ref _externalMergeToolType, value); + if (changed && !OperatingSystem.IsWindows() && value >= 0 && value < Models.ExternalMergeTools.Supported.Count) { + var tool = Models.ExternalMergeTools.Supported[value]; + if (File.Exists(tool.Exec)) ExternalMergeToolPath = tool.Exec; + else ExternalMergeToolPath = string.Empty; + } + } } public string ExternalMergeToolPath { diff --git a/src/Views/Preference.axaml.cs b/src/Views/Preference.axaml.cs index b68649fc..212b1f96 100644 --- a/src/Views/Preference.axaml.cs +++ b/src/Views/Preference.axaml.cs @@ -115,14 +115,15 @@ namespace SourceGit.Views { private async void SelectExternalMergeTool(object sender, RoutedEventArgs e) { var type = ViewModels.Preference.Instance.ExternalMergeToolType; - if (type == 0 || type >= Models.ExternalMergeTools.Supported.Count) { - ViewModels.Preference.Instance.ExternalMergeToolType = 1; - type = 1; + if (type < 0 || type >= Models.ExternalMergeTools.Supported.Count) { + ViewModels.Preference.Instance.ExternalMergeToolType = 0; + type = 0; } var tool = Models.ExternalMergeTools.Supported[type]; + var pattern = Path.GetFileName(tool.Exec); var options = new FilePickerOpenOptions() { - FileTypeFilter = [new FilePickerFileType(tool.Name) { Patterns = [tool.Exec] }], + FileTypeFilter = [new FilePickerFileType(tool.Name) { Patterns = [pattern] }], AllowMultiple = false, };