diff options
| author | hjk <hjk@qt.io> | 2021-04-29 17:15:48 +0200 |
|---|---|---|
| committer | hjk <hjk@qt.io> | 2021-04-30 09:16:28 +0000 |
| commit | dcba96d16e9011ee96cf5e79836f7368727a3a68 (patch) | |
| tree | abc9363f6268ce7229a85d8e7a88e46e3e63ee07 | |
| parent | fe8fbf1a4aeeae646c40ca5183e0852ec350b4ce (diff) | |
| download | qt-creator-dcba96d16e9011ee96cf5e79836f7368727a3a68.tar.gz | |
Utils: Copy some SynchronousProcess function to QtcProcess
Start using it in Utils::Archive.
The idea is to merge SynchronousProcess into QtcProcess (or avoid its
use) to have fewer classes to make "remote-aware".
Change-Id: Ieb08f6f66eab63fd058b75e3bafa79bfbf140387
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
| -rw-r--r-- | src/libs/utils/archive.cpp | 12 | ||||
| -rw-r--r-- | src/libs/utils/archive.h | 5 | ||||
| -rw-r--r-- | src/libs/utils/qtcprocess.cpp | 20 | ||||
| -rw-r--r-- | src/libs/utils/qtcprocess.h | 5 |
4 files changed, 32 insertions, 10 deletions
diff --git a/src/libs/utils/archive.cpp b/src/libs/utils/archive.cpp index 9f61eb28ab..de111dec83 100644 --- a/src/libs/utils/archive.cpp +++ b/src/libs/utils/archive.cpp @@ -30,7 +30,7 @@ #include "environment.h" #include "mimetypes/mimedatabase.h" #include "qtcassert.h" -#include "synchronousprocess.h" +#include "qtcprocess.h" #include <QDir> #include <QPushButton> @@ -208,7 +208,7 @@ Archive *Archive::unarchive(const FilePath &src, const FilePath &dest) const QString workingDirectory = dest.toFileInfo().absoluteFilePath(); QDir(workingDirectory).mkpath("."); - archive->m_process = new QProcess; + archive->m_process = new QtcProcess; archive->m_process->setProcessChannelMode(QProcess::MergedChannels); QObject::connect( archive->m_process, @@ -265,15 +265,15 @@ Archive *Archive::unarchive(const FilePath &src, const FilePath &dest) archive->m_process->setArguments(tool->arguments); #endif archive->m_process->setWorkingDirectory(workingDirectory); - archive->m_process->start(QProcess::ReadOnly); + archive->m_process->setOpenMode(QProcess::ReadOnly); + archive->m_process->start(); return archive; } void Archive::cancel() { - if (!m_process) - return; - SynchronousProcess::stopProcess(*m_process); + if (m_process) + m_process->stopProcess(); } } // namespace Utils diff --git a/src/libs/utils/archive.h b/src/libs/utils/archive.h index 324a473ba3..217191073a 100644 --- a/src/libs/utils/archive.h +++ b/src/libs/utils/archive.h @@ -30,10 +30,11 @@ #include "fileutils.h" #include <QObject> -#include <QProcess> namespace Utils { +class QtcProcess; + class QTCREATOR_UTILS_EXPORT Archive : public QObject { Q_OBJECT @@ -51,7 +52,7 @@ signals: private: Archive() = default; - QProcess *m_process = nullptr; + QtcProcess *m_process = nullptr; }; } // namespace Utils diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 42a0165b0d..6384aef7d3 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -752,7 +752,7 @@ void QtcProcess::start() #endif // Note: Arguments set with setNativeArgs will be appended to the ones // passed with start() below. - QProcess::start(command, QStringList()); + QProcess::start(command, QStringList(), m_openMode); } else { if (!success) { setErrorString(tr("Error in command line.")); @@ -761,7 +761,7 @@ void QtcProcess::start() emit errorOccurred(QProcess::UnknownError); return; } - QProcess::start(command, arguments.toUnixArgs()); + QProcess::start(command, arguments.toUnixArgs(), m_openMode); } if (m_synchronous) @@ -1275,6 +1275,22 @@ void QtcProcess::setSynchronous(bool on) m_synchronous = on; } +void QtcProcess::setOpenMode(OpenMode mode) +{ + m_openMode = mode; +} + +bool QtcProcess::stopProcess() +{ + if (state() == QProcess::NotRunning) + return true; + terminate(); + if (waitForFinished(300)) + return true; + kill(); + return waitForFinished(300); +} + bool QtcProcess::ArgIterator::next() { // We delay the setting of m_prev so we can still delete the last argument diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index a879fa0ae2..64e9bb57f4 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -149,6 +149,10 @@ public: bool isSynchronous() const; void setSynchronous(bool on); + void setOpenMode(OpenMode mode); + + bool stopProcess(); + private: #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void setupChildProcess() override; @@ -163,6 +167,7 @@ private: bool m_lowPriority = false; bool m_synchronous = false; + OpenMode m_openMode = ReadWrite; }; } // namespace Utils |
