aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx12
-rw-r--r--src/Document.h6
-rw-r--r--src/Editor.cxx14
3 files changed, 23 insertions, 9 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index dcb087930..d67cac25e 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -184,7 +184,7 @@ Document::~Document() {
}
// Increase reference count and return its previous value.
-int Document::AddRef() {
+int SCI_METHOD Document::AddRef() noexcept {
return refCount++;
}
@@ -461,6 +461,10 @@ Sci_Position SCI_METHOD Document::LineEnd(Sci_Position line) const {
return cb.LineEnd(line);
}
+int SCI_METHOD Document::DEVersion() const noexcept {
+ return deRelease0;
+}
+
void SCI_METHOD Document::SetErrorStatus(int status) {
// Tell the watchers an error has occurred.
for (const WatcherWithUserData &watcher : watchers) {
@@ -1341,8 +1345,12 @@ int SCI_METHOD Document::AddData(const char *data, Sci_Position length) {
return static_cast<int>(Status::Ok);
}
+IDocumentEditable *Document::AsDocumentEditable() noexcept {
+ return static_cast<IDocumentEditable *>(this);
+}
+
void * SCI_METHOD Document::ConvertToDocument() {
- return this;
+ return AsDocumentEditable();
}
Sci::Position Document::Undo() {
diff --git a/src/Document.h b/src/Document.h
index f7f4eeedd..9f51fc719 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -259,7 +259,7 @@ struct CharacterExtracted {
/**
*/
-class Document : PerLine, public Scintilla::IDocument, public Scintilla::ILoader {
+class Document : PerLine, public Scintilla::IDocument, public Scintilla::ILoader, public Scintilla::IDocumentEditable {
public:
/** Used to pair watcher pointer with user data. */
@@ -329,7 +329,7 @@ public:
Document &operator=(Document &&) = delete;
~Document() override;
- int AddRef();
+ int SCI_METHOD AddRef() noexcept override;
int SCI_METHOD Release() override;
// From PerLine
@@ -347,6 +347,7 @@ public:
int SCI_METHOD Version() const override {
return Scintilla::dvRelease4;
}
+ int SCI_METHOD DEVersion() const noexcept override;
void SCI_METHOD SetErrorStatus(int status) override;
@@ -383,6 +384,7 @@ public:
Sci::Position InsertString(Sci::Position position, std::string_view sv);
void ChangeInsertion(const char *s, Sci::Position length);
int SCI_METHOD AddData(const char *data, Sci_Position length) override;
+ IDocumentEditable *AsDocumentEditable() noexcept;
void * SCI_METHOD ConvertToDocument() override;
Sci::Position Undo();
Sci::Position Redo();
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 28d680d7a..8f29d3a8f 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -6079,6 +6079,10 @@ constexpr Selection::SelTypes SelTypeFromMode(SelectionMode mode) {
}
}
+sptr_t SPtrFromPtr(void *ptr) noexcept {
+ return reinterpret_cast<sptr_t>(ptr);
+}
+
}
void Editor::SetSelectionMode(uptr_t wParam, bool setMoveExtends) {
@@ -8216,11 +8220,11 @@ sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) {
break;
case Message::GetDocPointer:
- return reinterpret_cast<sptr_t>(pdoc);
+ return SPtrFromPtr(pdoc->AsDocumentEditable());
case Message::SetDocPointer:
CancelModes();
- SetDocPointer(static_cast<Document *>(PtrFromSPtr(lParam)));
+ SetDocPointer(static_cast<Document *>(static_cast<IDocumentEditable *>(PtrFromSPtr(lParam))));
return 0;
case Message::CreateDocument: {
@@ -8228,15 +8232,15 @@ sptr_t Editor::WndProc(Message iMessage, uptr_t wParam, sptr_t lParam) {
doc->AddRef();
doc->Allocate(PositionFromUPtr(wParam));
pcs = ContractionStateCreate(pdoc->IsLarge());
- return reinterpret_cast<sptr_t>(doc);
+ return SPtrFromPtr(doc->AsDocumentEditable());
}
case Message::AddRefDocument:
- (static_cast<Document *>(PtrFromSPtr(lParam)))->AddRef();
+ (static_cast<IDocumentEditable *>(PtrFromSPtr(lParam)))->AddRef();
break;
case Message::ReleaseDocument:
- (static_cast<Document *>(PtrFromSPtr(lParam)))->Release();
+ (static_cast<IDocumentEditable *>(PtrFromSPtr(lParam)))->Release();
break;
case Message::GetDocumentOptions: