aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor/basetexteditor.cpp
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2014-08-20 23:04:08 +0200
committerChristian Stenger <christian.stenger@digia.com>2014-08-21 07:36:17 +0200
commitba5124052456601e0942a3c4ac48bfe1623c58f0 (patch)
treeb5934839d961c20e16a70bb09b918563d61b432b /src/plugins/texteditor/basetexteditor.cpp
parent208865dd0a711919b27c93e45ee19b6e71cd7a31 (diff)
TextEditor: Fix snippet editor crash introduced in d85a4f615
The SnippetEditorWidget setup is unusual as it doesn't have an associated SnippetEditorFactory/SnippetEditor creation chain and requires manual intervention. This was lost in the conversion to the new construction scheme. Change-Id: I0919295603432e525c2abd0da762acc8207f996c Reviewed-by: Christian Stenger <christian.stenger@digia.com>
Diffstat (limited to 'src/plugins/texteditor/basetexteditor.cpp')
-rw-r--r--src/plugins/texteditor/basetexteditor.cpp97
1 files changed, 49 insertions, 48 deletions
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 3f7bf287d6..8fd7015a36 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -185,6 +185,47 @@ private:
QSizeF m_size;
};
+class TextEditExtraArea : public QWidget
+{
+public:
+ TextEditExtraArea(BaseTextEditorWidget *edit)
+ : QWidget(edit)
+ {
+ textEdit = edit;
+ setAutoFillBackground(true);
+ }
+
+protected:
+ QSize sizeHint() const {
+ return QSize(textEdit->extraAreaWidth(), 0);
+ }
+ void paintEvent(QPaintEvent *event) {
+ textEdit->extraAreaPaintEvent(event);
+ }
+ void mousePressEvent(QMouseEvent *event) {
+ textEdit->extraAreaMouseEvent(event);
+ }
+ void mouseMoveEvent(QMouseEvent *event) {
+ textEdit->extraAreaMouseEvent(event);
+ }
+ void mouseReleaseEvent(QMouseEvent *event) {
+ textEdit->extraAreaMouseEvent(event);
+ }
+ void leaveEvent(QEvent *event) {
+ textEdit->extraAreaLeaveEvent(event);
+ }
+ void contextMenuEvent(QContextMenuEvent *event) {
+ textEdit->extraAreaContextMenuEvent(event);
+ }
+
+ void wheelEvent(QWheelEvent *event) {
+ QCoreApplication::sendEvent(textEdit->viewport(), event);
+ }
+
+private:
+ BaseTextEditorWidget *textEdit;
+};
+
class BaseTextEditorPrivate
{
public:
@@ -460,6 +501,9 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate(BaseTextEditorWidget *p
aggregate->add(baseTextFind);
aggregate->add(q);
+ m_extraArea = new TextEditExtraArea(q);
+ m_extraArea->setMouseTracking(true);
+
m_stretchWidget = new QWidget;
m_stretchWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_toolBar = new QToolBar;
@@ -485,47 +529,6 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate(BaseTextEditorWidget *p
});
}
-class TextEditExtraArea : public QWidget
-{
-public:
- TextEditExtraArea(BaseTextEditorWidget *edit)
- : QWidget(edit)
- {
- textEdit = edit;
- setAutoFillBackground(true);
- }
-
-protected:
- QSize sizeHint() const {
- return QSize(textEdit->extraAreaWidth(), 0);
- }
- void paintEvent(QPaintEvent *event) {
- textEdit->extraAreaPaintEvent(event);
- }
- void mousePressEvent(QMouseEvent *event) {
- textEdit->extraAreaMouseEvent(event);
- }
- void mouseMoveEvent(QMouseEvent *event) {
- textEdit->extraAreaMouseEvent(event);
- }
- void mouseReleaseEvent(QMouseEvent *event) {
- textEdit->extraAreaMouseEvent(event);
- }
- void leaveEvent(QEvent *event) {
- textEdit->extraAreaLeaveEvent(event);
- }
- void contextMenuEvent(QContextMenuEvent *event) {
- textEdit->extraAreaContextMenuEvent(event);
- }
-
- void wheelEvent(QWheelEvent *event) {
- QCoreApplication::sendEvent(textEdit->viewport(), event);
- }
-
-private:
- BaseTextEditorWidget *textEdit;
-};
-
} // namespace Internal
using namespace Internal;
@@ -566,6 +569,9 @@ static const char kTextBlockMimeType[] = "application/vnd.qtcreator.blocktext";
BaseTextEditorWidget::BaseTextEditorWidget(QWidget *parent)
: QPlainTextEdit(parent)
{
+ // "Needed", as the creation below triggers ChildEvents that are
+ // passed to this object's event() which uses 'd'.
+ d = 0;
d = new BaseTextEditorWidgetPrivate(this);
}
@@ -576,8 +582,6 @@ void BaseTextEditorWidget::setTextDocument(const QSharedPointer<BaseTextDocument
void BaseTextEditorWidgetPrivate::ctor(const QSharedPointer<BaseTextDocument> &doc)
{
- m_extraArea = new TextEditExtraArea(q);
- m_extraArea->setMouseTracking(true);
q->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
m_overlay = new TextEditorOverlay(q);
@@ -2482,12 +2486,9 @@ void BaseTextEditorWidget::convertPosition(int pos, int *line, int *column) cons
bool BaseTextEditorWidget::event(QEvent *e)
{
-#if QT_VERSION >= 0x050000
- if (e->type() != QEvent::InputMethodQuery)
+ // FIXME: That's far too heavy, and triggers e.g for ChildEvent
+ if (d && e->type() != QEvent::InputMethodQuery)
d->m_contentsChanged = false;
-#else
- d->m_contentsChanged = false;
-#endif
switch (e->type()) {
case QEvent::ShortcutOverride:
if (static_cast<QKeyEvent*>(e)->key() == Qt::Key_Escape && d->m_snippetOverlay->isVisible()) {