[gimp] app: Keep track of GimpImage export dirtiness



commit 1662ff2523fd344929f3228095ccf8470d442d60
Author: Martin Nordholts <martinn src gnome org>
Date:   Fri Jul 3 22:51:11 2009 +0200

    app: Keep track of GimpImage export dirtiness
    
    Since save and export are separate activities we need to keep track of
    image dirtiness for both of them. For this purpose, add a
    'export_dirty' member to GimpImage which has the same semantics as
    'dirty', but for export. Set it to clean whenever a document is
    exported by whatever means. Do this with a new function
    gimp_image_export_clean_all(). Also add gimp_image_is_export_dirty().

 app/core/gimpimage.c |   26 ++++++++++++++++++++++++++
 app/core/gimpimage.h |    4 ++++
 app/file/file-open.c |    5 ++++-
 app/file/file-save.c |    4 ++++
 4 files changed, 38 insertions(+), 1 deletions(-)
---
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index 9a79828..ba876e8 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -600,6 +600,8 @@ gimp_image_init (GimpImage *image)
   image->dirty_time            = 0;
   image->undo_freeze_count     = 0;
 
+  image->export_dirty          = 1;
+
   image->instance_count        = 0;
   image->disp_count            = 0;
 
@@ -2028,6 +2030,7 @@ gimp_image_dirty (GimpImage     *image,
   g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
   image->dirty++;
+  image->export_dirty++;
 
   if (! image->dirty_time)
     image->dirty_time = time (NULL);
@@ -2046,6 +2049,7 @@ gimp_image_clean (GimpImage     *image,
   g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
   image->dirty--;
+  image->export_dirty--;
 
   g_signal_emit (image, gimp_image_signals[CLEAN], 0, dirty_mask);
 
@@ -2065,6 +2069,16 @@ gimp_image_clean_all (GimpImage *image)
   g_signal_emit (image, gimp_image_signals[CLEAN], 0, GIMP_DIRTY_ALL);
 }
 
+void
+gimp_image_export_clean_all (GimpImage *image)
+{
+  g_return_if_fail (GIMP_IS_IMAGE (image));
+
+  image->export_dirty = 0;
+
+  g_signal_emit (image, gimp_image_signals[CLEAN], 0, GIMP_DIRTY_ALL);
+}
+
 /**
  * gimp_image_is_dirty:
  * @image:
@@ -2078,6 +2092,18 @@ gimp_image_is_dirty (const GimpImage *image)
 }
 
 /**
+ * gimp_image_is_export_dirty:
+ * @image:
+ *
+ * Returns: True if the image export is dirty, false otherwise.
+ **/
+gboolean
+gimp_image_is_export_dirty (const GimpImage *image)
+{
+  return image->export_dirty != 0;
+}
+
+/**
  * gimp_image_saved:
  * @image:
  * @uri:
diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h
index b45c946..0f21da4 100644
--- a/app/core/gimpimage.h
+++ b/app/core/gimpimage.h
@@ -121,6 +121,8 @@ struct _GimpImage
   guint              dirty_time;            /*  time when image became dirty */
   gint               undo_freeze_count;     /*  counts the _freeze's         */
 
+  gint               export_dirty;          /*  'dirty' but for export       */
+
   gint               instance_count;        /*  number of instances          */
   gint               disp_count;            /*  number of displays           */
 
@@ -350,6 +352,8 @@ gint            gimp_image_clean                 (GimpImage          *image,
                                                   GimpDirtyMask       dirty_mask);
 void            gimp_image_clean_all             (GimpImage          *image);
 gint            gimp_image_is_dirty              (const GimpImage    *image);
+gboolean        gimp_image_is_export_dirty       (const GimpImage    *image);
+void            gimp_image_export_clean_all      (GimpImage          *image);
 
 
 /*  flush this image's displays  */
diff --git a/app/file/file-open.c b/app/file/file-open.c
index 0f52510..a5fb9e0 100644
--- a/app/file/file-open.c
+++ b/app/file/file-open.c
@@ -598,7 +598,10 @@ file_open_sanitize_image (GimpImage *image,
   while (image->undo_freeze_count)
     gimp_image_undo_thaw (image);
 
-  /* set the image to clean  */
+  /* Set the image to clean. Note that export dirtiness is not set to
+   * clean here; we can only consider export clean after the first
+   * export
+   */
   gimp_image_clean_all (image);
 
   /* make sure the entire projection is properly constructed, because
diff --git a/app/file/file-save.c b/app/file/file-save.c
index 436933b..fb4dbda 100644
--- a/app/file/file-save.c
+++ b/app/file/file-save.c
@@ -162,6 +162,10 @@ file_save (Gimp                *gimp,
 
           gimp_image_clean_all (image);
         }
+      else if (export)
+        {
+          gimp_image_export_clean_all (image);
+        }
 
       if (export)
         gimp_image_exported (image, uri);



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