Locator: Use QJSEngine for script locator filter

QJSEngine is interruptible since Qt 5.14. Make that the requirement for
the script locator filter and remove (optional) dependency on QtScript.

Change-Id: I3d6df04571441ddf152a213f0053c46e3cb317fa
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Eike Ziller
2020-03-04 09:22:04 +01:00
parent 995ba78fae
commit 7a3f5edfaf
5 changed files with 12 additions and 15 deletions

View File

@@ -179,9 +179,8 @@ extend_qtc_plugin(Core
) )
extend_qtc_plugin(Core extend_qtc_plugin(Core
CONDITION TARGET Qt5::Script CONDITION Qt5_VERSION VERSION_GREATER_EQUAL 5.14.0
FEATURE_INFO "Script Locator filter" FEATURE_INFO "Script Locator filter"
DEPENDS Qt5::Script
DEFINES WITH_JAVASCRIPTFILTER DEFINES WITH_JAVASCRIPTFILTER
SOURCES SOURCES
locator/javascriptfilter.cpp locator/javascriptfilter.h locator/javascriptfilter.cpp locator/javascriptfilter.h

View File

@@ -1,5 +1,6 @@
import qbs 1.0 import qbs 1.0
import qbs.FileInfo import qbs.FileInfo
import qbs.Utilities
Project { Project {
name: "Core" name: "Core"
@@ -17,15 +18,13 @@ Project {
condition: qbs.targetOS.contains("windows") condition: qbs.targetOS.contains("windows")
} }
Depends { name: "Qt.script"; required: false }
Depends { name: "Utils" } Depends { name: "Utils" }
Depends { name: "Aggregation" } Depends { name: "Aggregation" }
Depends { name: "app_version_header" } Depends { name: "app_version_header" }
Properties { Properties {
condition: Qt.script.present condition: Utilities.versionCompare(Qt.qml.version, "5.14.0") >= 0
cpp.defines: base.concat("WITH_JAVASCRIPTFILTER") cpp.defines: base.concat("WITH_JAVASCRIPTFILTER")
} }
@@ -379,7 +378,7 @@ Project {
Group { Group {
name: "Locator Javascript Filter" name: "Locator Javascript Filter"
condition: Qt.script.present condition: Utilities.versionCompare(Qt.qml.version, "5.14.0") >= 0
prefix: "locator/" prefix: "locator/"
files: [ files: [
"javascriptfilter.cpp", "javascriptfilter.cpp",

View File

@@ -27,7 +27,7 @@
#include <QClipboard> #include <QClipboard>
#include <QGuiApplication> #include <QGuiApplication>
#include <QScriptEngine> #include <QJSEngine>
namespace Core { namespace Core {
namespace Internal { namespace Internal {
@@ -48,8 +48,8 @@ JavaScriptFilter::JavaScriptFilter()
m_abortTimer.setInterval(1000); m_abortTimer.setInterval(1000);
connect(&m_abortTimer, &QTimer::timeout, this, [this] { connect(&m_abortTimer, &QTimer::timeout, this, [this] {
m_aborted = true; m_aborted = true;
if (m_engine && m_engine->isEvaluating()) if (m_engine)
m_engine->abortEvaluation(); m_engine->setInterrupted(true);
}); });
} }
@@ -63,6 +63,7 @@ void JavaScriptFilter::prepareSearch(const QString &entry)
if (!m_engine) if (!m_engine)
setupEngine(); setupEngine();
m_engine->setInterrupted(false);
m_aborted = false; m_aborted = false;
m_abortTimer.start(); m_abortTimer.start();
} }
@@ -118,7 +119,7 @@ void JavaScriptFilter::refresh(QFutureInterface<void> &future)
void JavaScriptFilter::setupEngine() void JavaScriptFilter::setupEngine()
{ {
m_engine.reset(new QScriptEngine); m_engine.reset(new QJSEngine);
m_engine->evaluate( m_engine->evaluate(
"function abs(x) { return Math.abs(x); }\n" "function abs(x) { return Math.abs(x); }\n"
"function acos(x) { return Math.acos(x); }\n" "function acos(x) { return Math.acos(x); }\n"

View File

@@ -32,7 +32,7 @@
#include <memory> #include <memory>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QScriptEngine; class QJSEngine;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Core { namespace Core {
@@ -55,7 +55,7 @@ public:
private: private:
void setupEngine(); void setupEngine();
mutable std::unique_ptr<QScriptEngine> m_engine; mutable std::unique_ptr<QJSEngine> m_engine;
QTimer m_abortTimer; QTimer m_abortTimer;
bool m_aborted = false; bool m_aborted = false;
}; };

View File

@@ -38,9 +38,7 @@ SOURCES += \
FORMS += \ FORMS += \
$$PWD/urllocatorfilter.ui $$PWD/urllocatorfilter.ui
qtHaveModule(script) { minQtVersion(5, 14, 0) {
QT *= script
DEFINES += WITH_JAVASCRIPTFILTER DEFINES += WITH_JAVASCRIPTFILTER
HEADERS += \ HEADERS += \