From b169ff580027fbee2c59fc677cf172cc2179f8e8 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Fri, 23 Apr 2010 14:31:47 +0200 Subject: [PATCH] Guard against use of editable interface before it's created. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Thorbjørn Lindeijer Task-number: QTCREATORBUG-1261 --- src/plugins/texteditor/basetexteditor.cpp | 16 +++++++--------- src/plugins/texteditor/basetexteditor.h | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index a01d5f2a818..0e53e88d40c 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -563,11 +563,11 @@ void BaseTextEditor::maybeEmitContentsChangedBecauseOfUndo() } if (document()->isRedoAvailable()) { - emit d->m_editable->contentsChangedBecauseOfUndo(); + emit editableInterface()->contentsChangedBecauseOfUndo(); } } -ITextEditable *BaseTextEditor::editableInterface() const +BaseTextEditorEditable *BaseTextEditor::editableInterface() const { if (!d->m_editable) { d->m_editable = const_cast<BaseTextEditor*>(this)->createEditableInterface(); @@ -584,7 +584,7 @@ ITextEditable *BaseTextEditor::editableInterface() const void BaseTextEditor::currentEditorChanged(Core::IEditor *editor) { - if (editor == d->m_editable) { + if (editor == editableInterface()) { if (d->m_document->hasDecodingError()) { Core::EditorManager::instance()->showEditorInfoBar(QLatin1String(Constants::SELECT_ENCODING), tr("<b>Error:</b> Could not decode \"%1\" with \"%2\"-encoding. Editing not possible.") @@ -754,7 +754,7 @@ void BaseTextEditor::editorContentsChange(int position, int charsRemoved, int ch } if (doc->isRedoAvailable()) - emit d->m_editable->contentsChangedBecauseOfUndo(); + emit editableInterface()->contentsChangedBecauseOfUndo(); } @@ -2099,9 +2099,7 @@ bool BaseTextEditor::viewportEvent(QEvent *event) QPoint cursorPos = mapToGlobal(cursorRect(c).bottomRight() + QPoint(1,1)); cursorPos.setX(cursorPos.x() + d->m_extraArea->width()); - editableInterface(); // create if necessary - - emit d->m_editable->tooltipRequested(editableInterface(), cursorPos, c.position()); + emit editableInterface()->tooltipRequested(editableInterface(), cursorPos, c.position()); return true; } return QPlainTextEdit::viewportEvent(event); @@ -3700,7 +3698,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e) } } else if (d->m_marksVisible && e->button() == Qt::RightButton) { QMenu * contextMenu = new QMenu(this); - emit d->m_editable->markContextMenuRequested(editableInterface(), cursor.blockNumber() + 1, contextMenu); + emit editableInterface()->markContextMenuRequested(editableInterface(), cursor.blockNumber() + 1, contextMenu); if (!contextMenu->isEmpty()) contextMenu->exec(e->globalPos()); delete contextMenu; @@ -3738,7 +3736,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e) d->extraAreaToggleMarkBlockNumber = -1; if (cursor.blockNumber() == n) { int line = n + 1; - emit d->m_editable->markRequested(editableInterface(), line); + emit editableInterface()->markRequested(editableInterface(), line); } } } diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 1ad48289ae5..506090ae22b 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -315,7 +315,7 @@ public: , int at = -1) const; void convertPosition(int pos, int *line, int *column) const; - ITextEditable *editableInterface() const; + BaseTextEditorEditable *editableInterface() const; ITextMarkable *markableInterface() const; virtual void triggerCompletions(); -- GitLab