diff --git a/src/akonadicontrol/agentmanager.cpp b/src/akonadicontrol/agentmanager.cpp --- a/src/akonadicontrol/agentmanager.cpp +++ b/src/akonadicontrol/agentmanager.cpp @@ -539,7 +539,7 @@ } if (agentInfo.launchMethod == AgentType::Process) { - const QString executable = QStandardPaths::findExecutable(agentInfo.exec); + const QString executable = Akonadi::StandardDirs::findExecutable(agentInfo.exec); if (executable.isEmpty()) { qCWarning(AKONADICONTROL_LOG) << "Executable" << agentInfo.exec << "for agent" << agentInfo.identifier << "could not be found!"; continue; diff --git a/src/akonadicontrol/agentprocessinstance.cpp b/src/akonadicontrol/agentprocessinstance.cpp --- a/src/akonadicontrol/agentprocessinstance.cpp +++ b/src/akonadicontrol/agentprocessinstance.cpp @@ -22,6 +22,7 @@ #include "agenttype.h" #include "processcontrol.h" #include "akonadicontrol_debug.h" +#include "private/standarddirs_p.h" #include @@ -45,7 +46,7 @@ agentInfo.launchMethod == AgentType::Launcher); const QString executable = (agentInfo.launchMethod == AgentType::Process) - ? QStandardPaths::findExecutable(agentInfo.exec) : agentInfo.exec; + ? Akonadi::StandardDirs::findExecutable(agentInfo.exec) : agentInfo.exec; if (executable.isEmpty()) { qCWarning(AKONADICONTROL_LOG) << "Unable to find agent executable" << agentInfo.exec; @@ -61,7 +62,7 @@ } else { Q_ASSERT(agentInfo.launchMethod == AgentType::Launcher); const QStringList arguments = QStringList() << executable << identifier(); - const QString agentLauncherExec = QStandardPaths::findExecutable(QStringLiteral("akonadi_agent_launcher")); + const QString agentLauncherExec = Akonadi::StandardDirs::findExecutable(QStringLiteral("akonadi_agent_launcher")); mController->start(agentLauncherExec, arguments); } return true; diff --git a/src/private/standarddirs.cpp b/src/private/standarddirs.cpp --- a/src/private/standarddirs.cpp +++ b/src/private/standarddirs.cpp @@ -22,6 +22,7 @@ #include "instance_p.h" #include "akonadi-prefix.h" +#include #include #include #include @@ -186,3 +187,12 @@ } return dirs; } + +QString StandardDirs::findExecutable(const QString &executableName) +{ + QString executable = QStandardPaths::findExecutable(executableName, {qApp->applicationDirPath()}); + if (executable.isEmpty()) { + executable = QStandardPaths::findExecutable(executableName); + } + return executable; +} diff --git a/src/private/standarddirs_p.h b/src/private/standarddirs_p.h --- a/src/private/standarddirs_p.h +++ b/src/private/standarddirs_p.h @@ -104,6 +104,13 @@ */ AKONADIPRIVATE_EXPORT QStringList locateAllResourceDirs(const QString &relPath); +/** + * Equivalent to QStandardPaths::findExecutable() but it looks in + * qApp->applicationDirPath() first. + */ + +AKONADIPRIVATE_EXPORT QString findExecutable(const QString &relPath); + } } diff --git a/src/widgets/selftestdialog.cpp b/src/widgets/selftestdialog.cpp --- a/src/widgets/selftestdialog.cpp +++ b/src/widgets/selftestdialog.cpp @@ -393,7 +393,7 @@ void SelfTestDialog::testAkonadiCtl() { - const QString path = QStandardPaths::findExecutable(QStringLiteral("akonadictl")); + const QString path = Akonadi::StandardDirs::findExecutable(QStringLiteral("akonadictl")); if (path.isEmpty()) { report(Error, ki18n("akonadictl not found"), ki18n("The program 'akonadictl' needs to be accessible in $PATH. "