X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-document.c;h=c1262933268517a6eafd6be84bd5ea9390a36f5c;hb=f9c2880d31bb2f5d4411849b9207c5d26a5c616a;hp=c2c73aa4edb6ce27d7502d1bf38881cb73986a0a;hpb=e3aaabdfd3f236f4e050686662e058d8288d8c2a;p=evince.git diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index c2c73aa4..c1262933 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -36,6 +36,8 @@ typedef struct _EvPageSize struct _EvDocumentPrivate { + gchar *uri; + gint n_pages; gboolean uniform; @@ -93,6 +95,11 @@ ev_document_finalize (GObject *object) { EvDocument *document = EV_DOCUMENT (object); + if (document->priv->uri) { + g_free (document->priv->uri); + document->priv->uri = NULL; + } + if (document->priv->page_sizes) { g_free (document->priv->page_sizes); document->priv->page_sizes = NULL; @@ -239,8 +246,8 @@ ev_document_load (EvDocument *document, /* Cache some info about the document to avoid * going to the backends since it requires locks */ + 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); @@ -254,6 +261,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)) { @@ -284,18 +293,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)); } @@ -303,10 +304,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; @@ -434,6 +432,14 @@ ev_document_render (EvDocument *document, return klass->render (document, rc); } +const gchar * +ev_document_get_uri (EvDocument *document) +{ + g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL); + + return document->priv->uri; +} + const gchar * ev_document_get_title (EvDocument *document) { @@ -464,6 +470,14 @@ ev_document_get_max_page_size (EvDocument *document, *height = document->priv->max_height; } +gboolean +ev_document_check_dimensions (EvDocument *document) +{ + g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE); + + return (document->priv->max_width > 0 && document->priv->max_height > 0); +} + gint ev_document_get_max_label_len (EvDocument *document) { @@ -557,6 +571,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; @@ -577,10 +593,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)