diff --git a/krusader/krslots.cpp b/krusader/krslots.cpp --- a/krusader/krslots.cpp +++ b/krusader/krslots.cpp @@ -95,6 +95,8 @@ #define ACTIVE_VIEW _mainWindow->activeView() +const QStringList kKioSupportCompareApps = {"kdiff3", "kompare"}; + KRslots::KRslots(QObject *parent) : QObject(parent), _mainWindow(krApp) { @@ -212,9 +214,9 @@ QString tmp1; QString tmp2; - - // kdiff3 sucks with spaces - if (QUrl::fromLocalFile(diffProg).fileName() == "kdiff3" && !url1.toDisplayString().contains(" ") && !url2.toDisplayString().contains(" ")) { + const QString appName = QUrl::fromLocalFile(diffProg).fileName(); + if (std::any_of(kKioSupportCompareApps.begin(), kKioSupportCompareApps.end(), + [=](const QString kioApp) { return kioApp == appName; })) { tmp1 = url1.toDisplayString(); tmp2 = url2.toDisplayString(); } else { @@ -225,8 +227,9 @@ } else tmp1 = url1.path(); if (!url2.isLocalFile()) { if (!downloadToTemp(url2, tmp2)) { - if (tmp1 != url1.path()) + if (tmp1 != url1.path()) { QFile::remove(tmp1); + } return; } } else tmp2 = url2.path(); @@ -236,8 +239,9 @@ tmp2 != url2.path() ? tmp2 : QString()); *p << diffProg << tmp1 << tmp2; p->start(); - if (!p->waitForStarted()) + if (!p->waitForStarted()) { KMessageBox::error(nullptr, i18n("Error executing %1.", diffProg)); + } } // GUI toggle slots