diff --git a/src/ViewModels/DiffContext.cs b/src/ViewModels/DiffContext.cs index d56a6bc68..8dd965023 100644 --- a/src/ViewModels/DiffContext.cs +++ b/src/ViewModels/DiffContext.cs @@ -136,8 +136,7 @@ public void CheckSettings() if (ctx.IsSideBySide() != UseSideBySide) { - ctx = ctx.SwitchMode(); - Content = ctx; + Content = ctx.SwitchMode(); } } } diff --git a/src/Views/TextDiffView.axaml.cs b/src/Views/TextDiffView.axaml.cs index 78c4b7137..6cc14ae3b 100644 --- a/src/Views/TextDiffView.axaml.cs +++ b/src/Views/TextDiffView.axaml.cs @@ -487,44 +487,38 @@ public virtual void UpdateSelectedChunk(double y) { } - public virtual void GotoFirstChange() + protected virtual void SyncScrollOffset() { - var first = BlockNavigation.GotoFirst(); - if (first != null) - { - TextArea.Caret.Line = first.Start; - ScrollToLine(first.Start); - } } - public virtual void GotoPrevChange() + private void GotoChange(ViewModels.BlockNavigation.Block block) { - var prev = BlockNavigation.GotoPrev(); - if (prev != null) + if (block != null) { - TextArea.Caret.Line = prev.Start; - ScrollToLine(prev.Start); + TextArea.Caret.Line = block.Start; + ScrollToLine(block.Start); + SyncScrollOffset(); } } - public virtual void GotoNextChange() + public void GotoFirstChange() { - var next = BlockNavigation.GotoNext(); - if (next != null) - { - TextArea.Caret.Line = next.Start; - ScrollToLine(next.Start); - } + GotoChange(BlockNavigation.GotoFirst()); } - public virtual void GotoLastChange() + public void GotoPrevChange() { - var next = BlockNavigation.GotoLast(); - if (next != null) - { - TextArea.Caret.Line = next.Start; - ScrollToLine(next.Start); - } + GotoChange(BlockNavigation.GotoPrev()); + } + + public void GotoNextChange() + { + GotoChange(BlockNavigation.GotoNext()); + } + + public void GotoLastChange() + { + GotoChange(BlockNavigation.GotoLast()); } public override void Render(DrawingContext context) @@ -805,9 +799,6 @@ private void AutoScrollToFirstChange() if (DataContext is not ViewModels.TextDiffContext ctx) return; - if (ctx.IsSideBySide() && !IsOld) - return; - var curBlock = ctx.BlockNavigation.GetCurrentBlock(); if (curBlock == null) return; @@ -1098,30 +1089,6 @@ public class SingleSideTextDiffPresenter : ThemedTextDiffPresenter return []; } - public override void GotoFirstChange() - { - base.GotoFirstChange(); - SyncScrollOffset(); - } - - public override void GotoPrevChange() - { - base.GotoPrevChange(); - SyncScrollOffset(); - } - - public override void GotoNextChange() - { - base.GotoNextChange(); - SyncScrollOffset(); - } - - public override void GotoLastChange() - { - base.GotoLastChange(); - SyncScrollOffset(); - } - public override void UpdateSelectedChunk(double y) { if (DataContext is not ViewModels.TwoSideTextDiff diff) @@ -1318,7 +1285,7 @@ private void OnBlockNavigationPropertyChanged(object sender, PropertyChangedEven TextArea?.TextView?.Redraw(); } - private void SyncScrollOffset() + protected override void SyncScrollOffset() { if (_scrollViewer is not null && DataContext is ViewModels.TwoSideTextDiff diff) diff.ScrollOffset = _scrollViewer.Offset;