glib: Add PopplerPageRange type

This type will be used for getting of suggested page ranges from
opened document if it contains PrintPageRange viewer preference.

https://gitlab.freedesktop.org/poppler/poppler/issues/290
diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc
index e8742ab..5c9e6a2 100644
--- a/glib/poppler-document.cc
+++ b/glib/poppler-document.cc
@@ -1728,6 +1728,53 @@
   return retval;
 }
 
+/* PopplerPageRange */
+
+POPPLER_DEFINE_BOXED_TYPE (PopplerPageRange, poppler_page_range,
+			   poppler_page_range_copy,
+			   poppler_page_range_free)
+
+/**
+ * poppler_page_range_new:
+ *
+ * Creates a new #PopplerPageRange
+ *
+ * Returns: a new #PopplerPageRange, use poppler_page_range_free() to free it
+ */
+PopplerPageRange *
+poppler_page_range_new (void)
+{
+  return g_slice_new0 (PopplerPageRange);
+}
+
+/**
+ * poppler_page_range_copy:
+ * @range: a #PopplerPageRange to copy
+ *
+ * Creates a copy of @range
+ *
+ * Returns: a new allocated copy of @range
+ */
+PopplerPageRange *
+poppler_page_range_copy (PopplerPageRange *range)
+{
+  g_return_val_if_fail (range != nullptr, NULL);
+
+  return g_slice_dup (PopplerPageRange, range);
+}
+
+/**
+ * poppler_page_range_free:
+ * @range: a #PopplerPageRange
+ *
+ * Frees the given #PopplerPageRange
+ */
+void
+poppler_page_range_free (PopplerPageRange *range)
+{
+  g_slice_free (PopplerPageRange, range);
+}
+
 /**
  * poppler_document_get_permissions:
  * @document: A #PopplerDocument
diff --git a/glib/poppler-document.h b/glib/poppler-document.h
index a640b39..98ceb75 100644
--- a/glib/poppler-document.h
+++ b/glib/poppler-document.h
@@ -521,6 +521,30 @@
 POPPLER_PUBLIC
 void           poppler_ps_file_free           (PopplerPSFile   *ps_file);
 
+/**
+ * PopplerPageRange:
+ * @start_page: first page in the range of pages
+ * @end_page:   last page in the range of pages
+ *
+ * A #PopplerPageRange is used to specify a range of pages.
+ *
+ * Since: 0.78
+ */
+#define POPPLER_TYPE_PAGE_RANGE               (poppler_page_range_get_type ())
+struct _PopplerPageRange
+{
+  gint start_page;
+  gint end_page;
+};
+
+POPPLER_PUBLIC
+GType             poppler_page_range_get_type (void) G_GNUC_CONST;
+POPPLER_PUBLIC
+PopplerPageRange *poppler_page_range_new      ();
+POPPLER_PUBLIC
+PopplerPageRange *poppler_page_range_copy     (PopplerPageRange *range);
+POPPLER_PUBLIC
+void              poppler_page_range_free     (PopplerPageRange *range);
 
 
 G_END_DECLS
diff --git a/glib/poppler.h b/glib/poppler.h
index 91b0b4f..5d0f16d 100644
--- a/glib/poppler.h
+++ b/glib/poppler.h
@@ -211,6 +211,7 @@
 typedef struct _PopplerStructureElement    PopplerStructureElement;
 typedef struct _PopplerStructureElementIter PopplerStructureElementIter;
 typedef struct _PopplerTextSpan            PopplerTextSpan;
+typedef struct _PopplerPageRange           PopplerPageRange;
 
 /**
  * PopplerBackend: