X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-document.c;h=d99a5968a6856fd8ba54fb8e7e983534f3d4d5c5;hb=refs%2Ftags%2FEVINCE_2_31_2;hp=5c63b25f9d86bd7f2d84b0bbd1ff796c449d6cab;hpb=8c149ccd2a3cced2cd0a676ad6f7b8d33fd98404;p=evince.git diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index 5c63b25f..d99a5968 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ @@ -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; @@ -134,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; } @@ -239,8 +247,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 +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)) { @@ -284,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)); } @@ -303,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; @@ -425,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) @@ -434,6 +445,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) { @@ -565,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; @@ -585,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)