diff options
-rw-r--r-- | src/plugins/coreplugin/locator/javascriptfilter.cpp | 20 | ||||
-rw-r--r-- | src/plugins/coreplugin/locator/javascriptfilter.h | 4 |
2 files changed, 14 insertions, 10 deletions
diff --git a/src/plugins/coreplugin/locator/javascriptfilter.cpp b/src/plugins/coreplugin/locator/javascriptfilter.cpp index a4c20e7a7e3..6f88a9188a2 100644 --- a/src/plugins/coreplugin/locator/javascriptfilter.cpp +++ b/src/plugins/coreplugin/locator/javascriptfilter.cpp @@ -28,7 +28,6 @@ #include <QClipboard> #include <QGuiApplication> #include <QScriptEngine> -#include <QTimer> namespace Core { namespace Internal { @@ -45,6 +44,13 @@ JavaScriptFilter::JavaScriptFilter() setDisplayName(tr("Evaluate JavaScript")); setIncludedByDefault(false); setShortcutString("="); + m_abortTimer.setSingleShot(true); + m_abortTimer.setInterval(1000); + connect(&m_abortTimer, &QTimer::timeout, this, [this] { + m_aborted = true; + if (m_engine && m_engine->isEvaluating()) + m_engine->abortEvaluation(); + }); } JavaScriptFilter::~JavaScriptFilter() @@ -57,6 +63,8 @@ void JavaScriptFilter::prepareSearch(const QString &entry) if (!m_engine) setupEngine(); + m_aborted = false; + m_abortTimer.start(); } QList<LocatorFilterEntry> JavaScriptFilter::matchesFor( @@ -68,16 +76,8 @@ QList<LocatorFilterEntry> JavaScriptFilter::matchesFor( if (entry.trimmed().isEmpty()) { entries.append({this, tr("Reset Engine"), QVariant(ResetEngine, nullptr)}); } else { - bool aborted = false; - - QTimer::singleShot(1000, this, [this, &aborted]() { - m_engine->abortEvaluation(); - aborted = true; - }); - const QString result = m_engine->evaluate(entry).toString(); - - if (aborted) { + if (m_aborted) { const QString message = entry + " = " + tr("Engine aborted after timeout."); entries.append({this, message, QVariant(AbortEngine, nullptr)}); } else { diff --git a/src/plugins/coreplugin/locator/javascriptfilter.h b/src/plugins/coreplugin/locator/javascriptfilter.h index 025ce2fa6a0..feaf326036b 100644 --- a/src/plugins/coreplugin/locator/javascriptfilter.h +++ b/src/plugins/coreplugin/locator/javascriptfilter.h @@ -27,6 +27,8 @@ #include <coreplugin/locator/ilocatorfilter.h> +#include <QTimer> + #include <memory> QT_BEGIN_NAMESPACE @@ -54,6 +56,8 @@ private: void setupEngine(); mutable std::unique_ptr<QScriptEngine> m_engine; + QTimer m_abortTimer; + bool m_aborted = false; }; } // namespace Internal |