X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-document.c;h=4906851526e061e0c9d09ce743b12d9406725312;hb=7d59434cbd7ea6bdd42a6f3223a47cbb06ba4069;hp=a74a0e397c79f9932089a2964b16838204cd3605;hpb=c4b192c34c4758bd078d1a212d69c6ae5084d6c8;p=evince.git diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index a74a0e39..49068515 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)) { @@ -303,10 +312,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; @@ -352,6 +358,8 @@ _ev_document_get_n_pages (EvDocument *document) gint ev_document_get_n_pages (EvDocument *document) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), 0); + return document->priv->n_pages; } @@ -372,6 +380,9 @@ ev_document_get_page_size (EvDocument *document, double *width, double *height) { + g_return_if_fail (EV_IS_DOCUMENT (document)); + g_return_if_fail (page_index >= 0 || page_index < document->priv->n_pages); + if (width) *width = document->priv->uniform ? document->priv->uniform_width : @@ -396,6 +407,9 @@ gchar * ev_document_get_page_label (EvDocument *document, gint page_index) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL); + g_return_val_if_fail (page_index >= 0 || page_index < document->priv->n_pages, NULL); + return (document->priv->page_labels && document->priv->page_labels[page_index]) ? g_strdup (document->priv->page_labels[page_index]) : g_strdup_printf ("%d", page_index + 1); @@ -412,6 +426,8 @@ _ev_document_get_info (EvDocument *document) EvDocumentInfo * ev_document_get_info (EvDocument *document) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL); + return document->priv->info; } @@ -424,9 +440,19 @@ 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) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL); + return (document->priv->info->fields_mask & EV_DOCUMENT_INFO_TITLE) ? document->priv->info->title : NULL; } @@ -434,6 +460,8 @@ ev_document_get_title (EvDocument *document) gboolean ev_document_is_page_size_uniform (EvDocument *document) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), TRUE); + return document->priv->uniform; } @@ -442,21 +470,35 @@ ev_document_get_max_page_size (EvDocument *document, gdouble *width, gdouble *height) { + g_return_if_fail (EV_IS_DOCUMENT (document)); + if (width) *width = document->priv->max_width; if (height) *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) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), -1); + return document->priv->max_label; } gboolean ev_document_has_text_page_labels (EvDocument *document) { + g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE); + return document->priv->page_labels != NULL; } @@ -470,6 +512,10 @@ ev_document_find_page_by_label (EvDocument *document, gchar *endptr = NULL; EvDocumentPrivate *priv = document->priv; + g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE); + g_return_val_if_fail (page_label != NULL, FALSE); + g_return_val_if_fail (page_index != NULL, FALSE); + /* First, look for a literal label match */ for (i = 0; priv->page_labels && i < priv->n_pages; i ++) { if (priv->page_labels[i] != NULL && @@ -533,6 +579,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; @@ -553,10 +601,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)