forked from qt-creator/qt-creator
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:
@@ -179,9 +179,8 @@ 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"
|
||||
DEPENDS Qt5::Script
|
||||
DEFINES WITH_JAVASCRIPTFILTER
|
||||
SOURCES
|
||||
locator/javascriptfilter.cpp locator/javascriptfilter.h
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import qbs 1.0
|
||||
import qbs.FileInfo
|
||||
import qbs.Utilities
|
||||
|
||||
Project {
|
||||
name: "Core"
|
||||
@@ -17,15 +18,13 @@ Project {
|
||||
condition: qbs.targetOS.contains("windows")
|
||||
}
|
||||
|
||||
Depends { name: "Qt.script"; required: false }
|
||||
|
||||
Depends { name: "Utils" }
|
||||
Depends { name: "Aggregation" }
|
||||
|
||||
Depends { name: "app_version_header" }
|
||||
|
||||
Properties {
|
||||
condition: Qt.script.present
|
||||
condition: Utilities.versionCompare(Qt.qml.version, "5.14.0") >= 0
|
||||
cpp.defines: base.concat("WITH_JAVASCRIPTFILTER")
|
||||
}
|
||||
|
||||
@@ -379,7 +378,7 @@ Project {
|
||||
|
||||
Group {
|
||||
name: "Locator Javascript Filter"
|
||||
condition: Qt.script.present
|
||||
condition: Utilities.versionCompare(Qt.qml.version, "5.14.0") >= 0
|
||||
prefix: "locator/"
|
||||
files: [
|
||||
"javascriptfilter.cpp",
|
||||
|
@@ -27,7 +27,7 @@
|
||||
|
||||
#include <QClipboard>
|
||||
#include <QGuiApplication>
|
||||
#include <QScriptEngine>
|
||||
#include <QJSEngine>
|
||||
|
||||
namespace Core {
|
||||
namespace Internal {
|
||||
@@ -48,8 +48,8 @@ JavaScriptFilter::JavaScriptFilter()
|
||||
m_abortTimer.setInterval(1000);
|
||||
connect(&m_abortTimer, &QTimer::timeout, this, [this] {
|
||||
m_aborted = true;
|
||||
if (m_engine && m_engine->isEvaluating())
|
||||
m_engine->abortEvaluation();
|
||||
if (m_engine)
|
||||
m_engine->setInterrupted(true);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ void JavaScriptFilter::prepareSearch(const QString &entry)
|
||||
|
||||
if (!m_engine)
|
||||
setupEngine();
|
||||
m_engine->setInterrupted(false);
|
||||
m_aborted = false;
|
||||
m_abortTimer.start();
|
||||
}
|
||||
@@ -118,7 +119,7 @@ void JavaScriptFilter::refresh(QFutureInterface<void> &future)
|
||||
|
||||
void JavaScriptFilter::setupEngine()
|
||||
{
|
||||
m_engine.reset(new QScriptEngine);
|
||||
m_engine.reset(new QJSEngine);
|
||||
m_engine->evaluate(
|
||||
"function abs(x) { return Math.abs(x); }\n"
|
||||
"function acos(x) { return Math.acos(x); }\n"
|
||||
|
@@ -32,7 +32,7 @@
|
||||
#include <memory>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QScriptEngine;
|
||||
class QJSEngine;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Core {
|
||||
@@ -55,7 +55,7 @@ public:
|
||||
private:
|
||||
void setupEngine();
|
||||
|
||||
mutable std::unique_ptr<QScriptEngine> m_engine;
|
||||
mutable std::unique_ptr<QJSEngine> m_engine;
|
||||
QTimer m_abortTimer;
|
||||
bool m_aborted = false;
|
||||
};
|
||||
|
@@ -38,9 +38,7 @@ SOURCES += \
|
||||
FORMS += \
|
||||
$$PWD/urllocatorfilter.ui
|
||||
|
||||
qtHaveModule(script) {
|
||||
QT *= script
|
||||
|
||||
minQtVersion(5, 14, 0) {
|
||||
DEFINES += WITH_JAVASCRIPTFILTER
|
||||
|
||||
HEADERS += \
|
||||
|
Reference in New Issue
Block a user