poppler/Annot.cc | 19 +++++++++++++++++++ poppler/Page.cc | 11 ++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-)
New commits: commit 05ef3f9feee760544108c68e0d45d1de25fd8901 Author: Philipp Reinkemeier <[email protected]> Date: Mon Feb 16 09:11:58 2015 +0100 annots: Fixed adding annotation of Subtype Popup to pdf page https://bugs.freedesktop.org/show_bug.cgi?id=89136 diff --git a/poppler/Annot.cc b/poppler/Annot.cc index d7769a0..598d148 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -2089,6 +2089,16 @@ void AnnotMarkup::setLabel(GooString *new_label) { } void AnnotMarkup::setPopup(AnnotPopup *new_popup) { + // If there exists an old popup annotation that is already + // associated with a page, then we need to remove that + // popup annotation from the page. Otherwise we would have + // dangling references to it. + if (popup != NULL && popup->getPageNum() != 0) { + Page *pageobj = doc->getPage(popup->getPageNum()); + if (pageobj) { + pageobj->removeAnnot(popup); + } + } delete popup; if (new_popup) { @@ -2100,6 +2110,15 @@ void AnnotMarkup::setPopup(AnnotPopup *new_popup) { new_popup->setParent(this); popup = new_popup; + + // If this annotation is already added to a page, then we + // add the new popup annotation to the same page. + if (page != 0) { + Page *pageobj = doc->getPage(page); + assert(pageobj != NULL); // pageobj should exist in doc (see setPage()) + + pageobj->addAnnot(popup); + } } else { popup = NULL; } diff --git a/poppler/Page.cc b/poppler/Page.cc index 98c13c1..ef0811b 100644 --- a/poppler/Page.cc +++ b/poppler/Page.cc @@ -442,8 +442,17 @@ void Page::addAnnot(Annot *annot) { obj1.free(); } - annots->appendAnnot(annot); + if (annot->getType() != Annot::typePopup) { + annots->appendAnnot(annot); + } annot->setPage(num, gTrue); + + AnnotMarkup *annotMarkup = dynamic_cast<AnnotMarkup*>(annot); + if (annotMarkup) { + AnnotPopup *annotPopup = annotMarkup->getPopup(); + if (annotPopup) + addAnnot(annotPopup); + } } void Page::removeAnnot(Annot *annot) { _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
