[gimp/soc-2009-dynamics] Make sure changes dynamics are properly saved to disk



commit c8db73493240b14213c826c2056ab61f86b4d44e
Author: Michael Natterer <mitch gimp org>
Date:   Sun Oct 11 21:39:46 2009 +0200

    Make sure changes dynamics are properly saved to disk
    
    Implement GObject::dispatch_properties_changed() and call
    gimp_data_dirty() if a serializable property changed.

 app/core/gimpdynamics.c |   35 ++++++++++++++++++++++++++++++-----
 1 files changed, 30 insertions(+), 5 deletions(-)
---
diff --git a/app/core/gimpdynamics.c b/app/core/gimpdynamics.c
index d67c444..ceb38e3 100644
--- a/app/core/gimpdynamics.c
+++ b/app/core/gimpdynamics.c
@@ -61,6 +61,10 @@ static void          gimp_dynamics_get_property  (GObject      *object,
                                                   guint         property_id,
                                                   GValue       *value,
                                                   GParamSpec   *pspec);
+static void
+       gimp_dynamics_dispatch_properties_changed (GObject      *object,
+                                                  guint         n_pspecs,
+                                                  GParamSpec  **pspecs);
 
 static const gchar * gimp_dynamics_get_extension (GimpData     *data);
 
@@ -84,12 +88,13 @@ gimp_dynamics_class_init (GimpDynamicsClass *klass)
   GObjectClass  *object_class = G_OBJECT_CLASS (klass);
   GimpDataClass *data_class   = GIMP_DATA_CLASS (klass);
 
-  object_class->finalize     = gimp_dynamics_finalize;
-  object_class->set_property = gimp_dynamics_set_property;
-  object_class->get_property = gimp_dynamics_get_property;
+  object_class->finalize                    = gimp_dynamics_finalize;
+  object_class->set_property                = gimp_dynamics_set_property;
+  object_class->get_property                = gimp_dynamics_get_property;
+  object_class->dispatch_properties_changed = gimp_dynamics_dispatch_properties_changed;
 
-  data_class->save           = gimp_dynamics_save;
-  data_class->get_extension  = gimp_dynamics_get_extension;
+  data_class->save                          = gimp_dynamics_save;
+  data_class->get_extension                 = gimp_dynamics_get_extension;
 
   GIMP_CONFIG_INSTALL_PROP_STRING  (object_class, PROP_NAME,
                                     "name", NULL,
@@ -296,6 +301,26 @@ gimp_dynamics_get_property (GObject    *object,
     }
 }
 
+static void
+gimp_dynamics_dispatch_properties_changed (GObject     *object,
+                                           guint        n_pspecs,
+                                           GParamSpec **pspecs)
+{
+  gint i;
+
+  G_OBJECT_CLASS (parent_class)->dispatch_properties_changed (object,
+                                                              n_pspecs, pspecs);
+
+  for (i = 0; i < n_pspecs; i++)
+    {
+      if (pspecs[i]->flags & GIMP_CONFIG_PARAM_SERIALIZE)
+        {
+          gimp_data_dirty (GIMP_DATA (object));
+          break;
+        }
+    }
+}
+
 static const gchar *
 gimp_dynamics_get_extension (GimpData *data)
 {



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