forked from quickshell/quickshell
		
	io/process: null stdio channels in detached processes
This commit is contained in:
		
							parent
							
								
									b011cd9d33
								
							
						
					
					
						commit
						de25787451
					
				
					 3 changed files with 17 additions and 1 deletions
				
			
		| 
						 | 
					@ -263,7 +263,6 @@ void QuickshellGlobal::execDetached(const qs::io::process::ProcessContext& conte
 | 
				
			||||||
	auto args = context.command.sliced(1);
 | 
						auto args = context.command.sliced(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	QProcess process;
 | 
						QProcess process;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	qs::io::process::setupProcessEnvironment(&process, context.clearEnvironment, context.environment);
 | 
						qs::io::process::setupProcessEnvironment(&process, context.clearEnvironment, context.environment);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!context.workingDirectory.isEmpty()) {
 | 
						if (!context.workingDirectory.isEmpty()) {
 | 
				
			||||||
| 
						 | 
					@ -272,6 +271,14 @@ void QuickshellGlobal::execDetached(const qs::io::process::ProcessContext& conte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	process.setProgram(cmd);
 | 
						process.setProgram(cmd);
 | 
				
			||||||
	process.setArguments(args);
 | 
						process.setArguments(args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						process.setStandardInputFile(QProcess::nullDevice());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (context.unbindStdout) {
 | 
				
			||||||
 | 
							process.setStandardOutputFile(QProcess::nullDevice());
 | 
				
			||||||
 | 
							process.setStandardErrorFile(QProcess::nullDevice());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	process.startDetached();
 | 
						process.startDetached();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -249,6 +249,11 @@ void Process::startDetached() {
 | 
				
			||||||
	this->setupEnvironment(&process);
 | 
						this->setupEnvironment(&process);
 | 
				
			||||||
	process.setProgram(cmd);
 | 
						process.setProgram(cmd);
 | 
				
			||||||
	process.setArguments(args);
 | 
						process.setArguments(args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						process.setStandardInputFile(QProcess::nullDevice());
 | 
				
			||||||
 | 
						process.setStandardOutputFile(QProcess::nullDevice());
 | 
				
			||||||
 | 
						process.setStandardErrorFile(QProcess::nullDevice());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	process.startDetached();
 | 
						process.startDetached();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@ class ProcessContext {
 | 
				
			||||||
	Q_PROPERTY(QHash<QString, QVariant> environment MEMBER environment WRITE setEnvironment);
 | 
						Q_PROPERTY(QHash<QString, QVariant> environment MEMBER environment WRITE setEnvironment);
 | 
				
			||||||
	Q_PROPERTY(bool clearEnvironment MEMBER clearEnvironment WRITE setClearEnvironment);
 | 
						Q_PROPERTY(bool clearEnvironment MEMBER clearEnvironment WRITE setClearEnvironment);
 | 
				
			||||||
	Q_PROPERTY(QString workingDirectory MEMBER workingDirectory WRITE setWorkingDirectory);
 | 
						Q_PROPERTY(QString workingDirectory MEMBER workingDirectory WRITE setWorkingDirectory);
 | 
				
			||||||
 | 
						Q_PROPERTY(bool unbindStdout MEMBER unbindStdout WRITE setUnbindStdout);
 | 
				
			||||||
	Q_GADGET;
 | 
						Q_GADGET;
 | 
				
			||||||
	QML_STRUCTURED_VALUE;
 | 
						QML_STRUCTURED_VALUE;
 | 
				
			||||||
	QML_VALUE_TYPE(processContext);
 | 
						QML_VALUE_TYPE(processContext);
 | 
				
			||||||
| 
						 | 
					@ -45,6 +46,8 @@ public:
 | 
				
			||||||
		this->workingDirectorySet = true;
 | 
							this->workingDirectorySet = true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void setUnbindStdout(bool unbindStdout) { this->unbindStdout = unbindStdout; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	QList<QString> command;
 | 
						QList<QString> command;
 | 
				
			||||||
	QHash<QString, QVariant> environment;
 | 
						QHash<QString, QVariant> environment;
 | 
				
			||||||
	bool clearEnvironment = false;
 | 
						bool clearEnvironment = false;
 | 
				
			||||||
| 
						 | 
					@ -54,6 +57,7 @@ public:
 | 
				
			||||||
	bool environmentSet : 1 = false;
 | 
						bool environmentSet : 1 = false;
 | 
				
			||||||
	bool clearEnvironmentSet : 1 = false;
 | 
						bool clearEnvironmentSet : 1 = false;
 | 
				
			||||||
	bool workingDirectorySet : 1 = false;
 | 
						bool workingDirectorySet : 1 = false;
 | 
				
			||||||
 | 
						bool unbindStdout : 1 = true;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void setupProcessEnvironment(
 | 
					void setupProcessEnvironment(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue