X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=backend%2Fpdf%2Fev-poppler.cc;h=03931a6d468e206a345ba2443e88a3589ceb6cc8;hb=9937a6c950dc4416ca049a589a9cffe12091eeb4;hp=5943a6d73d4d2f0ce081b0e3c5a40875761106db;hpb=584f014b63c56fe3770cba9682fc21c31e09a2e9;p=evince.git diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 5943a6d7..03931a6d 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -101,7 +101,8 @@ struct _PdfDocument PopplerDocument *document; gchar *password; - gboolean modified; + gboolean forms_modified; + gboolean annots_modified; PopplerFontInfo *font_info; PopplerFontsIter *fonts_iter; @@ -256,9 +257,13 @@ pdf_document_save (EvDocument *document, gboolean retval; GError *poppler_error = NULL; - if (pdf_document->modified) { + if (pdf_document->forms_modified || pdf_document->annots_modified) { retval = poppler_document_save (pdf_document->document, uri, &poppler_error); + if (retval) { + pdf_document->forms_modified = FALSE; + pdf_document->annots_modified = FALSE; + } } else { retval = poppler_document_save_a_copy (pdf_document->document, uri, &poppler_error); @@ -2320,6 +2325,12 @@ pdf_document_forms_get_form_fields (EvDocumentForms *document, (GDestroyNotify)g_object_unref) : NULL; } +static gboolean +pdf_document_forms_document_is_modified (EvDocumentForms *document) +{ + return PDF_DOCUMENT (document)->forms_modified; +} + static gchar * pdf_document_forms_form_field_text_get_text (EvDocumentForms *document, EvFormField *field) @@ -2349,7 +2360,7 @@ pdf_document_forms_form_field_text_set_text (EvDocumentForms *document, return; poppler_form_field_text_set_text (poppler_field, text); - PDF_DOCUMENT (document)->modified = TRUE; + PDF_DOCUMENT (document)->forms_modified = TRUE; } static void @@ -2364,7 +2375,7 @@ pdf_document_forms_form_field_button_set_state (EvDocumentForms *document, return; poppler_form_field_button_set_state (poppler_field, state); - PDF_DOCUMENT (document)->modified = TRUE; + PDF_DOCUMENT (document)->forms_modified = TRUE; } static gboolean @@ -2445,7 +2456,7 @@ pdf_document_forms_form_field_choice_select_item (EvDocumentForms *document, return; poppler_form_field_choice_select_item (poppler_field, index); - PDF_DOCUMENT (document)->modified = TRUE; + PDF_DOCUMENT (document)->forms_modified = TRUE; } static void @@ -2460,7 +2471,7 @@ pdf_document_forms_form_field_choice_toggle_item (EvDocumentForms *document, return; poppler_form_field_choice_toggle_item (poppler_field, index); - PDF_DOCUMENT (document)->modified = TRUE; + PDF_DOCUMENT (document)->forms_modified = TRUE; } static void @@ -2474,7 +2485,7 @@ pdf_document_forms_form_field_choice_unselect_all (EvDocumentForms *document, return; poppler_form_field_choice_unselect_all (poppler_field); - PDF_DOCUMENT (document)->modified = TRUE; + PDF_DOCUMENT (document)->forms_modified = TRUE; } static void @@ -2489,7 +2500,7 @@ pdf_document_forms_form_field_choice_set_text (EvDocumentForms *document, return; poppler_form_field_choice_set_text (poppler_field, text); - PDF_DOCUMENT (document)->modified = TRUE; + PDF_DOCUMENT (document)->forms_modified = TRUE; } static gchar * @@ -2512,6 +2523,7 @@ static void pdf_document_document_forms_iface_init (EvDocumentFormsInterface *iface) { iface->get_form_fields = pdf_document_forms_get_form_fields; + iface->document_is_modified = pdf_document_forms_document_is_modified; iface->form_field_text_get_text = pdf_document_forms_form_field_text_get_text; iface->form_field_text_set_text = pdf_document_forms_form_field_text_set_text; iface->form_field_button_set_state = pdf_document_forms_form_field_button_set_state; @@ -2546,6 +2558,7 @@ poppler_annot_color_to_gdk_color (PopplerAnnot *poppler_annot, static EvAnnotationTextIcon get_annot_text_icon (PopplerAnnotText *poppler_annot) { +#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT gchar *icon = poppler_annot_text_get_icon (poppler_annot); EvAnnotationTextIcon retval; @@ -2576,11 +2589,15 @@ get_annot_text_icon (PopplerAnnotText *poppler_annot) g_free (icon); return retval; +#else + return EV_ANNOTATION_TEXT_ICON_UNKNOWN; +#endif } static const gchar * get_poppler_annot_text_icon (EvAnnotationTextIcon icon) { +#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT switch (icon) { case EV_ANNOTATION_TEXT_ICON_NOTE: return POPPLER_ANNOT_TEXT_ICON_NOTE; @@ -2604,6 +2621,9 @@ get_poppler_annot_text_icon (EvAnnotationTextIcon icon) default: return POPPLER_ANNOT_TEXT_ICON_NOTE; } +#else + return "Note"; +#endif } static EvAnnotation * @@ -2839,6 +2859,12 @@ pdf_document_annotations_get_annotations (EvDocumentAnnotations *document_annota return mapping_list; } +static gboolean +pdf_document_annotations_document_is_modified (EvDocumentAnnotations *document_annotations) +{ + return PDF_DOCUMENT (document_annotations)->annots_modified; +} + #ifdef HAVE_POPPLER_PAGE_ADD_ANNOT static void pdf_document_annotations_add_annotation (EvDocumentAnnotations *document_annotations, @@ -2940,7 +2966,7 @@ pdf_document_annotations_add_annotation (EvDocumentAnnotations *document_annotat ev_mapping_list_ref (mapping_list)); } - pdf_document->modified = TRUE; + pdf_document->annots_modified = TRUE; } #endif /* HAVE_POPPLER_PAGE_ADD_ANNOT */ @@ -2999,13 +3025,14 @@ pdf_document_annotations_save_annotation (EvDocumentAnnotations *document_annota } } #endif /* HAVE_POPPLER_PAGE_ADD_ANNOT */ - PDF_DOCUMENT (document_annotations)->modified = TRUE; + PDF_DOCUMENT (document_annotations)->annots_modified = TRUE; } static void pdf_document_document_annotations_iface_init (EvDocumentAnnotationsInterface *iface) { iface->get_annotations = pdf_document_annotations_get_annotations; + iface->document_is_modified = pdf_document_annotations_document_is_modified; #ifdef HAVE_POPPLER_PAGE_ADD_ANNOT iface->add_annotation = pdf_document_annotations_add_annotation; #endif