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 <david.schulz@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-11-08 16:47:21 +01:00
parent e4805b88c9
commit 6e1d7fc961
2 changed files with 15 additions and 3 deletions

View File

@@ -209,14 +209,17 @@ SourceEditorWidget::SourceEditorWidget(const std::shared_ptr<SourceSettings> &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;

View File

@@ -8,6 +8,8 @@
#include <utils/aspects.h>
#include <texteditor/textdocument.h>
#include <QNetworkAccessManager>
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,