forked from qt-creator/qt-creator
Handle setNativeArguments inside process launcher
Change-Id: I4b4db2e5cf6b3ad4d8a39614573564145f125520 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -59,13 +59,13 @@ StartProcessPacket::StartProcessPacket(quintptr token)
|
|||||||
void StartProcessPacket::doSerialize(QDataStream &stream) const
|
void StartProcessPacket::doSerialize(QDataStream &stream) const
|
||||||
{
|
{
|
||||||
stream << command << arguments << workingDir << env << processMode << writeData << channelMode
|
stream << command << arguments << workingDir << env << processMode << writeData << channelMode
|
||||||
<< standardInputFile << belowNormalPriority;
|
<< standardInputFile << belowNormalPriority << nativeArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartProcessPacket::doDeserialize(QDataStream &stream)
|
void StartProcessPacket::doDeserialize(QDataStream &stream)
|
||||||
{
|
{
|
||||||
stream >> command >> arguments >> workingDir >> env >> processMode >> writeData >> channelMode
|
stream >> command >> arguments >> workingDir >> env >> processMode >> writeData >> channelMode
|
||||||
>> standardInputFile >> belowNormalPriority;
|
>> standardInputFile >> belowNormalPriority >> nativeArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -116,6 +116,7 @@ public:
|
|||||||
QProcess::ProcessChannelMode channelMode = QProcess::SeparateChannels;
|
QProcess::ProcessChannelMode channelMode = QProcess::SeparateChannels;
|
||||||
QString standardInputFile;
|
QString standardInputFile;
|
||||||
bool belowNormalPriority = false;
|
bool belowNormalPriority = false;
|
||||||
|
QString nativeArguments;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void doSerialize(QDataStream &stream) const override;
|
void doSerialize(QDataStream &stream) const override;
|
||||||
|
@@ -410,6 +410,7 @@ void LauncherHandle::doStart()
|
|||||||
p.channelMode = m_channelMode;
|
p.channelMode = m_channelMode;
|
||||||
p.standardInputFile = m_standardInputFile;
|
p.standardInputFile = m_standardInputFile;
|
||||||
p.belowNormalPriority = m_belowNormalPriority;
|
p.belowNormalPriority = m_belowNormalPriority;
|
||||||
|
p.nativeArguments = m_nativeArguments;
|
||||||
sendPacket(p);
|
sendPacket(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -104,6 +104,7 @@ public:
|
|||||||
QProcess::ExitStatus exitStatus() const { QMutexLocker locker(&m_mutex); return m_exitStatus; }
|
QProcess::ExitStatus exitStatus() const { QMutexLocker locker(&m_mutex); return m_exitStatus; }
|
||||||
|
|
||||||
void setBelowNormalPriority() { m_belowNormalPriority = true; }
|
void setBelowNormalPriority() { m_belowNormalPriority = true; }
|
||||||
|
void setNativeArguments(const QString &arguments) { m_nativeArguments = arguments; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void errorOccurred(QProcess::ProcessError error);
|
void errorOccurred(QProcess::ProcessError error);
|
||||||
@@ -185,6 +186,7 @@ private:
|
|||||||
CallerHandle *m_callerHandle = nullptr;
|
CallerHandle *m_callerHandle = nullptr;
|
||||||
|
|
||||||
bool m_belowNormalPriority = false;
|
bool m_belowNormalPriority = false;
|
||||||
|
QString m_nativeArguments;
|
||||||
|
|
||||||
friend class LauncherSocket;
|
friend class LauncherSocket;
|
||||||
friend class CallerHandle;
|
friend class CallerHandle;
|
||||||
|
@@ -70,8 +70,20 @@ void ProcessStartHandler::setBelowNormalPriority(QProcess *process)
|
|||||||
[](QProcess::CreateProcessArguments *args) {
|
[](QProcess::CreateProcessArguments *args) {
|
||||||
args->flags |= BELOW_NORMAL_PRIORITY_CLASS;
|
args->flags |= BELOW_NORMAL_PRIORITY_CLASS;
|
||||||
});
|
});
|
||||||
|
#else
|
||||||
|
Q_UNUSED(process)
|
||||||
#endif // Q_OS_WIN
|
#endif // Q_OS_WIN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProcessStartHandler::setNativeArguments(QProcess *process, const QString &arguments)
|
||||||
|
{
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
if (!arguments.isEmpty())
|
||||||
|
process->setNativeArguments(arguments);
|
||||||
|
#else
|
||||||
|
Q_UNUSED(process)
|
||||||
|
Q_UNUSED(arguments)
|
||||||
|
#endif // Q_OS_WIN
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
@@ -47,6 +47,7 @@ public:
|
|||||||
void handleProcessStart(QProcess *process);
|
void handleProcessStart(QProcess *process);
|
||||||
void handleProcessStarted(QProcess *process);
|
void handleProcessStarted(QProcess *process);
|
||||||
void setBelowNormalPriority(QProcess *process);
|
void setBelowNormalPriority(QProcess *process);
|
||||||
|
void setNativeArguments(QProcess *process, const QString &arguments);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ProcessMode m_processMode = ProcessMode::Reader;
|
ProcessMode m_processMode = ProcessMode::Reader;
|
||||||
|
@@ -138,10 +138,8 @@ public:
|
|||||||
|
|
||||||
void setBelowNormalPriority() { m_belowNormalPriority = true; }
|
void setBelowNormalPriority() { m_belowNormalPriority = true; }
|
||||||
bool isBelowNormalPriority() const { return m_belowNormalPriority; }
|
bool isBelowNormalPriority() const { return m_belowNormalPriority; }
|
||||||
|
void setNativeArguments(const QString &arguments) { m_nativeArguments = arguments; }
|
||||||
#ifdef Q_OS_WIN
|
QString nativeArguments() const { return m_nativeArguments; }
|
||||||
virtual void setNativeArguments(const QString &arguments) = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void started();
|
void started();
|
||||||
@@ -155,6 +153,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
const ProcessMode m_processMode;
|
const ProcessMode m_processMode;
|
||||||
bool m_belowNormalPriority = false;
|
bool m_belowNormalPriority = false;
|
||||||
|
QString m_nativeArguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ProcessHelper : public QProcess
|
class ProcessHelper : public QProcess
|
||||||
@@ -223,6 +222,7 @@ public:
|
|||||||
m_processStartHandler.setWriteData(writeData);
|
m_processStartHandler.setWriteData(writeData);
|
||||||
if (isBelowNormalPriority())
|
if (isBelowNormalPriority())
|
||||||
m_processStartHandler.setBelowNormalPriority(&m_process);
|
m_processStartHandler.setBelowNormalPriority(&m_process);
|
||||||
|
m_processStartHandler.setNativeArguments(&m_process, nativeArguments());
|
||||||
m_process.start(program, arguments, m_processStartHandler.openMode());
|
m_process.start(program, arguments, m_processStartHandler.openMode());
|
||||||
m_processStartHandler.handleProcessStart(&m_process);
|
m_processStartHandler.handleProcessStart(&m_process);
|
||||||
}
|
}
|
||||||
@@ -269,11 +269,6 @@ public:
|
|||||||
void setDisableUnixTerminal() override
|
void setDisableUnixTerminal() override
|
||||||
{ m_process.m_disableUnixTerminal = true; }
|
{ m_process.m_disableUnixTerminal = true; }
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
void setNativeArguments(const QString &arguments) override
|
|
||||||
{ m_process.setNativeArguments(arguments); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handleStarted()
|
void handleStarted()
|
||||||
{
|
{
|
||||||
@@ -325,6 +320,7 @@ public:
|
|||||||
{
|
{
|
||||||
if (isBelowNormalPriority())
|
if (isBelowNormalPriority())
|
||||||
m_handle->setBelowNormalPriority();
|
m_handle->setBelowNormalPriority();
|
||||||
|
m_handle->setNativeArguments(nativeArguments());
|
||||||
m_handle->start(program, arguments, writeData);
|
m_handle->start(program, arguments, writeData);
|
||||||
}
|
}
|
||||||
void terminate() override { cancel(); } // TODO: what are differences among terminate, kill and close?
|
void terminate() override { cancel(); } // TODO: what are differences among terminate, kill and close?
|
||||||
@@ -351,10 +347,6 @@ public:
|
|||||||
bool lowPriority() const override { QTC_CHECK(false); return false; }
|
bool lowPriority() const override { QTC_CHECK(false); return false; }
|
||||||
void setDisableUnixTerminal() override { QTC_CHECK(false); }
|
void setDisableUnixTerminal() override { QTC_CHECK(false); }
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
void setNativeArguments(const QString &arguments) override { QTC_CHECK(false); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef void (ProcessLauncherImpl::*PreSignal)(void);
|
typedef void (ProcessLauncherImpl::*PreSignal)(void);
|
||||||
|
|
||||||
|
@@ -245,6 +245,7 @@ void LauncherSocketHandler::handleStartPacket()
|
|||||||
handler->setWriteData(packet.writeData);
|
handler->setWriteData(packet.writeData);
|
||||||
if (packet.belowNormalPriority)
|
if (packet.belowNormalPriority)
|
||||||
handler->setBelowNormalPriority(process);
|
handler->setBelowNormalPriority(process);
|
||||||
|
handler->setNativeArguments(process, packet.nativeArguments);
|
||||||
process->start(packet.command, packet.arguments, handler->openMode());
|
process->start(packet.command, packet.arguments, handler->openMode());
|
||||||
handler->handleProcessStart(process);
|
handler->handleProcessStart(process);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user