diff --git a/src/Models/DiffResult.cs b/src/Models/DiffResult.cs index 70219dcf..8a72b35d 100644 --- a/src/Models/DiffResult.cs +++ b/src/Models/DiffResult.cs @@ -388,11 +388,11 @@ namespace SourceGit.Models } [GeneratedRegex(@"^@@ \-(\d+),?\d* \+(\d+),?\d* @@")] - private static partial Regex indicatorRegex(); + private static partial Regex REG_INDICATOR(); private bool ProcessIndicatorForPatch(StringBuilder builder, TextDiffLine indicator, int idx, int start, int end, int ignoreRemoves, int ignoreAdds, bool revert, bool tailed) { - var match = indicatorRegex().Match(indicator.Content); + var match = REG_INDICATOR().Match(indicator.Content); var oldStart = int.Parse(match.Groups[1].Value); var newStart = int.Parse(match.Groups[2].Value) + ignoreRemoves - ignoreAdds; var oldCount = 0; @@ -461,7 +461,7 @@ namespace SourceGit.Models private bool ProcessIndicatorForPatchSingleSide(StringBuilder builder, TextDiffLine indicator, int idx, int start, int end, int ignoreRemoves, int ignoreAdds, bool revert, bool isOldSide, bool tailed) { - var match = indicatorRegex().Match(indicator.Content); + var match = REG_INDICATOR().Match(indicator.Content); var oldStart = int.Parse(match.Groups[1].Value); var newStart = int.Parse(match.Groups[2].Value) + ignoreRemoves - ignoreAdds; var oldCount = 0; diff --git a/src/Views/TextDiffView.axaml.cs b/src/Views/TextDiffView.axaml.cs index 1f107138..9672110e 100644 --- a/src/Views/TextDiffView.axaml.cs +++ b/src/Views/TextDiffView.axaml.cs @@ -7,6 +7,7 @@ using System.Text; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; +using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Media; using Avalonia.VisualTree; @@ -657,6 +658,7 @@ namespace SourceGit.Views UpdateTextMate(); + TextArea.PointerWheelChanged += OnTextAreaPointerWheelChanged; TextArea.TextView.ContextRequested += OnTextViewContextRequested; } @@ -676,21 +678,20 @@ namespace SourceGit.Views _textMate = null; } + TextArea.PointerWheelChanged -= OnTextAreaPointerWheelChanged; TextArea.TextView.ContextRequested -= OnTextViewContextRequested; GC.Collect(); } + private void OnTextAreaPointerWheelChanged(object sender, PointerWheelEventArgs e) + { + if (!TextArea.IsFocused) Focus(); + } + private void OnTextViewScrollChanged(object sender, ScrollChangedEventArgs e) { - if (_syncScrollingByOthers) - { - _syncScrollingByOthers = false; - } - else - { - SetCurrentValue(SyncScrollOffsetProperty, _scrollViewer.Offset); - } + if (TextArea.IsFocused) SetCurrentValue(SyncScrollOffsetProperty, _scrollViewer.Offset); } private void OnTextViewContextRequested(object sender, ContextRequestedEventArgs e) @@ -754,24 +755,8 @@ namespace SourceGit.Views } else if (change.Property == SyncScrollOffsetProperty) { - if (_scrollViewer == null) - return; - - var curOffset = _scrollViewer.Offset; - if (!curOffset.Equals(SyncScrollOffset)) - { - _syncScrollingByOthers = true; - - if (curOffset.X != SyncScrollOffset.X) - { - var offset = new Vector(Math.Min(_scrollViewer.ScrollBarMaximum.X, SyncScrollOffset.X), SyncScrollOffset.Y); - _scrollViewer.Offset = offset; - } - else - { - _scrollViewer.Offset = SyncScrollOffset; - } - } + if (_scrollViewer != null) + _scrollViewer.Offset = SyncScrollOffset; } else if (change.Property == UseSyntaxHighlightingProperty) { @@ -813,7 +798,6 @@ namespace SourceGit.Views private TextMate.Installation _textMate; private readonly LineStyleTransformer _lineStyleTransformer = null; private ScrollViewer _scrollViewer = null; - private bool _syncScrollingByOthers = false; } public partial class TextDiffView : UserControl