diff --git a/core/generator.cpp b/core/generator.cpp index 004197d43..f2862b140 100644 --- a/core/generator.cpp +++ b/core/generator.cpp @@ -252,7 +252,8 @@ void Generator::generatePixmap( PixmapRequest *request ) */ if ( hasFeature( TextExtraction ) && !request->page()->hasTextPage() && canGenerateTextPage() && !d->m_closing ) { d->mTextPageReady = false; - d->textPageGenerationThread()->startGeneration( request->page() ); + // Queue the text generation request so that pixmap generation gets a chance to start before the text generation + QMetaObject::invokeMethod(d->textPageGenerationThread(), "startGeneration", Qt::QueuedConnection, Q_ARG(Okular::Page*, request->page())); } return; diff --git a/core/generator_p.h b/core/generator_p.h index 060bc135d..6457e7be1 100644 --- a/core/generator_p.h +++ b/core/generator_p.h @@ -19,6 +19,8 @@ class QEventLoop; class QMutex; +#include "page.h" + namespace Okular { class DocumentObserver; @@ -124,14 +126,15 @@ class TextPageGenerationThread : public QThread public: TextPageGenerationThread( Generator *generator ); - void startGeneration( Page *page ); - void endGeneration(); Page *page() const; TextPage* textPage() const; + public slots: + void startGeneration( Okular::Page *page ); + protected: void run() override; @@ -166,4 +169,6 @@ class FontExtractionThread : public QThread } +Q_DECLARE_METATYPE(Okular::Page*) + #endif