From 32b3ed0a1362a4b0798ad71fac3450fb77cb7e41 Mon Sep 17 00:00:00 2001 From: Thomas Groman Date: Thu, 19 Sep 2019 00:41:48 -0700 Subject: merged from 0.6.7 codebase --- api/gui/DesktopServices.cpp | 174 ++++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 87 deletions(-) (limited to 'api/gui/DesktopServices.cpp') diff --git a/api/gui/DesktopServices.cpp b/api/gui/DesktopServices.cpp index 3154ea01..5368ddc8 100644 --- a/api/gui/DesktopServices.cpp +++ b/api/gui/DesktopServices.cpp @@ -17,132 +17,132 @@ template bool IndirectOpen(T callable, qint64 *pid_forked = nullptr) { - auto pid = fork(); - if(pid_forked) - { - if(pid > 0) - *pid_forked = pid; - else - *pid_forked = 0; - } - if(pid == -1) - { - qWarning() << "IndirectOpen failed to fork: " << errno; - return false; - } - // child - do the stuff - if(pid == 0) - { - // unset all this garbage so it doesn't get passed to the child process - qunsetenv("LD_PRELOAD"); - qunsetenv("LD_LIBRARY_PATH"); - qunsetenv("LD_DEBUG"); - qunsetenv("QT_PLUGIN_PATH"); - qunsetenv("QT_FONTPATH"); + auto pid = fork(); + if(pid_forked) + { + if(pid > 0) + *pid_forked = pid; + else + *pid_forked = 0; + } + if(pid == -1) + { + qWarning() << "IndirectOpen failed to fork: " << errno; + return false; + } + // child - do the stuff + if(pid == 0) + { + // unset all this garbage so it doesn't get passed to the child process + qunsetenv("LD_PRELOAD"); + qunsetenv("LD_LIBRARY_PATH"); + qunsetenv("LD_DEBUG"); + qunsetenv("QT_PLUGIN_PATH"); + qunsetenv("QT_FONTPATH"); - // open the URL - auto status = callable(); + // open the URL + auto status = callable(); - // detach from the parent process group. - setsid(); + // detach from the parent process group. + setsid(); - // die. now. do not clean up anything, it would just hang forever. - _exit(status ? 0 : 1); - } - else - { - //parent - assume it worked. - int status; - while (waitpid(pid, &status, 0)) - { - if(WIFEXITED(status)) - { - return WEXITSTATUS(status) == 0; - } - if(WIFSIGNALED(status)) - { - return false; - } - } - return true; - } + // die. now. do not clean up anything, it would just hang forever. + _exit(status ? 0 : 1); + } + else + { + //parent - assume it worked. + int status; + while (waitpid(pid, &status, 0)) + { + if(WIFEXITED(status)) + { + return WEXITSTATUS(status) == 0; + } + if(WIFSIGNALED(status)) + { + return false; + } + } + return true; + } } #endif namespace DesktopServices { bool openDirectory(const QString &path, bool ensureExists) { - qDebug() << "Opening directory" << path; - QDir parentPath; - QDir dir(path); - if (!dir.exists()) - { - parentPath.mkpath(dir.absolutePath()); - } - auto f = [&]() - { - return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath())); - }; + qDebug() << "Opening directory" << path; + QDir parentPath; + QDir dir(path); + if (!dir.exists()) + { + parentPath.mkpath(dir.absolutePath()); + } + auto f = [&]() + { + return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath())); + }; #if defined(Q_OS_LINUX) - return IndirectOpen(f); + return IndirectOpen(f); #else - return f(); + return f(); #endif } bool openFile(const QString &path) { - qDebug() << "Opening file" << path; - auto f = [&]() - { - return QDesktopServices::openUrl(QUrl::fromLocalFile(path)); - }; + qDebug() << "Opening file" << path; + auto f = [&]() + { + return QDesktopServices::openUrl(QUrl::fromLocalFile(path)); + }; #if defined(Q_OS_LINUX) - return IndirectOpen(f); + return IndirectOpen(f); #else - return f(); + return f(); #endif } bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid) { - qDebug() << "Opening file" << path << "using" << application; + qDebug() << "Opening file" << path << "using" << application; #if defined(Q_OS_LINUX) - // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave - return IndirectOpen([&]() - { - return QProcess::startDetached(application, QStringList() << path, workingDirectory); - }, pid); + // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave + return IndirectOpen([&]() + { + return QProcess::startDetached(application, QStringList() << path, workingDirectory); + }, pid); #else - return QProcess::startDetached(application, QStringList() << path, workingDirectory, pid); + return QProcess::startDetached(application, QStringList() << path, workingDirectory, pid); #endif } bool run(const QString &application, const QStringList &args, const QString &workingDirectory, qint64 *pid) { - qDebug() << "Running" << application << "with args" << args.join(' '); + qDebug() << "Running" << application << "with args" << args.join(' '); #if defined(Q_OS_LINUX) - // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave - return IndirectOpen([&]() - { - return QProcess::startDetached(application, args, workingDirectory); - }, pid); + // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave + return IndirectOpen([&]() + { + return QProcess::startDetached(application, args, workingDirectory); + }, pid); #else - return QProcess::startDetached(application, args, workingDirectory, pid); + return QProcess::startDetached(application, args, workingDirectory, pid); #endif } bool openUrl(const QUrl &url) { - qDebug() << "Opening URL" << url.toString(); - auto f = [&]() - { - return QDesktopServices::openUrl(url); - }; + qDebug() << "Opening URL" << url.toString(); + auto f = [&]() + { + return QDesktopServices::openUrl(url); + }; #if defined(Q_OS_LINUX) - return IndirectOpen(f); + return IndirectOpen(f); #else - return f(); + return f(); #endif } -- cgit v1.2.3