poppler/Annot.cc | 10 ++++++---- poppler/Annot.h | 4 ++-- poppler/Object.h | 6 ++++++ poppler/Page.cc | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-)
New commits: commit 2b5cccbafc79d561811906dfa5bc288aa9478b10 Author: Albert Astals Cid <[email protected]> Date: Thu Feb 28 17:57:17 2019 +0100 Rework AnnotPopup parent handling code The old code was not updating the parent member on setParent diff --git a/poppler/Annot.cc b/poppler/Annot.cc index dc39507b..fd2ea0fa 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -1927,9 +1927,11 @@ AnnotPopup::~AnnotPopup() { } void AnnotPopup::initialize(PDFDoc *docA, Dict *dict) { - parent = dict->lookupNF("Parent").copy(); - if (!parent.isRef()) { - parent.setToNull(); + const Object &parentObj = dict->lookupNF("Parent"); + if (parentObj.isRef()) { + parentRef = parentObj.getRef(); + } else { + parentRef = Ref::INVALID(); } Object obj1 = dict->lookup("Open"); @@ -1941,7 +1943,7 @@ void AnnotPopup::initialize(PDFDoc *docA, Dict *dict) { } void AnnotPopup::setParent(Annot *parentA) { - const Ref parentRef = parentA->getRef(); + parentRef = parentA->getRef(); update ("Parent", Object(parentRef)); } diff --git a/poppler/Annot.h b/poppler/Annot.h index 0200bb6a..7bcb6b2d 100644 --- a/poppler/Annot.h +++ b/poppler/Annot.h @@ -788,7 +788,7 @@ public: AnnotPopup(PDFDoc *docA, Object &&dictObject, const Object *obj); ~AnnotPopup(); - Object *getParentNF() { return &parent; } + bool hasParent() const { return parentRef != Ref::INVALID(); } void setParent(Annot *parentA); bool getOpen() const { return open; } void setOpen(bool openA); @@ -796,7 +796,7 @@ public: protected: void initialize(PDFDoc *docA, Dict *dict); - Object parent; // Parent + Ref parentRef; // Parent bool open; // Open }; diff --git a/poppler/Object.h b/poppler/Object.h index 77a40cda..914b10ba 100644 --- a/poppler/Object.h +++ b/poppler/Object.h @@ -82,12 +82,18 @@ class Stream; struct Ref { int num; // object number int gen; // generation number + + static constexpr Ref INVALID() { return {-1, -1}; }; }; inline bool operator== (const Ref lhs, const Ref rhs) noexcept { return lhs.num == rhs.num && lhs.gen == rhs.gen; } +inline bool operator!= (const Ref lhs, const Ref rhs) noexcept { + return lhs.num != rhs.num || lhs.gen != rhs.gen; +} + inline bool operator< (const Ref lhs, const Ref rhs) noexcept { if (lhs.num != rhs.num) return lhs.num < rhs.num; diff --git a/poppler/Page.cc b/poppler/Page.cc index 2cb75146..447a94d2 100644 --- a/poppler/Page.cc +++ b/poppler/Page.cc @@ -401,7 +401,7 @@ void Page::addAnnot(Annot *annot) { // so add to the list only Popup annots without a // markup annotation associated. if (annot->getType() != Annot::typePopup || - static_cast<AnnotPopup*>(annot)->getParentNF()->isNull()) { + !static_cast<AnnotPopup*>(annot)->hasParent()) { annots->appendAnnot(annot); } annot->setPage(num, true); _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
