From c5e43d86d12ce51c9035159a8acd86800fdf69bc Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 31 Jan 2019 13:16:44 +0100 Subject: Clang: Make diagnostic tooltips consistent Fix that triggering a diagnostic tooltip from the diagnostic location/range itself (underlined text) did not show the icon on the left and the actions/toolbuttons on the right in the tooltip. Instead of showing the tooltip content itself, request the tooltip for the corresponding text mark to get the extra decoration and actions. Change-Id: I5e94aca117a761f7a798d4f4b33db6e386e54d84 Reviewed-by: David Schulz Reviewed-by: Ivan Donchevskii --- src/plugins/clangcodemodel/clanghoverhandler.cpp | 42 ++++++++---------------- 1 file changed, 13 insertions(+), 29 deletions(-) (limited to 'src/plugins/clangcodemodel/clanghoverhandler.cpp') diff --git a/src/plugins/clangcodemodel/clanghoverhandler.cpp b/src/plugins/clangcodemodel/clanghoverhandler.cpp index da9f974adb..58f414d9f1 100644 --- a/src/plugins/clangcodemodel/clanghoverhandler.cpp +++ b/src/plugins/clangcodemodel/clanghoverhandler.cpp @@ -25,8 +25,9 @@ #include "clanghoverhandler.h" +#include "clangeditordocumentprocessor.h" + #include -#include #include #include #include @@ -61,32 +62,17 @@ static CppTools::BaseEditorDocumentProcessor *editorDocumentProcessor(TextEditor return nullptr; } -static bool editorDocumentProcessorHasDiagnosticAt(TextEditorWidget *editorWidget, int pos) +static TextMarks diagnosticTextMarksAt(TextEditorWidget *editorWidget, int position) { - if (CppTools::BaseEditorDocumentProcessor *processor = editorDocumentProcessor(editorWidget)) { - int line, column; - if (Utils::Text::convertPosition(editorWidget->document(), pos, &line, &column)) - return processor->hasDiagnosticsAt(line, column); - } + const auto processor = qobject_cast( + editorDocumentProcessor(editorWidget)); + QTC_ASSERT(processor, return TextMarks()); - return false; -} + int line, column; + const bool ok = Utils::Text::convertPosition(editorWidget->document(), position, &line, &column); + QTC_ASSERT(ok, return TextMarks()); -static void processWithEditorDocumentProcessor(TextEditorWidget *editorWidget, - const QPoint &point, - int position, - const Core::HelpItem &helpItem) -{ - if (CppTools::BaseEditorDocumentProcessor *processor = editorDocumentProcessor(editorWidget)) { - int line, column; - if (Utils::Text::convertPosition(editorWidget->document(), position, &line, &column)) { - auto layout = new QVBoxLayout; - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(2); - processor->addDiagnosticToolTipToLayout(line, column, layout); - Utils::ToolTip::show(point, layout, editorWidget, qVariantFromValue(helpItem)); - } - } + return processor->diagnosticTextMarksAt(line, column); } static QFuture editorDocumentHandlesToolTipInfo( @@ -189,7 +175,7 @@ void ClangHoverHandler::identifyMatch(TextEditorWidget *editorWidget, m_cursorPosition = -1; // Check for diagnostics (sync) - if (!isContextHelpRequest() && editorDocumentProcessorHasDiagnosticAt(editorWidget, pos)) { + if (!isContextHelpRequest() && !diagnosticTextMarksAt(editorWidget, pos).isEmpty()) { qCDebug(hoverLog) << "Checking for diagnostic at" << pos; setPriority(Priority_Diagnostic); m_cursorPosition = pos; @@ -275,10 +261,8 @@ void ClangHoverHandler::operateTooltip(TextEditor::TextEditorWidget *editorWidge const QPoint &point) { if (priority() == Priority_Diagnostic) { - processWithEditorDocumentProcessor(editorWidget, - point, - m_cursorPosition, - lastHelpItemIdentified()); + const TextMarks textMarks = diagnosticTextMarksAt(editorWidget, m_cursorPosition); + editorWidget->showTextMarksToolTip(point, textMarks); return; } -- cgit v1.2.1