[evince] libdocument: Add a property to determine a document has been modified
- From: Germán Poo-Caamaño <gpoo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] libdocument: Add a property to determine a document has been modified
- Date: Sun, 1 Oct 2017 12:53:35 +0000 (UTC)
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]