X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/510752324940eaaa67926e7fe22cdb1a6ad385e7..d2506ffa63812fd0d8e9de248d7f3dd94ec2bf38:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index acba8daed..10adfc638 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,24 +19,46 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ +#include "dbusinterface.h" +#include "dolphin_generalsettings.h" #include "dolphin_version.h" +#include "dolphindebug.h" #include "dolphinmainwindow.h" -#include "dolphin_generalsettings.h" -#include "dbusinterface.h" #include "global.h" -#include "dolphindebug.h" -#include #include #include -#include -#include -#include +#include #include #include +#include +#include +#include +#include +#include +#include + +#ifndef Q_OS_WIN +#include +#endif +#include + extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv) { +#ifndef Q_OS_WIN + // Prohibit using sudo or kdesu (but allow using the root user directly) + if (getuid() == 0) { + if (!qEnvironmentVariableIsEmpty("SUDO_USER")) { + std::cout << "Executing Dolphin with sudo is not possible due to unfixable security vulnerabilities." << std::endl; + return EXIT_FAILURE; + } else if (!qEnvironmentVariableIsEmpty("KDESU_USER")) { + std::cout << "Executing Dolphin with kdesu is not possible due to unfixable security vulnerabilities." << std::endl; + return EXIT_FAILURE; + } + } +#endif + QApplication app(argc, argv); app.setAttribute(Qt::AA_UseHighDpiPixmaps, true); app.setWindowIcon(QIcon::fromTheme(QStringLiteral("system-file-manager"), app.windowIcon())); @@ -53,10 +75,13 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv) KAboutData aboutData(QStringLiteral("dolphin"), i18n("Dolphin"), QStringLiteral(DOLPHIN_VERSION_STRING), i18nc("@title", "File Manager"), KAboutLicense::GPL, - i18nc("@info:credit", "(C) 2006-2016 Peter Penz, Frank Reininghaus, and Emmanuel Pescosta")); - aboutData.setHomepage(QStringLiteral("http://dolphin.kde.org")); + i18nc("@info:credit", "(C) 2006-2018 Peter Penz, Frank Reininghaus, Emmanuel Pescosta and Elvis Angelaccio")); + aboutData.setHomepage(QStringLiteral("https://dolphin.kde.org")); + aboutData.addAuthor(i18nc("@info:credit", "Elvis Angelaccio"), + i18nc("@info:credit", "Maintainer (since 2018) and developer"), + QStringLiteral("elvis.angelaccio@kde.org")); aboutData.addAuthor(i18nc("@info:credit", "Emmanuel Pescosta"), - i18nc("@info:credit", "Maintainer (since 2014) and developer"), + i18nc("@info:credit", "Maintainer (2014-2018) and developer"), QStringLiteral("emmanuelpescosta099@gmail.com")); aboutData.addAuthor(i18nc("@info:credit", "Frank Reininghaus"), i18nc("@info:credit", "Maintainer (2012-2014) and developer"), @@ -95,42 +120,48 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv) DBusInterface interface; QCommandLineParser parser; - parser.addVersionOption(); - parser.addHelpOption(); aboutData.setupCommandLine(&parser); // command line options parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("select"), i18nc("@info:shell", "The files and folders passed as arguments " "will be selected."))); parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("split"), i18nc("@info:shell", "Dolphin will get started with a split view."))); + parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("new-window"), i18nc("@info:shell", "Dolphin will explicitly open in a new window."))); parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("daemon"), i18nc("@info:shell", "Start Dolphin Daemon (only required for DBus Interface)"))); parser.addPositionalArgument(QStringLiteral("+[Url]"), i18nc("@info:shell", "Document to open")); parser.process(app); aboutData.processCommandLine(&parser); - if (parser.isSet(QStringLiteral("daemon"))) { - return app.exec(); - } - + const bool splitView = parser.isSet(QStringLiteral("split")) || GeneralSettings::splitView(); + const bool openFiles = parser.isSet(QStringLiteral("select")); const QStringList args = parser.positionalArguments(); QList urls = Dolphin::validateUris(args); - if (urls.isEmpty()) { - // We need at least one URL to open Dolphin - urls.append(Dolphin::homeUrl()); + if (parser.isSet(QStringLiteral("daemon"))) { + return app.exec(); } - const bool splitView = parser.isSet(QStringLiteral("split")) || GeneralSettings::splitView(); if (splitView && urls.size() < 2) { // Split view does only make sense if we have at least 2 URLs urls.append(urls.last()); } + if (!parser.isSet(QStringLiteral("new-window"))) { + if (Dolphin::attachToExistingInstance(urls, openFiles, splitView)) { + // Successfully attached to existing instance of Dolphin + return 0; + } + } + + if (urls.isEmpty()) { + // We need at least one URL to open Dolphin + urls.append(Dolphin::homeUrl()); + } + DolphinMainWindow* mainWindow = new DolphinMainWindow(); - mainWindow->setAttribute(Qt::WA_DeleteOnClose); - if (parser.isSet(QStringLiteral("select"))) { + if (openFiles) { mainWindow->openFiles(urls, splitView); } else { mainWindow->openDirectories(urls, splitView);