From a7876ca0139c8ee85f9b554d7340cfdbbe3ece7d Mon Sep 17 00:00:00 2001 From: Christoph Feck Date: Sun, 1 Mar 2020 10:37:27 +0100 Subject: [PATCH 1/2] GIT_SILENT Update Appstream for new release --- generators/chm/org.kde.okular-chm.metainfo.xml | 1 + generators/comicbook/org.kde.okular-comicbook.metainfo.xml | 1 + generators/djvu/org.kde.okular-djvu.metainfo.xml | 1 + generators/dvi/org.kde.okular-dvi.metainfo.xml | 1 + generators/epub/org.kde.okular-epub.metainfo.xml | 1 + generators/fax/org.kde.okular-fax.metainfo.xml | 1 + generators/fictionbook/org.kde.okular-fb.metainfo.xml | 1 + generators/kimgio/org.kde.okular-kimgio.metainfo.xml | 1 + generators/markdown/org.kde.okular-md.metainfo.xml | 1 + generators/mobipocket/org.kde.okular-mobipocket.metainfo.xml | 1 + generators/ooo/org.kde.okular-ooo.metainfo.xml | 1 + generators/plucker/org.kde.okular-plucker.metainfo.xml | 1 + generators/poppler/org.kde.okular-poppler.metainfo.xml | 1 + generators/spectre/org.kde.okular-spectre.metainfo.xml | 1 + generators/tiff/org.kde.okular-tiff.metainfo.xml | 1 + generators/txt/org.kde.okular-txt.metainfo.xml | 1 + generators/xps/org.kde.okular-xps.metainfo.xml | 1 + mobile/app/org.kde.okular.kirigami.appdata.xml | 1 + shell/org.kde.okular.appdata.xml | 1 + 19 files changed, 19 insertions(+) diff --git a/generators/chm/org.kde.okular-chm.metainfo.xml b/generators/chm/org.kde.okular-chm.metainfo.xml index 8d90eb6d1..551b9a6d3 100644 --- a/generators/chm/org.kde.okular-chm.metainfo.xml +++ b/generators/chm/org.kde.okular-chm.metainfo.xml @@ -79,6 +79,7 @@ https://okular.kde.org + diff --git a/generators/comicbook/org.kde.okular-comicbook.metainfo.xml b/generators/comicbook/org.kde.okular-comicbook.metainfo.xml index cd643db38..ae5fcc8d8 100644 --- a/generators/comicbook/org.kde.okular-comicbook.metainfo.xml +++ b/generators/comicbook/org.kde.okular-comicbook.metainfo.xml @@ -82,6 +82,7 @@ https://okular.kde.org + diff --git a/generators/djvu/org.kde.okular-djvu.metainfo.xml b/generators/djvu/org.kde.okular-djvu.metainfo.xml index ff9fb47be..34621a841 100644 --- a/generators/djvu/org.kde.okular-djvu.metainfo.xml +++ b/generators/djvu/org.kde.okular-djvu.metainfo.xml @@ -79,6 +79,7 @@ https://okular.kde.org + diff --git a/generators/dvi/org.kde.okular-dvi.metainfo.xml b/generators/dvi/org.kde.okular-dvi.metainfo.xml index 098c48d6b..bc7fb8b99 100644 --- a/generators/dvi/org.kde.okular-dvi.metainfo.xml +++ b/generators/dvi/org.kde.okular-dvi.metainfo.xml @@ -81,6 +81,7 @@ https://okular.kde.org + diff --git a/generators/epub/org.kde.okular-epub.metainfo.xml b/generators/epub/org.kde.okular-epub.metainfo.xml index 786f635f5..e06b9716b 100644 --- a/generators/epub/org.kde.okular-epub.metainfo.xml +++ b/generators/epub/org.kde.okular-epub.metainfo.xml @@ -79,6 +79,7 @@ https://okular.kde.org + diff --git a/generators/fax/org.kde.okular-fax.metainfo.xml b/generators/fax/org.kde.okular-fax.metainfo.xml index c74111a0b..2c5e0a2a3 100644 --- a/generators/fax/org.kde.okular-fax.metainfo.xml +++ b/generators/fax/org.kde.okular-fax.metainfo.xml @@ -80,6 +80,7 @@ https://okular.kde.org + diff --git a/generators/fictionbook/org.kde.okular-fb.metainfo.xml b/generators/fictionbook/org.kde.okular-fb.metainfo.xml index 37ff463b5..dc466566c 100644 --- a/generators/fictionbook/org.kde.okular-fb.metainfo.xml +++ b/generators/fictionbook/org.kde.okular-fb.metainfo.xml @@ -79,6 +79,7 @@ https://okular.kde.org + diff --git a/generators/kimgio/org.kde.okular-kimgio.metainfo.xml b/generators/kimgio/org.kde.okular-kimgio.metainfo.xml index 4e68249ad..45704aabf 100644 --- a/generators/kimgio/org.kde.okular-kimgio.metainfo.xml +++ b/generators/kimgio/org.kde.okular-kimgio.metainfo.xml @@ -102,6 +102,7 @@ https://okular.kde.org + diff --git a/generators/markdown/org.kde.okular-md.metainfo.xml b/generators/markdown/org.kde.okular-md.metainfo.xml index b845eb06e..79200dc12 100644 --- a/generators/markdown/org.kde.okular-md.metainfo.xml +++ b/generators/markdown/org.kde.okular-md.metainfo.xml @@ -77,6 +77,7 @@ https://okular.kde.org + diff --git a/generators/mobipocket/org.kde.okular-mobipocket.metainfo.xml b/generators/mobipocket/org.kde.okular-mobipocket.metainfo.xml index 0ea993cce..8d18e2fd8 100644 --- a/generators/mobipocket/org.kde.okular-mobipocket.metainfo.xml +++ b/generators/mobipocket/org.kde.okular-mobipocket.metainfo.xml @@ -102,6 +102,7 @@ https://okular.kde.org + diff --git a/generators/ooo/org.kde.okular-ooo.metainfo.xml b/generators/ooo/org.kde.okular-ooo.metainfo.xml index 8f1f75655..a04c593fa 100644 --- a/generators/ooo/org.kde.okular-ooo.metainfo.xml +++ b/generators/ooo/org.kde.okular-ooo.metainfo.xml @@ -77,6 +77,7 @@ https://okular.kde.org + diff --git a/generators/plucker/org.kde.okular-plucker.metainfo.xml b/generators/plucker/org.kde.okular-plucker.metainfo.xml index 48e83094e..b88e21666 100644 --- a/generators/plucker/org.kde.okular-plucker.metainfo.xml +++ b/generators/plucker/org.kde.okular-plucker.metainfo.xml @@ -79,6 +79,7 @@ https://okular.kde.org + diff --git a/generators/poppler/org.kde.okular-poppler.metainfo.xml b/generators/poppler/org.kde.okular-poppler.metainfo.xml index d3460225f..ecdcd215d 100644 --- a/generators/poppler/org.kde.okular-poppler.metainfo.xml +++ b/generators/poppler/org.kde.okular-poppler.metainfo.xml @@ -82,6 +82,7 @@ https://okular.kde.org + diff --git a/generators/spectre/org.kde.okular-spectre.metainfo.xml b/generators/spectre/org.kde.okular-spectre.metainfo.xml index 0fe898389..cd15a9294 100644 --- a/generators/spectre/org.kde.okular-spectre.metainfo.xml +++ b/generators/spectre/org.kde.okular-spectre.metainfo.xml @@ -86,6 +86,7 @@ https://okular.kde.org + diff --git a/generators/tiff/org.kde.okular-tiff.metainfo.xml b/generators/tiff/org.kde.okular-tiff.metainfo.xml index dcac7f7a3..011931d1f 100644 --- a/generators/tiff/org.kde.okular-tiff.metainfo.xml +++ b/generators/tiff/org.kde.okular-tiff.metainfo.xml @@ -79,6 +79,7 @@ https://okular.kde.org + diff --git a/generators/txt/org.kde.okular-txt.metainfo.xml b/generators/txt/org.kde.okular-txt.metainfo.xml index a82b41872..0dddad672 100644 --- a/generators/txt/org.kde.okular-txt.metainfo.xml +++ b/generators/txt/org.kde.okular-txt.metainfo.xml @@ -78,6 +78,7 @@ https://okular.kde.org + diff --git a/generators/xps/org.kde.okular-xps.metainfo.xml b/generators/xps/org.kde.okular-xps.metainfo.xml index e43eeee11..78831d1fb 100644 --- a/generators/xps/org.kde.okular-xps.metainfo.xml +++ b/generators/xps/org.kde.okular-xps.metainfo.xml @@ -81,6 +81,7 @@ https://okular.kde.org + diff --git a/mobile/app/org.kde.okular.kirigami.appdata.xml b/mobile/app/org.kde.okular.kirigami.appdata.xml index 4ab0261a3..10bc44813 100644 --- a/mobile/app/org.kde.okular.kirigami.appdata.xml +++ b/mobile/app/org.kde.okular.kirigami.appdata.xml @@ -249,6 +249,7 @@ okularkirigami + diff --git a/shell/org.kde.okular.appdata.xml b/shell/org.kde.okular.appdata.xml index 6e823aafb..b9b7af392 100644 --- a/shell/org.kde.okular.appdata.xml +++ b/shell/org.kde.okular.appdata.xml @@ -296,6 +296,7 @@ https://www.microsoft.com/store/apps/9n41msq1wnm8 + From 81c005710cdbb23f9ed9ebcc4aee4db69d33434d Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Mon, 24 Feb 2020 00:12:53 +0100 Subject: [PATCH 2/2] Fix re-rendering of images when using partial updates Partial updates trigger when the page is taking "too much" to render (> 500 ms). When this happens we store a pixmap for the page, this meant that Page::hasPixmap returned true, so when moving the viewport around we would think that that page was already rendered, and thus needed no rendering so we didn't add it to the list of requested pixmaps. Then on document when seeing the new list of requested pixmaps we would go and check and say "oh there's one request going on that we don't want anymore, let's cancel it", so we would cancel the page that we actually wanted (and clear the partial pixmap) Then on the next scroll we would realize we did not have that page pixmap and then request it again which since it's the current page would immediately stop all other renders and start this one. Then we would get a temporary pixmap and the loop of cancellations and requesting again would keep happening as long as the user moved the viewport. We fix that my making hasPixmap return false if the pixmap we have is a partial one, because that's what the function meant "forever" until we recently introduced partial updates so all the calls to hasPixmap actually mean "hasNonPartialPixmap" BUGS: 418086 --- core/page.cpp | 6 ++++++ core/page.h | 3 ++- core/page_p.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/page.cpp b/core/page.cpp index 33c6127c4..4b7539abf 100644 --- a/core/page.cpp +++ b/core/page.cpp @@ -116,10 +116,12 @@ void PagePrivate::imageRotationDone( RotationJob * job ) PixmapObject &object = it.value(); (*object.m_pixmap) = QPixmap::fromImage( job->image() ); object.m_rotation = job->rotation(); + object.m_isPartialPixmap = job->isPartialUpdate(); } else { PixmapObject object; object.m_pixmap = new QPixmap( QPixmap::fromImage( job->image() ) ); object.m_rotation = job->rotation(); + object.m_isPartialPixmap = job->isPartialUpdate(); m_pixmaps.insert( job->observer(), object ); } @@ -235,6 +237,9 @@ bool Page::hasPixmap( DocumentObserver *observer, int width, int height, const N if ( width == -1 || height == -1 ) return true; + if ( it.value().m_isPartialPixmap ) + return false; + const QPixmap *pixmap = it.value().m_pixmap; return (pixmap->width() == width && pixmap->height() == height); @@ -556,6 +561,7 @@ void PagePrivate::setPixmap( DocumentObserver *observer, QPixmap *pixmap, const } it.value().m_pixmap = pixmap; it.value().m_rotation = m_rotation; + it.value().m_isPartialPixmap = isPartialPixmap; } else { // it can happen that we get a setPixmap while closing and thus the page controller is gone if ( m_doc->m_pageController ) diff --git a/core/page.h b/core/page.h index b33f0e039..19d6410f7 100644 --- a/core/page.h +++ b/core/page.h @@ -141,8 +141,9 @@ class OKULARCORE_EXPORT Page void setBoundingBox( const NormalizedRect& bbox ); /** - * Returns whether the page of size @p width x @p height has a @p pixmap + * Returns whether the page of size @p width x @p height has a @p pixmap * in the region given by @p rect for the given @p observer + * If there is a partially rendered pixmap the answer is false. */ bool hasPixmap( DocumentObserver *observer, int width = -1, int height = -1, const NormalizedRect &rect = NormalizedRect() ) const; diff --git a/core/page_p.h b/core/page_p.h index 46cf0a946..eda83d6f6 100644 --- a/core/page_p.h +++ b/core/page_p.h @@ -146,6 +146,7 @@ class PagePrivate public: QPixmap *m_pixmap = nullptr; Rotation m_rotation; + bool m_isPartialPixmap = false; }; QMap< DocumentObserver*, PixmapObject > m_pixmaps; QMap< const DocumentObserver*, TilesManager *> m_tilesManagers;