[evince] libdocument: Add a property to determine a document has been modified



commit 147ca9015f0c30625519ca5b4ddb4d1a7fb56c5d
Author: Germán Poo-Caamaño <gpoo gnome org>
Date:   Fri May 12 10:48:10 2017 -0300

    libdocument: Add a property to determine a document has been modified
    
    The use case is to update the UI to save changes only when is
    necessary.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=767611

 libdocument/ev-document.c |   92 +++++++++++++++++++++++++++++++++++++++++++++
 libdocument/ev-document.h |    3 +
 2 files changed, 95 insertions(+), 0 deletions(-)
---
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c
index 6af9a02..e2b1cd9 100644
--- a/libdocument/ev-document.c
+++ b/libdocument/ev-document.c
@@ -30,6 +30,11 @@
 
 #define EV_DOCUMENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_DOCUMENT, 
EvDocumentPrivate))
 
+enum {
+       PROP_0,
+       PROP_MODIFIED
+};
+
 typedef struct _EvPageSize
 {
        gdouble width;
@@ -43,6 +48,7 @@ struct _EvDocumentPrivate
 
        gboolean        cache_loaded;
        gint            n_pages;
+       gboolean        modified;
 
        gboolean        uniform;
        gdouble         uniform_width;
@@ -132,6 +138,41 @@ ev_document_finalize (GObject *object)
 }
 
 static void
+ev_document_set_property (GObject      *object,
+                         guint         prop_id,
+                         const GValue *value,
+                         GParamSpec   *pspec)
+{
+       switch (prop_id) {
+       case PROP_MODIFIED:
+               ev_document_set_modified (EV_DOCUMENT (object),
+                                         g_value_get_boolean (value));
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+ev_document_get_property (GObject     *object,
+                         guint        prop_id,
+                         GValue      *value,
+                         GParamSpec  *pspec)
+{
+       EvDocument *document = EV_DOCUMENT (object);
+
+       switch (prop_id) {
+       case PROP_MODIFIED:
+               g_value_set_boolean (value, document->priv->modified);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
 ev_document_init (EvDocument *document)
 {
        document->priv = EV_DOCUMENT_GET_PRIVATE (document);
@@ -151,7 +192,58 @@ ev_document_class_init (EvDocumentClass *klass)
        klass->get_info = ev_document_impl_get_info;
        klass->get_backend_info = NULL;
 
+       g_object_class->get_property = ev_document_get_property;
+       g_object_class->set_property = ev_document_set_property;
        g_object_class->finalize = ev_document_finalize;
+
+       g_object_class_install_property (g_object_class,
+                                        PROP_MODIFIED,
+                                        g_param_spec_boolean ("modified",
+                                                              "Is modified",
+                                                              "Whether the document has been modified",
+                                                              FALSE,
+                                                              G_PARAM_READWRITE |
+                                                              G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * ev_document_get_modified:
+ * @document: an #EvDocument
+ *
+ * Returns: %TRUE iff the document has been modified.
+ *
+ * You can monitor changes to the modification state by connecting to the
+ * notify::modified signal on @document.
+ *
+ * Since: 3.28
+ */
+gboolean
+ev_document_get_modified (EvDocument *document)
+{
+       g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+       return document->priv->modified;
+}
+
+/**
+ * ev_document_set_modified:
+ * @document: an #EvDocument
+ * @modified: a boolean value to set the document as modified or not.
+ *
+ * Set the @document modification state as @modified.
+ *
+ * Since: 3.28
+ */
+void
+ev_document_set_modified (EvDocument *document,
+                         gboolean    modified)
+{
+       g_return_if_fail (EV_IS_DOCUMENT (document));
+
+       if (document->priv->modified != modified) {
+               document->priv->modified = modified;
+               g_object_notify (G_OBJECT (document), "modified");
+       }
 }
 
 void
diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h
index d1915f5..c7c53a2 100644
--- a/libdocument/ev-document.h
+++ b/libdocument/ev-document.h
@@ -151,6 +151,9 @@ gboolean         ev_document_fc_mutex_trylock     (void);
 EvDocumentInfo  *ev_document_get_info             (EvDocument      *document);
 gboolean         ev_document_get_backend_info     (EvDocument      *document,
                                                   EvDocumentBackendInfo *info);
+gboolean         ev_document_get_modified         (EvDocument      *document);
+void             ev_document_set_modified         (EvDocument      *document,
+                                                  gboolean         modified);
 gboolean         ev_document_load                 (EvDocument      *document,
                                                   const char      *uri,
                                                   GError         **error);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]