aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2025-02-04 20:57:26 +1100
committerNeil <nyamatongwe@gmail.com>2025-02-04 20:57:26 +1100
commit3c7b3d58881b98806a0eb5bbd94a07c38b9fe7c5 (patch)
tree84bfcce4cd245c333cab38586f43be89e8c7259f
parentc88990bc3bd3e043a426773d24d55a7527e84dcf (diff)
downloadscintilla-mirror-3c7b3d58881b98806a0eb5bbd94a07c38b9fe7c5.tar.gz
Ensure undo selection history for view is deleted when view destroyed or
history disabled.
-rw-r--r--src/Document.cxx6
-rw-r--r--src/EditModel.cxx10
-rw-r--r--src/EditModel.h1
-rw-r--r--src/Editor.cxx2
4 files changed, 17 insertions, 2 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index dc82b1902..7543b4940 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -2615,7 +2615,11 @@ void Document::SetLexInterface(std::unique_ptr<LexInterface> pLexInterface) noex
}
void Document::SetViewState(void *view, ViewStateShared pVSS) {
- viewData[view] = pVSS;
+ if (pVSS) {
+ viewData[view] = pVSS;
+ } else {
+ viewData.erase(view);
+ }
}
ViewStateShared Document::GetViewState(void *view) const noexcept {
diff --git a/src/EditModel.cxx b/src/EditModel.cxx
index 033d79bd2..a0339de35 100644
--- a/src/EditModel.cxx
+++ b/src/EditModel.cxx
@@ -121,6 +121,9 @@ EditModel::EditModel() : braces{} {
EditModel::~EditModel() {
try {
+ // Erasing the view state won't throw even though SetViewState
+ // and the resulting map::erase aren't marked noexcept.
+ pdoc->SetViewState(this, {});
// This never throws but isn't marked noexcept for compatibility
pdoc->Release();
} catch (...) {
@@ -178,3 +181,10 @@ void EditModel::EnsureModelState() {
}
}
}
+
+void EditModel::ChangeUndoSelectionHistory(Scintilla::UndoSelectionHistoryOption undoSelectionHistoryOptionNew) {
+ undoSelectionHistoryOption = undoSelectionHistoryOptionNew;
+ if (undoSelectionHistoryOption == UndoSelectionHistoryOption::Disabled) {
+ pdoc->SetViewState(this, {});
+ }
+}
diff --git a/src/EditModel.h b/src/EditModel.h
index b9c331573..1c4823b2e 100644
--- a/src/EditModel.h
+++ b/src/EditModel.h
@@ -105,6 +105,7 @@ public:
[[nodiscard]] int GetMark(Sci::Line line) const;
void EnsureModelState();
+ void ChangeUndoSelectionHistory(Scintilla::UndoSelectionHistoryOption undoSelectionHistoryOptionNew);
};
}
diff --git a/src/Editor.cxx b/src/Editor.cxx
index d85a4c294..a29aa08fc 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -8698,7 +8698,7 @@ sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) {
return static_cast<sptr_t>(changeHistoryOption);
case Message::SetUndoSelectionHistory:
- undoSelectionHistoryOption = static_cast<UndoSelectionHistoryOption>(wParam);
+ ChangeUndoSelectionHistory(static_cast<UndoSelectionHistoryOption>(wParam));
break;
case Message::GetUndoSelectionHistory: