aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-01-18 10:47:45 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-01-19 13:57:57 +0000
commit0a4073ef90cb61400856ead7c137064096694b6a (patch)
treedb37a4246ce5365b9c7d04f9b5474728585b3064 /src/plugins/texteditor
parent2d7f1d6c8cf5c9be01d12bd71dbf05da6ce7c3d6 (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.cpp30
-rw-r--r--src/plugins/texteditor/basehoverhandler.h14
-rw-r--r--src/plugins/texteditor/colorpreviewhoverhandler.cpp7
-rw-r--r--src/plugins/texteditor/colorpreviewhoverhandler.h2
-rw-r--r--src/plugins/texteditor/texteditor.cpp6
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;