From 6e1d7fc961d966c973e5db796e5b0f4f25f05fb8 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 8 Nov 2023 16:47:21 +0100 Subject: [PATCH] CompilerExplorer: Fix crash on undo We need to store the source text document so that when the editor is remove and the user triggers undo/read, the pointer is still valid. Change-Id: I571906db1c4424455172a42d72351cd9ba1e7c03 Reviewed-by: David Schulz --- src/plugins/compilerexplorer/compilerexplorereditor.cpp | 9 ++++++--- src/plugins/compilerexplorer/compilerexplorersettings.h | 9 +++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/plugins/compilerexplorer/compilerexplorereditor.cpp b/src/plugins/compilerexplorer/compilerexplorereditor.cpp index f71010744ef..25c096c20d9 100644 --- a/src/plugins/compilerexplorer/compilerexplorereditor.cpp +++ b/src/plugins/compilerexplorer/compilerexplorereditor.cpp @@ -209,14 +209,17 @@ SourceEditorWidget::SourceEditorWidget(const std::shared_ptr &se connect(m_codeEditor, &CodeEditorWidget::gotFocus, this, &SourceEditorWidget::gotFocus); - TextDocumentPtr document = TextDocumentPtr(new SourceTextDocument(m_sourceSettings, undoStack)); + auto sourceTextDocument = settings->sourceTextDocument(); + if (!sourceTextDocument) + sourceTextDocument = TextDocumentPtr(new SourceTextDocument(m_sourceSettings, undoStack)); + settings->setSourceTextDocument(sourceTextDocument); - connect(document.get(), + connect(sourceTextDocument.get(), &SourceTextDocument::changed, this, &SourceEditorWidget::sourceCodeChanged); - m_codeEditor->setTextDocument(document); + m_codeEditor->setTextDocument(sourceTextDocument); m_codeEditor->updateHighlighter(); auto addCompilerButton = new QToolButton; diff --git a/src/plugins/compilerexplorer/compilerexplorersettings.h b/src/plugins/compilerexplorer/compilerexplorersettings.h index 64f67122fe6..dc32dbd8c2d 100644 --- a/src/plugins/compilerexplorer/compilerexplorersettings.h +++ b/src/plugins/compilerexplorer/compilerexplorersettings.h @@ -8,6 +8,8 @@ #include +#include + #include namespace CompilerExplorer { @@ -58,6 +60,12 @@ public: ApiConfigFunction apiConfigFunction() const { return m_apiConfigFunction; } + TextEditor::TextDocumentPtr sourceTextDocument() const { return m_sourceTextDocument; } + void setSourceTextDocument(TextEditor::TextDocumentPtr sourceTextDocument) + { + m_sourceTextDocument = sourceTextDocument; + } + public: Utils::StringSelectionAspect languageId{this}; Utils::StringAspect source{this}; @@ -75,6 +83,7 @@ private: private: CompilerExplorerSettings *m_parent; ApiConfigFunction m_apiConfigFunction; + TextEditor::TextDocumentPtr m_sourceTextDocument{nullptr}; }; class CompilerSettings : public Utils::AspectContainer,