diff --git a/src/core/qgsrunprocess.cpp b/src/core/qgsrunprocess.cpp index e66bf1efb4c..f5628f39fa8 100644 --- a/src/core/qgsrunprocess.cpp +++ b/src/core/qgsrunprocess.cpp @@ -47,9 +47,6 @@ QgsRunProcess::QgsRunProcess( const QString& action, bool capture ) // inside the capture if() statement. connect( mProcess, SIGNAL( finished( int, QProcess::ExitStatus ) ), this, SLOT( processExit( int, QProcess::ExitStatus ) ) ); - // start the process! - mProcess->start( action ); - // Use QgsMessageOutput for displaying output to user // It will delete itself when the dialog box is closed. mOutput = QgsMessageOutput::createMessageOutput(); @@ -63,6 +60,9 @@ QgsRunProcess::QgsRunProcess( const QString& action, bool capture ) { connect( mOutputObj, SIGNAL( destroyed() ), this, SLOT( dialogGone() ) ); } + + // start the process! + mProcess->start( action ); } else { @@ -133,6 +133,8 @@ void QgsRunProcess::dialogGone() // class being called after it has been deleted (Qt seems not to be // disconnecting them itself) + mOutput = 0; + disconnect( mProcess, SIGNAL( error( QProcess::ProcessError ) ), this, SLOT( processError( QProcess::ProcessError ) ) ); disconnect( mProcess, SIGNAL( readyReadStandardOutput() ), this, SLOT( stdoutAvailable() ) ); disconnect( mProcess, SIGNAL( readyReadStandardError() ), this, SLOT( stderrAvailable() ) ); @@ -145,7 +147,7 @@ void QgsRunProcess::processError( QProcess::ProcessError err ) { if ( err == QProcess::FailedToStart ) { - QgsMessageOutput* output = QgsMessageOutput::createMessageOutput(); + QgsMessageOutput* output = mOutput ? mOutput : QgsMessageOutput::createMessageOutput(); output->setMessage( tr( "Unable to run command %1" ).arg( mCommand ), QgsMessageOutput::MessageText ); // Didn't work, so no need to hang around die();