diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp index e4f0388ca06..1d290b2cf17 100644 --- a/src/plugins/glsleditor/glsleditor.cpp +++ b/src/plugins/glsleditor/glsleditor.cpp @@ -56,8 +56,10 @@ #include #include +#include #include #include +#include #include #include @@ -168,6 +170,7 @@ public: private: void updateDocumentNow(); void setSelectedElements(); + void onTooltipRequested(const QPoint &point, int pos); QString wordUnderCursor() const; QTimer m_updateDocumentTimer; @@ -207,6 +210,8 @@ GlslEditorWidget::GlslEditorWidget() m_outlineCombo->setSizePolicy(policy); insertExtraToolBarWidget(TextEditorWidget::Left, m_outlineCombo); + + connect(this, &TextEditorWidget::tooltipRequested, this, &GlslEditorWidget::onTooltipRequested); } int GlslEditorWidget::editorRevision() const @@ -303,6 +308,26 @@ void GlslEditorWidget::updateDocumentNow() } } +void GlslEditorWidget::onTooltipRequested(const QPoint &point, int pos) +{ + QTC_ASSERT(m_glslDocument && m_glslDocument->engine(), return); + const int lineno = document()->findBlock(pos).blockNumber() + 1; + const QStringList messages + = Utils::transform( + Utils::filtered(m_glslDocument->engine()->diagnosticMessages(), + [lineno](const DiagnosticMessage &msg) { + return msg.line() == lineno; + }), + [](const DiagnosticMessage &msg) { + return msg.message(); + }); + + if (!messages.isEmpty()) + Utils::ToolTip::show(point, messages.join("
"), this); + else + Utils::ToolTip::hide(); +} + int languageVariant(const QString &type) { int variant = 0;