diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/texteditor/basehoverhandler.cpp | 23 | ||||
-rw-r--r-- | src/plugins/texteditor/basehoverhandler.h | 8 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 5 |
3 files changed, 27 insertions, 9 deletions
diff --git a/src/plugins/texteditor/basehoverhandler.cpp b/src/plugins/texteditor/basehoverhandler.cpp index 10a532bcc1..3b5edef2ee 100644 --- a/src/plugins/texteditor/basehoverhandler.cpp +++ b/src/plugins/texteditor/basehoverhandler.cpp @@ -70,16 +70,16 @@ void BaseHoverHandler::setPriority(int priority) m_priority = priority; } -QString BaseHoverHandler::contextHelpId(TextEditorWidget *widget, int pos) +void BaseHoverHandler::contextHelpId(TextEditorWidget *widget, + int pos, + const Core::IContext::HelpIdCallback &callback) { // If the tooltip is visible and there is a help match, this match is used to update // the help id. Otherwise, let the identification process happen. if (!Utils::ToolTip::isVisible() || !lastHelpItemIdentified().isValid()) - process(widget, pos, [](int){}); - - if (lastHelpItemIdentified().isValid()) - return lastHelpItemIdentified().helpId(); - return QString(); + process(widget, pos, [this, widget, callback](int) { propagateHelpId(widget, callback); }); + else + propagateHelpId(widget, callback); } void BaseHoverHandler::setToolTip(const QString &tooltip) @@ -102,6 +102,17 @@ const HelpItem &BaseHoverHandler::lastHelpItemIdentified() const return m_lastHelpItemIdentified; } +void BaseHoverHandler::propagateHelpId(TextEditorWidget *widget, + const Core::IContext::HelpIdCallback &callback) +{ + QString id; + if (lastHelpItemIdentified().isValid()) + id = lastHelpItemIdentified().helpId(); + + widget->setContextHelpId(id); + callback(id); +} + void BaseHoverHandler::process(TextEditorWidget *widget, int pos, ReportPriority report) { m_toolTip.clear(); diff --git a/src/plugins/texteditor/basehoverhandler.h b/src/plugins/texteditor/basehoverhandler.h index 4c3638c4e4..bc8d3e3e1d 100644 --- a/src/plugins/texteditor/basehoverhandler.h +++ b/src/plugins/texteditor/basehoverhandler.h @@ -28,6 +28,8 @@ #include "texteditor_global.h" #include "helpitem.h" +#include <coreplugin/icontext.h> + #include <functional> QT_BEGIN_NAMESPACE @@ -43,7 +45,9 @@ class TEXTEDITOR_EXPORT BaseHoverHandler public: virtual ~BaseHoverHandler(); - QString contextHelpId(TextEditorWidget *widget, int pos); + void contextHelpId(TextEditorWidget *widget, + int pos, + const Core::IContext::HelpIdCallback &callback); using ReportPriority = std::function<void(int priority)>; void checkPriority(TextEditorWidget *widget, int pos, ReportPriority report); @@ -67,6 +71,8 @@ protected: void setLastHelpItemIdentified(const HelpItem &help); const HelpItem &lastHelpItemIdentified() const; + void propagateHelpId(TextEditorWidget *widget, const Core::IContext::HelpIdCallback &callback); + // identifyMatch() is required to report a priority by using the "report" callback. // It is recommended to use e.g. // Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); }); diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index ee7e0a9861..2e5aa9dd5f 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -7925,8 +7925,9 @@ void BaseTextEditor::setContextHelpId(const QString &id) void TextEditorWidget::contextHelpId(const IContext::HelpIdCallback &callback) { if (d->m_contextHelpId.isEmpty() && !d->m_hoverHandlers.isEmpty()) - d->m_contextHelpId = d->m_hoverHandlers.first()->contextHelpId(this, textCursor().position()); - callback(d->m_contextHelpId); + d->m_hoverHandlers.first()->contextHelpId(this, textCursor().position(), callback); + else + callback(d->m_contextHelpId); } void TextEditorWidget::setContextHelpId(const QString &id) |