diff --git a/gui/QT/main.cpp b/gui/QT/main.cpp index 1838cfb3b..2efec8e93 100644 --- a/gui/QT/main.cpp +++ b/gui/QT/main.cpp @@ -35,7 +35,7 @@ int main(int argc, char *argv[]){ //important: If this line is removed parsing float numbers for vu meter fails std::setlocale(LC_NUMERIC, "C"); - process.start("\"" + ultragridExecutable + "\""); + process.start(ultragridExecutable, QStringList()); if(process.waitForStarted(1000) == false) { QMessageBox msgBox; msgBox.setText(ultragridExecutable + " doesn't seem to be executable."); diff --git a/gui/QT/option/available_settings.cpp b/gui/QT/option/available_settings.cpp index a67024353..95f177b29 100644 --- a/gui/QT/option/available_settings.cpp +++ b/gui/QT/option/available_settings.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -18,9 +19,9 @@ static bool vectorContains(const std::vector &v, const std::string return false; } -static QStringList getProcessOutput(const std::string& executable, const std::string& command){ +static QStringList getProcessOutput(const std::string& executable, const QStringList& args){ QProcess process; - process.start((executable + command).c_str()); + process.start(executable.c_str(), args); process.waitForFinished(); QString output = QString(process.readAllStandardOutput()); @@ -30,7 +31,7 @@ static QStringList getProcessOutput(const std::string& executable, const std::st } void AvailableSettings::queryAll(const std::string &executable){ - QStringList lines = getProcessOutput(executable, " --capabilities"); + QStringList lines = getProcessOutput(executable, QStringList() << "--capabilities"); queryCap(lines, VIDEO_SRC, "[cap][capture] "); queryCap(lines, VIDEO_DISPLAY, "[cap][display] "); diff --git a/gui/QT/window/ultragrid_window.cpp b/gui/QT/window/ultragrid_window.cpp index a849bd768..2b9aa9803 100644 --- a/gui/QT/window/ultragrid_window.cpp +++ b/gui/QT/window/ultragrid_window.cpp @@ -12,6 +12,20 @@ #include #endif +namespace { +QString argListToString(const QStringList& argList){ + return argList.join(" "); +} + +QStringList argStringToList(const QString& argString){ + return argString.split(" ", Qt::SkipEmptyParts); +} + +QStringList argStringToList(const std::string& argString){ + return QString::fromStdString(argString).split(" ", Qt::SkipEmptyParts); +} +} //anonymous namespace + UltragridWindow::UltragridWindow(QWidget *parent): QMainWindow(parent){ ui.setupUi(this); //ui.terminal->setVisible(false); @@ -19,7 +33,7 @@ UltragridWindow::UltragridWindow(QWidget *parent): QMainWindow(parent){ ui.actionTest->setVisible(true); #endif //DEBUG - ultragridExecutable = "\"" + UltragridWindow::findUltragridExecutable() + "\""; + ultragridExecutable = UltragridWindow::findUltragridExecutable(); #ifndef __linux ui.actionUse_hw_acceleration->setVisible(false); @@ -152,13 +166,9 @@ void UltragridWindow::start(){ stopPreview(); - QString command(ultragridExecutable); - - command += " "; - command += launchArgs; process.setProcessChannelMode(QProcess::MergedChannels); - log.write("Command: " + command + "\n\n"); - process.start(command); + log.write("Command args: " + argListToString(launchArgs) + "\n\n"); + process.start(ultragridExecutable, launchArgs); } void UltragridWindow::schedulePreview(){ @@ -176,8 +186,7 @@ void UltragridWindow::startPreview(){ while(previewProcess.state() != QProcess::NotRunning) stopPreview(); - QString command(ultragridExecutable); - command += QString::fromStdString(settings.getPreviewParams()); + QStringList previewArgs = argStringToList(settings.getPreviewParams()); /* if(sourceOption->getCurrentValue() != "none"){ //We prevent video from network overriding local sources @@ -187,9 +196,9 @@ void UltragridWindow::startPreview(){ */ #ifdef DEBUG - log.write("Preview: " + command + "\n\n"); + log.write("Preview: " + argListToString(previewArgs) + "\n\n"); #endif - previewProcess.start(command); + previewProcess.start(ultragridExecutable, previewArgs); } void UltragridWindow::stopPreview(){ @@ -203,11 +212,14 @@ void UltragridWindow::stopPreview(){ } void UltragridWindow::editArgs(const QString &text){ - launchArgs = text; + launchArgs = argStringToList(text); } void UltragridWindow::setArgs(){ QString args = QString::fromStdString(settings.getLaunchParams()); + + launchArgs = argStringToList(args); + #ifdef DEBUG log.write("set args: " + args + "\n"); #endif diff --git a/gui/QT/window/ultragrid_window.hpp b/gui/QT/window/ultragrid_window.hpp index 531d19370..9c5927ee1 100644 --- a/gui/QT/window/ultragrid_window.hpp +++ b/gui/QT/window/ultragrid_window.hpp @@ -2,6 +2,7 @@ #define ULTRAGRID_WINDOW_HPP #include +#include #include #include @@ -38,7 +39,7 @@ private: AvailableSettings availableSettings; - QString launchArgs; + QStringList launchArgs; QStringList getOptionsForParam(QString param); LogWindow log; SettingsWindow settingsWindow;