]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-document.c
[comics] Do not initalize GPid's with -1
[evince.git] / libdocument / ev-document.c
index a74a0e397c79f9932089a2964b16838204cd3605..4906851526e061e0c9d09ce743b12d9406725312 100644 (file)
@@ -36,6 +36,8 @@ typedef struct _EvPageSize
 
 struct _EvDocumentPrivate
 {
 
 struct _EvDocumentPrivate
 {
+       gchar          *uri;
+
        gint            n_pages;
 
        gboolean        uniform;
        gint            n_pages;
 
        gboolean        uniform;
@@ -93,6 +95,11 @@ ev_document_finalize (GObject *object)
 {
        EvDocument *document = EV_DOCUMENT (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;
        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
                 */
                /* 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->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);
 
                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;
                        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)) {
                        } 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);
                }
 
                        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;
        }
 
        return retval;
@@ -352,6 +358,8 @@ _ev_document_get_n_pages (EvDocument  *document)
 gint
 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;
 }
 
        return document->priv->n_pages;
 }
 
@@ -372,6 +380,9 @@ ev_document_get_page_size (EvDocument *document,
                           double     *width,
                           double     *height)
 {
                           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 :
        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)
 {
 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);
        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)
 {
 EvDocumentInfo *
 ev_document_get_info (EvDocument *document)
 {
+       g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
        return document->priv->info;
 }
 
        return document->priv->info;
 }
 
@@ -424,9 +440,19 @@ ev_document_render (EvDocument      *document,
        return klass->render (document, rc);
 }
 
        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)
 {
 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;
 }
        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)
 {
 gboolean
 ev_document_is_page_size_uniform (EvDocument *document)
 {
+       g_return_val_if_fail (EV_IS_DOCUMENT (document), TRUE);
+
        return document->priv->uniform;
 }
 
        return document->priv->uniform;
 }
 
@@ -442,21 +470,35 @@ ev_document_get_max_page_size (EvDocument *document,
                               gdouble    *width,
                               gdouble    *height)
 {
                               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;
 }
 
        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)
 {
 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)
 {
        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;
 }
 
        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;
 
        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 &&
         /* 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->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;
        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);
        g_free (info->producer);
        g_free (info->linearized);
        g_free (info->security);
-       
+       ev_document_license_free (info->license);
+
        g_free (info);
 }
 
        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)
 
 /* EvRectangle */
 EV_DEFINE_BOXED_TYPE (EvRectangle, ev_rectangle, ev_rectangle_copy, ev_rectangle_free)