diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-01-18 10:47:45 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-01-19 13:57:57 +0000 |
commit | 0a4073ef90cb61400856ead7c137064096694b6a (patch) | |
tree | db37a4246ce5365b9c7d04f9b5474728585b3064 /src/plugins/texteditor | |
parent | 2d7f1d6c8cf5c9be01d12bd71dbf05da6ce7c3d6 (diff) |
TextEditor: Return hover handler priority by callback
...to get rid of the asynchronous code path.
Change-Id: I56377510440631b0be712333b2a4018717c86389
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/texteditor')
-rw-r--r-- | src/plugins/texteditor/basehoverhandler.cpp | 30 | ||||
-rw-r--r-- | src/plugins/texteditor/basehoverhandler.h | 14 | ||||
-rw-r--r-- | src/plugins/texteditor/colorpreviewhoverhandler.cpp | 7 | ||||
-rw-r--r-- | src/plugins/texteditor/colorpreviewhoverhandler.h | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 6 |
5 files changed, 19 insertions, 40 deletions
diff --git a/src/plugins/texteditor/basehoverhandler.cpp b/src/plugins/texteditor/basehoverhandler.cpp index 86d8eb0bbcd..10a532bcc11 100644 --- a/src/plugins/texteditor/basehoverhandler.cpp +++ b/src/plugins/texteditor/basehoverhandler.cpp @@ -26,6 +26,7 @@ #include "basehoverhandler.h" #include "texteditor.h" +#include <utils/executeondestruction.h> #include <utils/qtcassert.h> #include <utils/tooltip/tooltip.h> @@ -34,11 +35,6 @@ namespace TextEditor { BaseHoverHandler::~BaseHoverHandler() {} -bool BaseHoverHandler::isAsyncHandler() const -{ - return m_isAsyncHandler; -} - void BaseHoverHandler::showToolTip(TextEditorWidget *widget, const QPoint &point, bool decorate) { if (decorate) @@ -55,11 +51,6 @@ void BaseHoverHandler::checkPriority(TextEditorWidget *widget, process(widget, pos, report); } -void BaseHoverHandler::cancelAsyncCheck() -{ - QTC_CHECK(false && "BaseHoverHandler: Implement cancelCheck() in derived class!"); -} - int BaseHoverHandler::priority() const { if (m_priority >= 0) @@ -117,31 +108,18 @@ void BaseHoverHandler::process(TextEditorWidget *widget, int pos, ReportPriority m_priority = -1; m_lastHelpItemIdentified = HelpItem(); - if (m_isAsyncHandler) { - identifyMatchAsync(widget, pos, report); - } else { - identifyMatch(widget, pos); - report(priority()); - } + identifyMatch(widget, pos, report); } -void BaseHoverHandler::setIsAsyncHandler(bool isAsyncHandler) +void BaseHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report) { - m_isAsyncHandler = isAsyncHandler; -} + Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); }); -void BaseHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos) -{ QString tooltip = editorWidget->extraSelectionTooltip(pos); if (!tooltip.isEmpty()) setToolTip(tooltip); } -void BaseHoverHandler::identifyMatchAsync(TextEditorWidget *, int, BaseHoverHandler::ReportPriority) -{ - QTC_CHECK(false && "BaseHoverHandler: Implement identifyMatchAsync() in derived class!"); -} - void BaseHoverHandler::decorateToolTip() { if (Qt::mightBeRichText(toolTip())) diff --git a/src/plugins/texteditor/basehoverhandler.h b/src/plugins/texteditor/basehoverhandler.h index cdd8735264b..4c3638c4e49 100644 --- a/src/plugins/texteditor/basehoverhandler.h +++ b/src/plugins/texteditor/basehoverhandler.h @@ -43,14 +43,11 @@ class TEXTEDITOR_EXPORT BaseHoverHandler public: virtual ~BaseHoverHandler(); - bool isAsyncHandler() const; - void setIsAsyncHandler(bool isAsyncHandler); - QString contextHelpId(TextEditorWidget *widget, int pos); using ReportPriority = std::function<void(int priority)>; void checkPriority(TextEditorWidget *widget, int pos, ReportPriority report); - virtual void cancelAsyncCheck(); + virtual void abort() {} // Implement for asynchronous priority reporter void showToolTip(TextEditorWidget *widget, const QPoint &point, bool decorate = true); @@ -70,16 +67,17 @@ protected: void setLastHelpItemIdentified(const HelpItem &help); const HelpItem &lastHelpItemIdentified() const; - virtual void identifyMatch(TextEditorWidget *editorWidget, int pos); - virtual void identifyMatchAsync(TextEditorWidget *editorWidget, int pos, ReportPriority report); + // 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()); }); + // at the beginning of an implementation to ensure this in any case. + virtual void identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report); virtual void decorateToolTip(); virtual void operateTooltip(TextEditorWidget *editorWidget, const QPoint &point); private: void process(TextEditorWidget *widget, int pos, ReportPriority report); - bool m_isAsyncHandler = false; - QString m_toolTip; HelpItem m_lastHelpItemIdentified; int m_priority = -1; diff --git a/src/plugins/texteditor/colorpreviewhoverhandler.cpp b/src/plugins/texteditor/colorpreviewhoverhandler.cpp index c6ca5947d00..6a6f4e20dd9 100644 --- a/src/plugins/texteditor/colorpreviewhoverhandler.cpp +++ b/src/plugins/texteditor/colorpreviewhoverhandler.cpp @@ -27,6 +27,7 @@ #include "texteditor.h" #include <coreplugin/icore.h> +#include <utils/executeondestruction.h> #include <utils/tooltip/tooltip.h> #include <utils/qtcassert.h> @@ -355,8 +356,12 @@ static QColor colorFromFuncAndArgs(const QString &func, const QStringList &args) return colorFromArgs(args, spec); } -void ColorPreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos) +void ColorPreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget, + int pos, + ReportPriority report) { + Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); }); + if (editorWidget->extraSelectionTooltip(pos).isEmpty()) { const QTextBlock tb = editorWidget->document()->findBlock(pos); const int tbpos = pos - tb.position(); diff --git a/src/plugins/texteditor/colorpreviewhoverhandler.h b/src/plugins/texteditor/colorpreviewhoverhandler.h index 8677bf009a2..ee8db3f93f4 100644 --- a/src/plugins/texteditor/colorpreviewhoverhandler.h +++ b/src/plugins/texteditor/colorpreviewhoverhandler.h @@ -39,7 +39,7 @@ class TextEditorWidget; class TEXTEDITOR_EXPORT ColorPreviewHoverHandler : public BaseHoverHandler { private: - void identifyMatch(TextEditorWidget *editorWidget, int pos) override; + void identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report) override; void operateTooltip(TextEditorWidget *editorWidget, const QPoint &point) override; QColor m_colorTip; diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 505c4325aec..ee7e0a9861e 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -314,10 +314,8 @@ public: } // Cancel currently running checks - for (BaseHoverHandler *handler : m_handlers) { - if (handler->isAsyncHandler()) - handler->cancelAsyncCheck(); - } + for (BaseHoverHandler *handler : m_handlers) + handler->abort(); // Update invocation data m_documentRevision = documentRevision; |