diff --git a/generators/dvi/generator_dvi.cpp b/generators/dvi/generator_dvi.cpp index a4e1e56b9..6c91b6254 100644 --- a/generators/dvi/generator_dvi.cpp +++ b/generators/dvi/generator_dvi.cpp @@ -34,6 +34,13 @@ #include #include +#ifdef Q_OS_UNIX +#include +#endif +#ifdef Q_OS_WIN +#include // for Sleep +#endif + static const int DviDebug = 4713; static KAboutData createAboutData() @@ -70,6 +77,26 @@ bool DviGenerator::loadDocument( const QString & fileName, QVector< Okular::Page (void)userMutex(); m_dviRenderer = new dviRenderer(); + static const ushort s_waitTime = 800; // milliseconds + static const int s_maxIterations = 10; + int iter = 0; + for ( ; !m_dviRenderer->isValidFile( fileName ) && iter < s_maxIterations; ++iter ) + { + kDebug(DviDebug).nospace() << "file not valid after iteration #" << iter << "/" << s_maxIterations << ", waiting for " << s_waitTime; +#ifdef Q_OS_WIN + Sleep( uint( s_waitTime ) ); +#else + struct timespec ts = { 0, s_waitTime * 1000 * 1000 }; + nanosleep( &ts, NULL ); +#endif + } + if ( iter >= s_maxIterations && !m_dviRenderer->isValidFile( fileName ) ) + { + kDebug(DviDebug) << "file still not valid after" << s_maxIterations; + delete m_dviRenderer; + m_dviRenderer = 0; + return false; + } if ( ! m_dviRenderer->setFile( fileName, base ) ) { delete m_dviRenderer;