add new method GimpConfigInterface::copy() which by default calls
2008-02-01 Michael Natterer <mitch@gimp.org> * libgimpconfig/gimpconfig-iface.[ch]: add new method GimpConfigInterface::copy() which by default calls gimp_config_sync() but is overridable for objects which are not entirely property-defined or otherwise evil. Freeze/thaw property notifications in deserialize() and reset(). * libgimpconfig/gimpconfig-utils.c (gimp_config_sync): freeze/thaw property notifications on the dest object. svn path=/trunk/; revision=24767
This commit is contained in:

committed by
Michael Natterer

parent
44cf4587a7
commit
69d2abcb29
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2008-02-01 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
|
* libgimpconfig/gimpconfig-iface.[ch]: add new method
|
||||||
|
GimpConfigInterface::copy() which by default calls
|
||||||
|
gimp_config_sync() but is overridable for objects which are not
|
||||||
|
entirely property-defined or otherwise evil.
|
||||||
|
|
||||||
|
Freeze/thaw property notifications in deserialize() and reset().
|
||||||
|
|
||||||
|
* libgimpconfig/gimpconfig-utils.c (gimp_config_sync): freeze/thaw
|
||||||
|
property notifications on the dest object.
|
||||||
|
|
||||||
2008-02-01 Sven Neumann <sven@gimp.org>
|
2008-02-01 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
* plug-ins/print/print.c: some minor cleanups and preparation for
|
* plug-ins/print/print.c: some minor cleanups and preparation for
|
||||||
|
@ -58,6 +58,9 @@ static GimpConfig * gimp_config_iface_duplicate (GimpConfig *config);
|
|||||||
static gboolean gimp_config_iface_equal (GimpConfig *a,
|
static gboolean gimp_config_iface_equal (GimpConfig *a,
|
||||||
GimpConfig *b);
|
GimpConfig *b);
|
||||||
static void gimp_config_iface_reset (GimpConfig *config);
|
static void gimp_config_iface_reset (GimpConfig *config);
|
||||||
|
static gboolean gimp_config_iface_copy (GimpConfig *src,
|
||||||
|
GimpConfig *dest,
|
||||||
|
GParamFlags flags);
|
||||||
|
|
||||||
|
|
||||||
GType
|
GType
|
||||||
@ -95,6 +98,7 @@ gimp_config_iface_base_init (GimpConfigInterface *config_iface)
|
|||||||
config_iface->duplicate = gimp_config_iface_duplicate;
|
config_iface->duplicate = gimp_config_iface_duplicate;
|
||||||
config_iface->equal = gimp_config_iface_equal;
|
config_iface->equal = gimp_config_iface_equal;
|
||||||
config_iface->reset = gimp_config_iface_reset;
|
config_iface->reset = gimp_config_iface_reset;
|
||||||
|
config_iface->copy = gimp_config_iface_copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* always set these to NULL since we don't want to inherit them
|
/* always set these to NULL since we don't want to inherit them
|
||||||
@ -167,7 +171,7 @@ gimp_config_iface_duplicate (GimpConfig *config)
|
|||||||
|
|
||||||
g_free (construct_params);
|
g_free (construct_params);
|
||||||
|
|
||||||
gimp_config_sync (object, dup, 0);
|
gimp_config_copy (config, GIMP_CONFIG (dup), 0);
|
||||||
|
|
||||||
return GIMP_CONFIG (dup);
|
return GIMP_CONFIG (dup);
|
||||||
}
|
}
|
||||||
@ -236,6 +240,14 @@ gimp_config_iface_reset (GimpConfig *config)
|
|||||||
gimp_config_reset_properties (G_OBJECT (config));
|
gimp_config_reset_properties (G_OBJECT (config));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gimp_config_iface_copy (GimpConfig *src,
|
||||||
|
GimpConfig *dest,
|
||||||
|
GParamFlags flags)
|
||||||
|
{
|
||||||
|
return gimp_config_sync (G_OBJECT (src), G_OBJECT (dest), flags);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gimp_config_serialize_to_file:
|
* gimp_config_serialize_to_file:
|
||||||
* @config: a #GObject that implements the #GimpConfigInterface.
|
* @config: a #GObject that implements the #GimpConfigInterface.
|
||||||
@ -340,7 +352,7 @@ gimp_config_serialize_to_string (GimpConfig *config,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gimp_config_deserialize:
|
* gimp_config_deserialize_file:
|
||||||
* @config: a #GObject that implements the #GimpConfigInterface.
|
* @config: a #GObject that implements the #GimpConfigInterface.
|
||||||
* @filename: the name of the file to read configuration from.
|
* @filename: the name of the file to read configuration from.
|
||||||
* @data: user data passed to the deserialize implementation.
|
* @data: user data passed to the deserialize implementation.
|
||||||
@ -372,9 +384,13 @@ gimp_config_deserialize_file (GimpConfig *config,
|
|||||||
if (! scanner)
|
if (! scanner)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
g_object_freeze_notify (G_OBJECT (config));
|
||||||
|
|
||||||
success = GIMP_CONFIG_GET_INTERFACE (config)->deserialize (config,
|
success = GIMP_CONFIG_GET_INTERFACE (config)->deserialize (config,
|
||||||
scanner, 0, data);
|
scanner, 0, data);
|
||||||
|
|
||||||
|
g_object_thaw_notify (G_OBJECT (config));
|
||||||
|
|
||||||
gimp_scanner_destroy (scanner);
|
gimp_scanner_destroy (scanner);
|
||||||
|
|
||||||
if (! success)
|
if (! success)
|
||||||
@ -415,9 +431,13 @@ gimp_config_deserialize_string (GimpConfig *config,
|
|||||||
|
|
||||||
scanner = gimp_scanner_new_string (text, text_len, error);
|
scanner = gimp_scanner_new_string (text, text_len, error);
|
||||||
|
|
||||||
|
g_object_freeze_notify (G_OBJECT (config));
|
||||||
|
|
||||||
success = GIMP_CONFIG_GET_INTERFACE (config)->deserialize (config,
|
success = GIMP_CONFIG_GET_INTERFACE (config)->deserialize (config,
|
||||||
scanner, 0, data);
|
scanner, 0, data);
|
||||||
|
|
||||||
|
g_object_thaw_notify (G_OBJECT (config));
|
||||||
|
|
||||||
gimp_scanner_destroy (scanner);
|
gimp_scanner_destroy (scanner);
|
||||||
|
|
||||||
if (! success)
|
if (! success)
|
||||||
@ -535,5 +555,46 @@ gimp_config_reset (GimpConfig *config)
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GIMP_IS_CONFIG (config));
|
g_return_if_fail (GIMP_IS_CONFIG (config));
|
||||||
|
|
||||||
|
g_object_freeze_notify (G_OBJECT (config));
|
||||||
|
|
||||||
GIMP_CONFIG_GET_INTERFACE (config)->reset (config);
|
GIMP_CONFIG_GET_INTERFACE (config)->reset (config);
|
||||||
|
|
||||||
|
g_object_thaw_notify (G_OBJECT (config));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gimp_config_copy:
|
||||||
|
* @src: a #GObject that implements the #GimpConfigInterface.
|
||||||
|
* @dest: another #GObject of the same type as @a.
|
||||||
|
* @flags: a mask of GParamFlags
|
||||||
|
*
|
||||||
|
* Compares all read- and write-able properties from @src and @dest
|
||||||
|
* that have all @flags set. Differing values are then copied from
|
||||||
|
* @src to @dest. If @flags is 0, all differing read/write properties.
|
||||||
|
*
|
||||||
|
* Properties marked as "construct-only" are not touched.
|
||||||
|
*
|
||||||
|
* Return value: %TRUE if @dest was modified, %FALSE otherwise
|
||||||
|
*
|
||||||
|
* Since: GIMP 2.6
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gimp_config_copy (GimpConfig *src,
|
||||||
|
GimpConfig *dest,
|
||||||
|
GParamFlags flags)
|
||||||
|
{
|
||||||
|
gboolean changed;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GIMP_IS_CONFIG (src), FALSE);
|
||||||
|
g_return_val_if_fail (GIMP_IS_CONFIG (dest), FALSE);
|
||||||
|
g_return_val_if_fail (G_TYPE_FROM_INSTANCE (src) == G_TYPE_FROM_INSTANCE (dest),
|
||||||
|
FALSE);
|
||||||
|
|
||||||
|
g_object_freeze_notify (G_OBJECT (dest));
|
||||||
|
|
||||||
|
changed = GIMP_CONFIG_GET_INTERFACE (src)->copy (src, dest, flags);
|
||||||
|
|
||||||
|
g_object_thaw_notify (G_OBJECT (dest));
|
||||||
|
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,9 @@ struct _GimpConfigInterface
|
|||||||
gboolean (* equal) (GimpConfig *a,
|
gboolean (* equal) (GimpConfig *a,
|
||||||
GimpConfig *b);
|
GimpConfig *b);
|
||||||
void (* reset) (GimpConfig *config);
|
void (* reset) (GimpConfig *config);
|
||||||
|
gboolean (* copy) (GimpConfig *src,
|
||||||
|
GimpConfig *dest,
|
||||||
|
GParamFlags flags);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -95,6 +98,9 @@ gpointer gimp_config_duplicate (GimpConfig *config);
|
|||||||
gboolean gimp_config_is_equal_to (GimpConfig *a,
|
gboolean gimp_config_is_equal_to (GimpConfig *a,
|
||||||
GimpConfig *b);
|
GimpConfig *b);
|
||||||
void gimp_config_reset (GimpConfig *config);
|
void gimp_config_reset (GimpConfig *config);
|
||||||
|
gboolean gimp_config_copy (GimpConfig *src,
|
||||||
|
GimpConfig *dest,
|
||||||
|
GParamFlags flags);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -216,6 +216,8 @@ gimp_config_sync (GObject *src,
|
|||||||
if (!diff)
|
if (!diff)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
g_object_freeze_notify (G_OBJECT (dest));
|
||||||
|
|
||||||
for (list = diff; list; list = list->next)
|
for (list = diff; list; list = list->next)
|
||||||
{
|
{
|
||||||
GParamSpec *prop_spec = list->data;
|
GParamSpec *prop_spec = list->data;
|
||||||
@ -233,6 +235,8 @@ gimp_config_sync (GObject *src,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_thaw_notify (G_OBJECT (dest));
|
||||||
|
|
||||||
g_list_free (diff);
|
g_list_free (diff);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -306,9 +310,9 @@ gimp_config_reset_properties (GObject *object)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (property_specs);
|
|
||||||
|
|
||||||
g_object_thaw_notify (object);
|
g_object_thaw_notify (object);
|
||||||
|
|
||||||
|
g_free (property_specs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user