From 44abdb16fcff4898dc81ea3ed4b65b92c4f19d7a Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Mon, 27 Feb 2017 13:34:23 +0100 Subject: Fix emission of QPdfDocument::pageCountChanged signal Emit the signal whenever the amount of pages changes on loading/closing the document. Change-Id: I0555a9cad93cb1f125ded19889eda91e08725592 Reviewed-by: Simon Hausmann --- src/pdf/qpdfdocument.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/pdf/qpdfdocument.cpp') diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp index 7381a927e..c737ca036 100644 --- a/src/pdf/qpdfdocument.cpp +++ b/src/pdf/qpdfdocument.cpp @@ -59,6 +59,7 @@ QPdfDocumentPrivate::QPdfDocumentPrivate() , loadComplete(false) , status(QPdfDocument::Null) , lastError(QPdfDocument::NoError) + , pageCount(0) { asyncBuffer.setData(QByteArray()); asyncBuffer.open(QIODevice::ReadWrite); @@ -105,6 +106,11 @@ void QPdfDocumentPrivate::clear() avail = nullptr; lock.unlock(); + if (pageCount != 0) { + pageCount = 0; + emit q->pageCountChanged(pageCount); + } + loadComplete = false; asyncBuffer.close(); @@ -266,7 +272,8 @@ void QPdfDocumentPrivate::checkComplete() QPdfMutexLocker lock; - for (int i = 0, count = FPDF_GetPageCount(doc); i < count; ++i) { + const int newPageCount = FPDF_GetPageCount(doc); + for (int i = 0; i < newPageCount; ++i) { int result = PDF_DATA_NOTAVAIL; while (result == PDF_DATA_NOTAVAIL) { result = FPDFAvail_IsPageAvail(avail, i, this); @@ -278,8 +285,14 @@ void QPdfDocumentPrivate::checkComplete() lock.unlock(); - if (loadComplete) + if (loadComplete) { + if (newPageCount != pageCount) { + pageCount = newPageCount; + emit q->pageCountChanged(pageCount); + } + setStatus(QPdfDocument::Ready); + } } void QPdfDocumentPrivate::setStatus(QPdfDocument::Status documentStatus) @@ -518,12 +531,7 @@ void QPdfDocument::close() int QPdfDocument::pageCount() const { - if (!d->doc) - return 0; - - const QPdfMutexLocker lock; - - return FPDF_GetPageCount(d->doc); + return d->pageCount; } QSizeF QPdfDocument::pageSize(int page) const -- cgit v1.2.3