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