From c1de3774867127539b9b93efd4a0832a3f3a9fcf Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 18 Apr 2025 09:20:38 +1000 Subject: Control restoring vertical scroll position for undo with SC_UNDO_SELECTION_HISTORY_SCROLL flag to SCI_SETUNDOSELECTIONHISTORY. --- src/EditModel.cxx | 2 +- src/Editor.cxx | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/EditModel.cxx b/src/EditModel.cxx index e12aab38e..65d39f9e7 100644 --- a/src/EditModel.cxx +++ b/src/EditModel.cxx @@ -172,7 +172,7 @@ int EditModel::GetMark(Sci::Line line) const { } void EditModel::EnsureModelState() { - if (!modelState && (undoSelectionHistoryOption == UndoSelectionHistoryOption::Enabled)) { + if (!modelState && (undoSelectionHistoryOption != UndoSelectionHistoryOption::Disabled)) { if (ViewStateShared vss = pdoc->GetViewState(this)) { modelState = std::dynamic_pointer_cast(vss); } else { diff --git a/src/Editor.cxx b/src/Editor.cxx index ead69617d..334600461 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2409,12 +2409,14 @@ void Editor::SelectAll() { void Editor::RestoreSelection(Sci::Position newPos, UndoRedo history) { EnsureModelState(); - if ((undoSelectionHistoryOption == UndoSelectionHistoryOption::Enabled) && modelState) { + if (FlagSet(undoSelectionHistoryOption, UndoSelectionHistoryOption::Enabled) && modelState) { // Undo wants the element after the current as it just undid it const int index = pdoc->UndoCurrent() + (history == UndoRedo::undo ? 1 : 0); const SelectionWithScroll selAndLine = modelState->SelectionFromStack(index, history); if (!selAndLine.selection.empty()) { - ScrollTo(selAndLine.topLine); + if (FlagSet(undoSelectionHistoryOption, UndoSelectionHistoryOption::Scroll)) { + ScrollTo(selAndLine.topLine); + } sel = Selection(selAndLine.selection); if (sel.IsRectangular()) { const size_t mainForRectangular = sel.Main(); @@ -2799,7 +2801,7 @@ void Editor::NotifyModified(Document *, DocModification mh, void *) { view.llc.Invalidate(LineLayout::ValidLevel::checkTextAndStyle); } } else { - if ((undoSelectionHistoryOption == UndoSelectionHistoryOption::Enabled) && + if (FlagSet(undoSelectionHistoryOption, UndoSelectionHistoryOption::Enabled) && FlagSet(mh.modificationType, ModificationFlags::User)) { if (FlagSet(mh.modificationType, ModificationFlags::BeforeInsert | ModificationFlags::BeforeDelete)) { RememberSelectionForUndo(pdoc->UndoCurrent()); -- cgit v1.2.3