]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-document.c
[shell] Do not link to poppler directly
[evince.git] / libdocument / ev-document.c
index 38c12f2fd92f15688bd52a16e25571cde2a3ded7..edebe372ea23f5494efe17c7f0cc8135e24ff01f 100644 (file)
@@ -141,6 +141,7 @@ ev_document_class_init (EvDocumentClass *klass)
 
        klass->get_page = ev_document_impl_get_page;
        klass->get_info = ev_document_impl_get_info;
+       klass->get_backend_info = NULL;
 
        g_object_class->finalize = ev_document_finalize;
 }
@@ -248,7 +249,6 @@ ev_document_load (EvDocument  *document,
                 */
                priv->uri = g_strdup (uri);
                priv->n_pages = _ev_document_get_n_pages (document);
-               priv->info = _ev_document_get_info (document);
 
                for (i = 0; i < priv->n_pages; i++) {
                        EvPage     *page = ev_document_get_page (document, i);
@@ -262,6 +262,8 @@ ev_document_load (EvDocument  *document,
                        if (i == 0) {
                                priv->uniform_width = page_width;
                                priv->uniform_height = page_height;
+                               priv->max_width = priv->uniform_width;
+                               priv->max_height = priv->uniform_height;
                        } else if (priv->uniform &&
                                   (priv->uniform_width != page_width ||
                                    priv->uniform_height != page_height)) {
@@ -292,18 +294,10 @@ ev_document_load (EvDocument  *document,
 
                        page_label = _ev_document_get_page_label (document, page);
                        if (page_label) {
-                               if (priv->page_labels) {
-                                       priv->page_labels[i] = page_label;
-                               } else {
-                                       gchar *numeric_label;
-
-                                       numeric_label = g_strdup_printf ("%d", i + 1);
-                                       if (strcmp (numeric_label, page_label) != 0) {
-                                               priv->page_labels = g_new0 (gchar *, priv->n_pages);
-                                               priv->page_labels[i] = page_label;
-                                       }
-                                       g_free (numeric_label);
-                               }
+                               if (!priv->page_labels)
+                                       priv->page_labels = g_new0 (gchar *, priv->n_pages);
+
+                               priv->page_labels[i] = page_label;
                                priv->max_label = MAX (priv->max_label,
                                                       g_utf8_strlen (page_label, 256));
                        }
@@ -311,10 +305,7 @@ ev_document_load (EvDocument  *document,
                        g_object_unref (page);
                }
 
-               if (priv->uniform) {
-                       priv->max_width = priv->uniform_width;
-                       priv->max_height = priv->uniform_height;
-               }
+               priv->info = _ev_document_get_info (document);
        }
 
        return retval;
@@ -433,6 +424,18 @@ ev_document_get_info (EvDocument *document)
        return document->priv->info;
 }
 
+gboolean
+ev_document_get_backend_info (EvDocument *document, EvDocumentBackendInfo *info)
+{
+       g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+       EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+       if (klass->get_backend_info == NULL)
+               return FALSE;
+
+       return klass->get_backend_info (document, info);
+}
+
 cairo_surface_t *
 ev_document_render (EvDocument      *document,
                    EvRenderContext *rc)
@@ -581,6 +584,8 @@ ev_document_info_copy (EvDocumentInfo *info)
        copy->ui_hints = info->ui_hints;
        copy->permissions = info->permissions;
        copy->n_pages = info->n_pages;
+       copy->license = ev_document_license_copy (info->license);
+
        copy->fields_mask = info->fields_mask;
 
        return copy;
@@ -601,10 +606,71 @@ ev_document_info_free (EvDocumentInfo *info)
        g_free (info->producer);
        g_free (info->linearized);
        g_free (info->security);
-       
+       ev_document_license_free (info->license);
+
        g_free (info);
 }
 
+/* EvDocumentLicense */
+EV_DEFINE_BOXED_TYPE (EvDocumentLicense, ev_document_license, ev_document_license_copy, ev_document_license_free)
+
+EvDocumentLicense *
+ev_document_license_new (void)
+{
+       return g_new0 (EvDocumentLicense, 1);
+}
+
+EvDocumentLicense *
+ev_document_license_copy (EvDocumentLicense *license)
+{
+       EvDocumentLicense *new_license;
+
+       if (!license)
+               return NULL;
+
+       new_license = ev_document_license_new ();
+
+       if (license->text)
+               new_license->text = g_strdup (license->text);
+       if (license->uri)
+               new_license->uri = g_strdup (license->uri);
+       if (license->web_statement)
+               new_license->web_statement = g_strdup (license->web_statement);
+
+       return new_license;
+}
+
+void
+ev_document_license_free (EvDocumentLicense *license)
+{
+       if (!license)
+               return;
+
+       g_free (license->text);
+       g_free (license->uri);
+       g_free (license->web_statement);
+
+       g_free (license);
+}
+
+const gchar *
+ev_document_license_get_text (EvDocumentLicense *license)
+{
+       return license->text;
+}
+
+const gchar *
+ev_document_license_get_uri (EvDocumentLicense *license)
+{
+       return license->uri;
+}
+
+const gchar *
+ev_document_license_get_web_statement (EvDocumentLicense *license)
+{
+       return license->web_statement;
+}
+
 /* EvRectangle */
 EV_DEFINE_BOXED_TYPE (EvRectangle, ev_rectangle, ev_rectangle_copy, ev_rectangle_free)