]>
cloud.milkyroute.net Git - dolphin.git/blob - src/global.cpp
2 * Copyright 2015 Ashish Bansal<bansal.ashish096@gmail.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "dolphin_generalsettings.h"
23 #include "dolphindebug.h"
26 #include <KWindowSystem>
28 #include <QApplication>
30 #include <QDBusInterface>
31 #include <QDBusConnectionInterface>
33 QList
<QUrl
> Dolphin::validateUris(const QStringList
& uriList
)
35 const QString currentDir
= QDir::currentPath();
37 foreach (const QString
& str
, uriList
) {
38 const QUrl url
= QUrl::fromUserInput(str
, currentDir
, QUrl::AssumeLocalFile
);
42 qCWarning(DolphinDebug
) << "Invalid URL: " << str
;
48 QUrl
Dolphin::homeUrl()
50 return QUrl::fromUserInput(GeneralSettings::homeUrl(), QString(), QUrl::AssumeLocalFile
);
53 void Dolphin::openNewWindow(const QList
<QUrl
> &urls
, QWidget
*window
, const OpenNewWindowFlags
&flags
)
55 QString command
= QStringLiteral("dolphin --new-window");
57 if (flags
.testFlag(OpenNewWindowFlag::Select
)) {
58 command
.append(QLatin1String(" --select"));
61 if (!urls
.isEmpty()) {
62 command
.append(QLatin1String(" %U"));
68 QApplication::applicationDisplayName(),
69 QApplication::windowIcon().name()
73 bool Dolphin::attachToExistingInstance(const QList
<QUrl
>& inputUrls
, bool openFiles
, bool splitView
, const QString
& preferredService
)
75 // TODO: once Wayland clients can raise or activate themselves remove check from conditional
76 if (KWindowSystem::isPlatformWayland() || inputUrls
.isEmpty()) {
80 const QStringList services
= QDBusConnection::sessionBus().interface()->registeredServiceNames().value();
82 // Don't match the service without trailing "-" (unique instance)
83 const QString pattern
= QStringLiteral("org.kde.dolphin-");
84 // Don't match the pid without leading "-"
85 const QString myPid
= QStringLiteral("-") + QString::number(QCoreApplication::applicationPid());
86 QVector
<QPair
<QSharedPointer
<QDBusInterface
>, QStringList
>> dolphinServices
;
87 if (!preferredService
.isEmpty()) {
88 QSharedPointer
<QDBusInterface
> preferred(
89 new QDBusInterface(preferredService
,
90 QStringLiteral("/dolphin/Dolphin_1"),
91 QStringLiteral("org.kde.dolphin.MainWindow"))
93 if (preferred
->isValid()) {
94 dolphinServices
.append(qMakePair(preferred
, QStringList() ));
98 // find all dolphin instances
99 for (const QString
& service
: services
) {
100 if (service
.startsWith(pattern
) && !service
.endsWith(myPid
)) {
101 // Check if instance can handle our URLs
102 QSharedPointer
<QDBusInterface
> instance(
103 new QDBusInterface(service
,
104 QStringLiteral("/dolphin/Dolphin_1"),
105 QStringLiteral("org.kde.dolphin.MainWindow"))
107 if (!instance
->isValid() || instance
->lastError().isValid()) {
110 dolphinServices
.append(qMakePair(instance
, QStringList()));
114 if (dolphinServices
.isEmpty()) {
120 // check to see if any instances already have any of the given URLs open
121 const auto urls
= QUrl::toStringList(inputUrls
);
122 for (const QString
& url
: urls
) {
123 bool urlFound
= false;
124 for (auto& service
: dolphinServices
) {
125 QDBusReply
<bool> isUrlOpen
= service
.first
->call(QStringLiteral("isUrlOpen"), url
);
126 if (isUrlOpen
.isValid() && isUrlOpen
.value()) {
127 service
.second
.append(url
);
136 dolphinServices
.front().second
<< newUrls
;
138 for (const auto& service
: dolphinServices
) {
139 if (!service
.second
.isEmpty()) {
140 service
.first
->call(openFiles
? QStringLiteral("openFiles") : QStringLiteral("openDirectories"), service
.second
, splitView
);
141 service
.first
->call(QStringLiteral("activateWindow"));