Remove the intermediate Outline type since all items are owned by the document and the top-level items will always be eagerly loaded anyway.
diff --git a/qt5/src/poppler-document.cc b/qt5/src/poppler-document.cc
index 1b5eb1d..0aa5bed 100644
--- a/qt5/src/poppler-document.cc
+++ b/qt5/src/poppler-document.cc
@@ -586,7 +586,7 @@
QDomDocument *Document::toc() const
{
- ::Outline * outline = m_doc->doc->getOutline();
+ Outline * outline = m_doc->doc->getOutline();
if ( !outline )
return nullptr;
@@ -601,13 +601,19 @@
return toc;
}
- Outline *Document::outline() const
+ QVector<OutlineItem> Document::outline() const
{
- if (auto *outline = m_doc->doc->getOutline()) {
- return new Outline{new OutlineData{outline, m_doc}};
+ QVector<OutlineItem> result;
+
+ if (::Outline *outline = m_doc->doc->getOutline()) {
+ if (const GooList *items = outline->getItems()) {
+ for (void *item : *items) {
+ result.push_back(OutlineItem{new OutlineItemData{static_cast<::OutlineItem *>(item), m_doc}});
+ }
+ }
}
- return nullptr;
+ return result;
}
LinkDestination *Document::linkDestination( const QString &name )
diff --git a/qt5/src/poppler-outline-private.h b/qt5/src/poppler-outline-private.h
index ccc0f8c..6c00c16 100644
--- a/qt5/src/poppler-outline-private.h
+++ b/qt5/src/poppler-outline-private.h
@@ -40,13 +40,6 @@
mutable QString uri;
};
-struct OutlineData
-{
- OutlineData(const ::Outline *data, DocumentData *documentData) : data{data}, documentData{documentData} {}
- const ::Outline *data;
- DocumentData *documentData;
-};
-
}
#endif
diff --git a/qt5/src/poppler-outline.cc b/qt5/src/poppler-outline.cc
index a6e4b09..c741929 100644
--- a/qt5/src/poppler-outline.cc
+++ b/qt5/src/poppler-outline.cc
@@ -163,27 +163,4 @@
return result;
}
-Outline::Outline(OutlineData *data) : m_data{data} {}
-
-Outline::~Outline()
-{
- delete m_data;
- m_data = nullptr;
-}
-
-QVector<OutlineItem> Outline::items() const
-{
- QVector<OutlineItem> result;
-
- const ::Outline *data = m_data->data;
-
- if (const GooList *items = data->getItems()) {
- for (void *item : *items) {
- result.push_back(OutlineItem{new OutlineItemData{static_cast<::OutlineItem *>(item), m_data->documentData}});
- }
- }
-
- return result;
-}
-
}
diff --git a/qt5/src/poppler-qt5.h b/qt5/src/poppler-qt5.h
index 6bc96a2..c8d0cb2 100644
--- a/qt5/src/poppler-qt5.h
+++ b/qt5/src/poppler-qt5.h
@@ -71,7 +71,6 @@
class PSConverter;
struct OutlineItemData;
- struct OutlineData;
/**
Debug/error function.
@@ -982,7 +981,7 @@
};
class POPPLER_QT5_EXPORT OutlineItem {
- friend class Outline;
+ friend class Document;
public:
OutlineItem();
~OutlineItem();
@@ -1012,20 +1011,6 @@
OutlineItemData *m_data;
};
- class POPPLER_QT5_EXPORT Outline {
- friend class Document;
- public:
- ~Outline();
-
- QVector<OutlineItem> items() const;
-
- private:
- Q_DISABLE_COPY(Outline)
-
- Outline(OutlineData *data);
- OutlineData *m_data;
- };
-
/**
\brief PDF document.
@@ -1620,7 +1605,7 @@
*/
QDomDocument *toc() const;
- Outline *outline() const;
+ QVector<OutlineItem> outline() const;
/**
Tries to resolve the named destination \p name.
diff --git a/qt5/tests/check_outline.cpp b/qt5/tests/check_outline.cpp
index c42f5e0..95d780a 100644
--- a/qt5/tests/check_outline.cpp
+++ b/qt5/tests/check_outline.cpp
@@ -20,15 +20,10 @@
};
QVERIFY(document.get());
- std::unique_ptr<Poppler::Outline> outline{
- document->outline()
- };
- QVERIFY(outline.get());
+ const auto outline = document->outline();
+ QCOMPARE(outline.size(), 2);
- const auto items = outline->items();
- QCOMPARE(items.size(), 2);
-
- const auto &foo = items[0];
+ const auto &foo = outline[0];
QVERIFY(!foo.isNull());
QCOMPARE(foo.name(), QStringLiteral("foo"));
QCOMPARE(foo.isOpen(), false);
@@ -39,7 +34,7 @@
QVERIFY(foo.uri().isEmpty());
QVERIFY(foo.children().isEmpty());
- const auto &bar = items[1];
+ const auto &bar = outline[1];
QVERIFY(!bar.isNull());
QCOMPARE(bar.name(), QStringLiteral("bar"));
QCOMPARE(bar.isOpen(), false);