diff --git a/runners/calculator/calculatorrunner.cpp b/runners/calculator/calculatorrunner.cpp index a63bb8f57..7883ce77a 100644 --- a/runners/calculator/calculatorrunner.cpp +++ b/runners/calculator/calculatorrunner.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -21,11 +22,11 @@ K_PLUGIN_CLASS_WITH_JSON(CalculatorRunner, "plasma-runner-calculator.json") +static QMutex s_initMutex; + CalculatorRunner::CalculatorRunner(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args) : Plasma::AbstractRunner(parent, metaData, args) { - m_engine = new QalculateEngine; - setObjectName(QStringLiteral("Calculator")); QString description = i18n( @@ -41,7 +42,6 @@ CalculatorRunner::CalculatorRunner(QObject *parent, const KPluginMetaData &metaD CalculatorRunner::~CalculatorRunner() { - delete m_engine; } void CalculatorRunner::userFriendlySubstitutions(QString &cmd) @@ -137,8 +137,14 @@ void CalculatorRunner::match(Plasma::RunnerContext &context) QString CalculatorRunner::calculate(const QString &term, bool *isApproximate) { - QString result; + { + QMutexLocker lock(&s_initMutex); + if (!m_engine) { + m_engine = std::make_unique(); + } + } + QString result; try { result = m_engine->evaluate(term, isApproximate); } catch (std::exception &e) { diff --git a/runners/calculator/calculatorrunner.h b/runners/calculator/calculatorrunner.h index 2bc0500f6..3e53c338f 100644 --- a/runners/calculator/calculatorrunner.h +++ b/runners/calculator/calculatorrunner.h @@ -37,6 +37,6 @@ private: void userFriendlyMultiplication(QString &cmd); void userFriendlySubstitutions(QString &cmd); - QalculateEngine *m_engine; + std::unique_ptr m_engine; QList m_actions; }; diff --git a/runners/calculator/qalculate_engine.h b/runners/calculator/qalculate_engine.h index 053c2f664..d2afecb88 100644 --- a/runners/calculator/qalculate_engine.h +++ b/runners/calculator/qalculate_engine.h @@ -32,10 +32,6 @@ public Q_SLOTS: protected Q_SLOTS: void updateResult(KJob *); -Q_SIGNALS: - void resultReady(const QString &); - void formattedResultReady(const QString &); - private: QString m_lastResult; static QAtomicInt s_counter;