diff options
author | Ken Moore <ken@ixsystems.com> | 2017-01-04 17:37:00 -0500 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2017-01-04 17:37:00 -0500 |
commit | 491b06d75e4ab3340429875b58e0149692384a03 (patch) | |
tree | dddae1dbfe59a82028a11cd436d7f286b72481b3 | |
parent | Merge branch 'master' of github.com:trueos/lumina (diff) | |
download | lumina-491b06d75e4ab3340429875b58e0149692384a03.tar.gz lumina-491b06d75e4ab3340429875b58e0149692384a03.tar.bz2 lumina-491b06d75e4ab3340429875b58e0149692384a03.zip |
Create a new "ExternalProcess" class in the library directory which is specifically designed for launching external processes in an unattended manner and automatically cleaning up the object on the heap when finished. It will also hide any output from the process or forward it to a designated log file rather than polluting the current process output channel.
-rw-r--r-- | src-qt5/core/libLumina/ExternalProcess.h | 45 | ||||
-rw-r--r-- | src-qt5/core/libLumina/ExternalProcess.pri | 6 | ||||
-rw-r--r-- | src-qt5/core/lumina-desktop/LSession.cpp | 9 | ||||
-rw-r--r-- | src-qt5/core/lumina-desktop/lumina-desktop.pro | 4 |
4 files changed, 58 insertions, 6 deletions
diff --git a/src-qt5/core/libLumina/ExternalProcess.h b/src-qt5/core/libLumina/ExternalProcess.h new file mode 100644 index 00000000..2106f296 --- /dev/null +++ b/src-qt5/core/libLumina/ExternalProcess.h @@ -0,0 +1,45 @@ +//=========================================== +// Lumina-desktop source code +// Copyright (c) 2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This is a simple class for launching/managing an external process in a non-interactive manner +// This object will clean itself up when finished and log all output to a particular file if designated +// otherwise it will suppress all output from the process +//=========================================== +#ifndef _LUMINA_EXTERNAL_PROCESS_H +#define _LUMINA_EXTERNAL_PROCESS_H + +#include <QProcess> +#include <QString> + +class ExternalProcess : public QProcess{ + Q_OBJECT +private slots: + void processFinished(){ + //Clean up this object + this->deleteLater(); + } +public: + ExternalProcess(QString logfile = "") : QProcess(){ + this->setProcessChannelMode(QProcess::MergedChannels); + if(logfile.isEmpty()){ + this->setStandardOutputFile(QProcess::nullDevice()); + }else{ + this->setStandardOutputFile(logfile); + } + //Setup the connection for automatic cleanup + connect(this, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(processFinished()) ); + } + ~ExternalProcess(){ + } + + static void launch(QString program, QStringList args = QStringList()){ + //Quick launch of a process with logging disabled and automatic cleanup + ExternalProcess *tmp = new ExternalProcess(); + if(args.isEmpty()){ tmp->start(program); } + else{ tmp->start(program, args); } + } +}; +#endif diff --git a/src-qt5/core/libLumina/ExternalProcess.pri b/src-qt5/core/libLumina/ExternalProcess.pri new file mode 100644 index 00000000..0af4388c --- /dev/null +++ b/src-qt5/core/libLumina/ExternalProcess.pri @@ -0,0 +1,6 @@ +HEADERS *= $${PWD}/ExternalProcess.h + +INCLUDEPATH *= ${PWD} + +#Now the other dependendies of it +#include(LUtils.pri) diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp index 0387555a..a4cc12a7 100644 --- a/src-qt5/core/lumina-desktop/LSession.cpp +++ b/src-qt5/core/lumina-desktop/LSession.cpp @@ -16,6 +16,7 @@ //LibLumina X11 class #include <LuminaX11.h> #include <LUtils.h> +#include <ExternalProcess.h> #include <unistd.h> //for usleep() usage @@ -276,8 +277,9 @@ void LSession::launchStartupApps(){ LOS::setScreenBrightness( tmp ); qDebug() << " - - Screen Brightness:" << QString::number(tmp)+"%"; } - QProcess::startDetached("nice lumina-open -autostart-apps"); - + //QProcess::startDetached("nice lumina-open -autostart-apps"); + ExternalProcess::launch("nice lumina-open -autostart-apps"); + //Re-load the screen brightness and volume settings from the previous session // Wait until after the XDG-autostart functions, since the audio system might be started that way qDebug() << " - Loading previous settings"; @@ -524,7 +526,8 @@ void LSession::SessionEnding(){ //=============== void LSession::LaunchApplication(QString cmd){ LSession::setOverrideCursor(QCursor(Qt::BusyCursor)); - QProcess::startDetached(cmd); + ExternalProcess::launch(cmd); + //QProcess::startDetached(cmd); } QFileInfoList LSession::DesktopFiles(){ diff --git a/src-qt5/core/lumina-desktop/lumina-desktop.pro b/src-qt5/core/lumina-desktop/lumina-desktop.pro index 4b725288..1d60f7d3 100644 --- a/src-qt5/core/lumina-desktop/lumina-desktop.pro +++ b/src-qt5/core/lumina-desktop/lumina-desktop.pro @@ -15,9 +15,7 @@ include(../libLumina/LuminaXDG.pri) include(../libLumina/LuminaX11.pri) include(../libLumina/LuminaSingleApplication.pri) include(../libLumina/LuminaThemes.pri) - -#LIBS += -lLuminaUtils -lxcb -lxcb-damage -#DEPENDPATH += ../libLumina +include(../libLumina/ExternalProcess.pri) TEMPLATE = app |