diff --git a/src/dbusinterface.cpp b/src/dbusinterface.cpp --- a/src/dbusinterface.cpp +++ b/src/dbusinterface.cpp @@ -41,7 +41,7 @@ if (urls.isEmpty()) { return; } - KRun::run(QStringLiteral("dolphin %U"), urls, nullptr); + Dolphin::openNewWindow(urls); } void DBusInterface::ShowItems(const QStringList& uriList, const QString& startUpId) @@ -51,7 +51,7 @@ if (urls.isEmpty()) { return; } - KRun::run(QStringLiteral("dolphin --select %U"), urls, nullptr); + Dolphin::openNewWindow(urls, nullptr, Dolphin::OpenNewWindowFlag::Select); } void DBusInterface::ShowItemProperties(const QStringList& uriList, const QString& startUpId) diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -290,7 +290,7 @@ void DolphinMainWindow::openNewMainWindow() { - KRun::run(QStringLiteral("dolphin %u"), QList(), this); + Dolphin::openNewWindow({}, this); } void DolphinMainWindow::openNewActivatedTab() @@ -331,7 +331,7 @@ } if (!newWindowUrl.isEmpty()) { - KRun::run(QStringLiteral("dolphin %u"), {newWindowUrl}, this); + Dolphin::openNewWindow({newWindowUrl}, this); } } @@ -772,11 +772,9 @@ changeUrl(KIO::upUrl(item.url())); break; - case DolphinContextMenu::OpenParentFolderInNewWindow: { - - KRun::run(QStringLiteral("dolphin %u"), {KIO::upUrl(item.url())}, this); + case DolphinContextMenu::OpenParentFolderInNewWindow: + Dolphin::openNewWindow({KIO::upUrl(item.url())}, this); break; - } case DolphinContextMenu::OpenParentFolderInNewTab: openNewTab(KIO::upUrl(item.url())); diff --git a/src/global.h b/src/global.h --- a/src/global.h +++ b/src/global.h @@ -30,6 +30,17 @@ * Returns the home url which is defined in General Settings */ QUrl homeUrl(); + + enum class OpenNewWindowFlag { + None = 0, + Select = 1<<1 + }; + Q_DECLARE_FLAGS(OpenNewWindowFlags, OpenNewWindowFlag) + + /** + * Opens a new Dolphin window + */ + void openNewWindow(const QList &urls = {}, QWidget *window = nullptr, const OpenNewWindowFlags &flags = OpenNewWindowFlag::None); } #endif //GLOBAL_H diff --git a/src/global.cpp b/src/global.cpp --- a/src/global.cpp +++ b/src/global.cpp @@ -17,6 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include +#include + +#include + #include "global.h" #include "dolphindebug.h" @@ -41,3 +46,18 @@ { return QUrl::fromUserInput(GeneralSettings::homeUrl(), QString(), QUrl::AssumeLocalFile); } + +void Dolphin::openNewWindow(const QList &urls, QWidget *window, const OpenNewWindowFlags &flags) +{ + QString command = QStringLiteral("dolphin"); + + if (flags.testFlag(OpenNewWindowFlag::Select)) { + command.append(QLatin1String(" --select")); + } + + if (!urls.isEmpty()) { + command.append(QLatin1String(" %U")); + } + + KRun::run(command, urls, window, qApp->applicationDisplayName(), qApp->windowIcon().name()); +}