diff --git a/src/plugins/cppeditor/cppsnippetprovider.cpp b/src/plugins/cppeditor/cppsnippetprovider.cpp index 2d560363ab2f9a1407ed064c3b4b5083f0035173..7036959e9067f0fe02dc756423dedee5c033f0ac 100644 --- a/src/plugins/cppeditor/cppsnippetprovider.cpp +++ b/src/plugins/cppeditor/cppsnippetprovider.cpp @@ -62,7 +62,7 @@ QString CppSnippetProvider::displayName() const void CppSnippetProvider::decorateEditor(TextEditor::SnippetEditorWidget *editor) const { - editor->setSyntaxHighlighter(new CppHighlighter); + editor->textDocument()->setSyntaxHighlighter(new CppHighlighter); editor->textDocument()->setIndenter(new CppTools::CppQtStyleIndenter); editor->setAutoCompleter(new CppAutoCompleter); } diff --git a/src/plugins/projectexplorer/environmentitemswidget.cpp b/src/plugins/projectexplorer/environmentitemswidget.cpp index f0f90d9462aacde19bb7f0cccada42df58609ad0..19f6bd0e5481c605d25691bfbe44e7489409335a 100644 --- a/src/plugins/projectexplorer/environmentitemswidget.cpp +++ b/src/plugins/projectexplorer/environmentitemswidget.cpp @@ -71,7 +71,6 @@ EnvironmentItemsWidget::EnvironmentItemsWidget(QWidget *parent) : QWidget(parent), d(new EnvironmentItemsWidgetPrivate) { d->m_editor = new TextEditor::SnippetEditorWidget(this); - d->m_editor->textDocument()->setFontSettings(TextEditor::TextEditorSettings::fontSettings()); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(d->m_editor); } diff --git a/src/plugins/qmljseditor/qmljssnippetprovider.cpp b/src/plugins/qmljseditor/qmljssnippetprovider.cpp index 0766ff13e95c1aa5bc82359f54c6a517559621e6..c7e8b0cca629a757d74756b0ed083813bd90b9cb 100644 --- a/src/plugins/qmljseditor/qmljssnippetprovider.cpp +++ b/src/plugins/qmljseditor/qmljssnippetprovider.cpp @@ -64,7 +64,7 @@ QString QmlJSSnippetProvider::displayName() const void QmlJSSnippetProvider::decorateEditor(TextEditor::SnippetEditorWidget *editor) const { - editor->setSyntaxHighlighter(new Highlighter); + editor->textDocument()->setSyntaxHighlighter(new Highlighter); editor->textDocument()->setIndenter(new Indenter); editor->setAutoCompleter(new AutoCompleter); } diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 3f7bf287d622ddaef252d8665dfac816c448f8e9..8fd7015a363b879718a8fa2223b1513a5b525ae8 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()) { diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp index ebd5f493b57501b568a2898c9fefba502f8574bd..bc5f659b4b37c92845e2daf6457353148a42bc58 100644 --- a/src/plugins/texteditor/codestyleeditor.cpp +++ b/src/plugins/texteditor/codestyleeditor.cpp @@ -54,7 +54,6 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory, CodeStyleSelectorWidget *selector = new CodeStyleSelectorWidget(factory, this); selector->setCodeStyle(codeStyle); m_preview = new SnippetEditorWidget(this); - m_preview->textDocument()->setFontSettings(TextEditorSettings::fontSettings()); DisplaySettings displaySettings = m_preview->displaySettings(); displaySettings.m_visualizeWhitespace = true; m_preview->setDisplaySettings(displaySettings); diff --git a/src/plugins/texteditor/snippets/snippeteditor.cpp b/src/plugins/texteditor/snippets/snippeteditor.cpp index e43e578f83fd9074dbeafeaa6154500d81ce07f4..3d4dbe17d92222de744009ca55361bf35f04d29e 100644 --- a/src/plugins/texteditor/snippets/snippeteditor.cpp +++ b/src/plugins/texteditor/snippets/snippeteditor.cpp @@ -31,6 +31,7 @@ #include <texteditor/basetextdocument.h> #include <texteditor/texteditorconstants.h> +#include <texteditor/texteditorsettings.h> #include <utils/qtcassert.h> #include <QFocusEvent> @@ -44,28 +45,25 @@ namespace TextEditor { \ingroup Snippets */ -SnippetEditor::SnippetEditor() -{ - addContext(Constants::SNIPPET_EDITOR_ID); - setEditorCreator([]() { return new SnippetEditor; }); - setWidgetCreator([]() { return new SnippetEditorWidget; }); - setDocumentCreator([]() { return new BaseTextDocument(Constants::SNIPPET_EDITOR_ID); }); -} SnippetEditorWidget::SnippetEditorWidget(QWidget *parent) : BaseTextEditorWidget(parent) { + setSimpleTextDocument(TextEditor::Constants::SNIPPET_EDITOR_ID); + textDocument()->setFontSettings(TextEditorSettings::fontSettings()); + + // Should not be necessary in this case, but the base text editor + // implementation assumes a valid associated editor. + auto dummy = new BaseTextEditor; + dummy->addContext(Constants::SNIPPET_EDITOR_ID); + dummy->setEditorWidget(this); + setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); setHighlightCurrentLine(false); setLineNumbersVisible(false); setParenthesesMatchingEnabled(true); } -void SnippetEditorWidget::setSyntaxHighlighter(TextEditor::SyntaxHighlighter *highlighter) -{ - textDocument()->setSyntaxHighlighter(highlighter); -} - void SnippetEditorWidget::focusOutEvent(QFocusEvent *event) { if (event->reason() != Qt::ActiveWindowFocusReason && document()->isModified()) { diff --git a/src/plugins/texteditor/snippets/snippeteditor.h b/src/plugins/texteditor/snippets/snippeteditor.h index d563fd363f57350f9d9dfcf1c21f91c0f1e666af..1378129a1813d7af3ab6c06a8ad6e92df4228c2e 100644 --- a/src/plugins/texteditor/snippets/snippeteditor.h +++ b/src/plugins/texteditor/snippets/snippeteditor.h @@ -35,20 +35,6 @@ namespace TextEditor { -class SnippetEditorWidget; -class SyntaxHighlighter; -class Indenter; - -// Should not be necessary in this case, but the base text editor assumes a -// valid editable interface. -class TEXTEDITOR_EXPORT SnippetEditor : public BaseTextEditor -{ - Q_OBJECT - -public: - SnippetEditor(); -}; - class TEXTEDITOR_EXPORT SnippetEditorWidget : public BaseTextEditorWidget { Q_OBJECT @@ -56,8 +42,6 @@ class TEXTEDITOR_EXPORT SnippetEditorWidget : public BaseTextEditorWidget public: SnippetEditorWidget(QWidget *parent = 0); - void setSyntaxHighlighter(SyntaxHighlighter *highlighter); - signals: void snippetContentChanged(); @@ -68,6 +52,6 @@ protected: virtual BaseTextEditor *createEditor(); }; -} // TextEditor +} // namespace TextEditor #endif // SNIPPETEDITOR_H diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp index b9f3d47ecab70463a80d28445a702e68b0dcaa25..f10b67ab48b7599bd98893c4191046dd719c4b6d 100644 --- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp +++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp @@ -36,6 +36,7 @@ #include "ui_snippetssettingspage.h" #include <coreplugin/icore.h> +#include <texteditor/texteditorconstants.h> #include <texteditor/texteditorsettings.h> #include <extensionsystem/pluginmanager.h> #include <utils/headerviewstretcher.h> @@ -336,7 +337,6 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w) foreach (ISnippetProvider *provider, providers) { m_ui.groupCombo->addItem(provider->displayName(), provider->groupId()); SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w); - snippetEditor->textDocument()->setFontSettings(TextEditorSettings::fontSettings()); provider->decorateEditor(snippetEditor); m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor); connect(snippetEditor, SIGNAL(snippetContentChanged()), this, SLOT(setSnippetContent()));