also process user input, trigger more processEvents

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32328 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Peter Kümmel 2009-12-04 11:08:24 +00:00
parent 6598b9e2a4
commit 74e77476b5
2 changed files with 31 additions and 18 deletions

View File

@ -28,7 +28,7 @@
#include <QTime>
#include <QThread>
#include <QCoreApplication>
#include <QDebug>
#define USE_QPROCESS
@ -138,7 +138,7 @@ int Systemcall::startscript(Starttype how, string const & what)
SystemcallPrivate::SystemcallPrivate(const std::string& of) :
proc_(new QProcess), outindex_(0),
proc_(new QProcess), outindex_(0), process_events(false),
errindex_(0), outfile(of), showout_(false), showerr_(false)
{
if (!outfile.empty()) {
@ -167,19 +167,28 @@ void SystemcallPrivate::startProcess(const QString& cmd)
}
}
void SystemcallPrivate::processEvents()
{
if(process_events) {
//static int count = 0; qDebug() << count++ << ": waitAndProcessEvents";
QCoreApplication::processEvents(QEventLoop::AllEvents);
}
}
void SystemcallPrivate::waitAndProcessEvents()
{
Sleep::millisec(100);
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
processEvents();
}
bool SystemcallPrivate::waitWhile(State waitwhile, bool process_events, int timeout)
bool SystemcallPrivate::waitWhile(State waitwhile, bool proc_events, int timeout)
{
if (!proc_)
return false;
process_events = proc_events;
// Block GUI while waiting,
// relay on QProcess' wait functions
if (!process_events) {
@ -259,6 +268,7 @@ void SystemcallPrivate::stdOut()
}
}
}
processEvents();
}
@ -276,6 +286,21 @@ void SystemcallPrivate::stdErr()
}
}
}
processEvents();
}
void SystemcallPrivate::processStarted()
{
state = Running;
// why do we get two started signals?
//disconnect(proc_, SIGNAL(started()), this, SLOT(processStarted()));
}
void SystemcallPrivate::processFinished(int, QProcess::ExitStatus status)
{
state = Finished;
}
@ -319,20 +344,6 @@ QString SystemcallPrivate::errorMessage() const
}
void SystemcallPrivate::processStarted()
{
state = Running;
// why do we get two started signals?
//disconnect(proc_, SIGNAL(started()), this, SLOT(processStarted()));
}
void SystemcallPrivate::processFinished(int, QProcess::ExitStatus status)
{
state = Finished;
}
QString SystemcallPrivate::exitStatusMessage() const
{
if (!proc_)

View File

@ -80,8 +80,10 @@ private:
bool showout_;
///
bool showerr_;
bool process_events;
void waitAndProcessEvents();
void processEvents();
void killProcess();