[gimp] app: add a GOutputStream* parameter to GimpData::save()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add a GOutputStream* parameter to GimpData::save()
- Date: Thu, 3 Jul 2014 21:49:12 +0000 (UTC)
commit aab55c34c83490869865f097d8707c3e40f4c81d
Author: Michael Natterer <mitch gimp org>
Date: Thu Jul 3 23:44:38 2014 +0200
app: add a GOutputStream* parameter to GimpData::save()
Open/close the stream generically in GimpData. Improves error handling
and simplifies the save() functions.
app/core/gimpbrushgenerated-save.c | 21 +++------------------
app/core/gimpbrushgenerated-save.h | 5 +++--
app/core/gimpcurve-save.c | 15 ++++++++-------
app/core/gimpcurve-save.h | 5 +++--
app/core/gimpdata.c | 31 ++++++++++++++++++++++++++++++-
app/core/gimpdata.h | 9 +++++----
app/core/gimpdynamics-save.c | 15 ++++++++-------
app/core/gimpdynamics-save.h | 5 +++--
app/core/gimpgradient-save.c | 21 +++------------------
app/core/gimpgradient-save.h | 11 ++++++-----
app/core/gimppalette-save.c | 31 ++++++++-----------------------
app/core/gimppalette-save.h | 5 +++--
app/core/gimptoolpreset-save.c | 15 ++++++++-------
app/core/gimptoolpreset-save.h | 5 +++--
14 files changed, 94 insertions(+), 100 deletions(-)
---
diff --git a/app/core/gimpbrushgenerated-save.c b/app/core/gimpbrushgenerated-save.c
index 25d6bbb..73c794f 100644
--- a/app/core/gimpbrushgenerated-save.c
+++ b/app/core/gimpbrushgenerated-save.c
@@ -33,12 +33,12 @@
gboolean
-gimp_brush_generated_save (GimpData *data,
- GError **error)
+gimp_brush_generated_save (GimpData *data,
+ GOutputStream *output,
+ GError **error)
{
GimpBrushGenerated *brush = GIMP_BRUSH_GENERATED (data);
const gchar *name = gimp_object_get_name (data);
- GOutputStream *output;
GString *string;
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
gsize bytes_written;
@@ -47,19 +47,6 @@ gimp_brush_generated_save (GimpData *data,
g_return_val_if_fail (name != NULL && *name != '\0', FALSE);
- output = G_OUTPUT_STREAM (g_file_replace (gimp_data_get_file (data),
- NULL, FALSE, G_FILE_CREATE_NONE,
- NULL, &my_error));
- if (! output)
- {
- g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
- _("Could not open '%s' for writing: %s"),
- gimp_file_get_utf8_name (gimp_data_get_file (data)),
- my_error->message);
- g_clear_error (&my_error);
- return FALSE;
- }
-
/* write magic header */
string = g_string_new ("GIMP-VBR\n");
@@ -130,12 +117,10 @@ gimp_brush_generated_save (GimpData *data,
my_error->message);
g_clear_error (&my_error);
g_string_free (string, TRUE);
- g_object_unref (output);
return FALSE;
}
g_string_free (string, TRUE);
- g_object_unref (output);
return TRUE;
}
diff --git a/app/core/gimpbrushgenerated-save.h b/app/core/gimpbrushgenerated-save.h
index 8bca39e..89924e5 100644
--- a/app/core/gimpbrushgenerated-save.h
+++ b/app/core/gimpbrushgenerated-save.h
@@ -22,8 +22,9 @@
/* don't call this function directly, use gimp_data_save() instead */
-gboolean gimp_brush_generated_save (GimpData *data,
- GError **error);
+gboolean gimp_brush_generated_save (GimpData *data,
+ GOutputStream *output,
+ GError **error);
#endif /* __GIMP_BRUSH_GENERATED_SAVE_H__ */
diff --git a/app/core/gimpcurve-save.c b/app/core/gimpcurve-save.c
index 1790178..c533061 100644
--- a/app/core/gimpcurve-save.c
+++ b/app/core/gimpcurve-save.c
@@ -29,15 +29,16 @@
gboolean
-gimp_curve_save (GimpData *data,
- GError **error)
+gimp_curve_save (GimpData *data,
+ GOutputStream *output,
+ GError **error)
{
g_return_val_if_fail (GIMP_IS_CURVE (data), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- return gimp_config_serialize_to_gfile (GIMP_CONFIG (data),
- gimp_data_get_file (data),
- "GIMP curve file",
- "end of GIMP curve file",
- NULL, error);
+ return gimp_config_serialize_to_stream (GIMP_CONFIG (data),
+ output,
+ "GIMP curve file",
+ "end of GIMP curve file",
+ NULL, error);
}
diff --git a/app/core/gimpcurve-save.h b/app/core/gimpcurve-save.h
index c5870d3..99d425e 100644
--- a/app/core/gimpcurve-save.h
+++ b/app/core/gimpcurve-save.h
@@ -20,8 +20,9 @@
/* don't call this function directly, use gimp_data_save() instead */
-gboolean gimp_curve_save (GimpData *data,
- GError **error);
+gboolean gimp_curve_save (GimpData *data,
+ GOutputStream *output,
+ GError **error);
#endif /* __GIMP_CURVE_SAVE_H__ */
diff --git a/app/core/gimpdata.c b/app/core/gimpdata.c
index c7eb698..1e0d0bb 100644
--- a/app/core/gimpdata.c
+++ b/app/core/gimpdata.c
@@ -518,7 +518,36 @@ gimp_data_save (GimpData *data,
g_return_val_if_fail (private->file != NULL, FALSE);
if (GIMP_DATA_GET_CLASS (data)->save)
- success = GIMP_DATA_GET_CLASS (data)->save (data, error);
+ {
+ GOutputStream *output;
+
+ output = G_OUTPUT_STREAM (g_file_replace (private->file,
+ NULL, FALSE, G_FILE_CREATE_NONE,
+ NULL, error));
+
+ if (output)
+ {
+ success = GIMP_DATA_GET_CLASS (data)->save (data, output, error);
+
+ if (success &&
+ ! g_output_stream_close (output, NULL, error))
+ {
+ g_prefix_error (error,
+ _("Error writing '%s': "),
+ gimp_file_get_utf8_name (private->file));
+
+ success = FALSE;
+ }
+
+ g_object_unref (output);
+ }
+ else
+ {
+ g_prefix_error (error,
+ _("Could not open '%s' for writing: "),
+ gimp_file_get_utf8_name (private->file));
+ }
+ }
if (success)
{
diff --git a/app/core/gimpdata.h b/app/core/gimpdata.h
index a2173ae..133fad7 100644
--- a/app/core/gimpdata.h
+++ b/app/core/gimpdata.h
@@ -57,10 +57,11 @@ struct _GimpDataClass
void (* dirty) (GimpData *data);
/* virtual functions */
- gboolean (* save) (GimpData *data,
- GError **error);
- const gchar * (* get_extension) (GimpData *data);
- GimpData * (* duplicate) (GimpData *data);
+ gboolean (* save) (GimpData *data,
+ GOutputStream *output,
+ GError **error);
+ const gchar * (* get_extension) (GimpData *data);
+ GimpData * (* duplicate) (GimpData *data);
};
diff --git a/app/core/gimpdynamics-save.c b/app/core/gimpdynamics-save.c
index 0b92e19..8095b99 100644
--- a/app/core/gimpdynamics-save.c
+++ b/app/core/gimpdynamics-save.c
@@ -29,15 +29,16 @@
gboolean
-gimp_dynamics_save (GimpData *data,
- GError **error)
+gimp_dynamics_save (GimpData *data,
+ GOutputStream *output,
+ GError **error)
{
g_return_val_if_fail (GIMP_IS_DYNAMICS (data), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- return gimp_config_serialize_to_gfile (GIMP_CONFIG (data),
- gimp_data_get_file (data),
- "GIMP dynamics file",
- "end of GIMP dynamics file",
- NULL, error);
+ return gimp_config_serialize_to_stream (GIMP_CONFIG (data),
+ output,
+ "GIMP dynamics file",
+ "end of GIMP dynamics file",
+ NULL, error);
}
diff --git a/app/core/gimpdynamics-save.h b/app/core/gimpdynamics-save.h
index c4a6976..1ae9958 100644
--- a/app/core/gimpdynamics-save.h
+++ b/app/core/gimpdynamics-save.h
@@ -20,8 +20,9 @@
/* don't call this function directly, use gimp_data_save() instead */
-gboolean gimp_dynamics_save (GimpData *data,
- GError **error);
+gboolean gimp_dynamics_save (GimpData *data,
+ GOutputStream *output,
+ GError **error);
#endif /* __GIMP_DYNAMICS_SAVE_H__ */
diff --git a/app/core/gimpgradient-save.c b/app/core/gimpgradient-save.c
index 35fbbc5..b684292 100644
--- a/app/core/gimpgradient-save.c
+++ b/app/core/gimpgradient-save.c
@@ -31,30 +31,17 @@
gboolean
-gimp_gradient_save (GimpData *data,
- GError **error)
+gimp_gradient_save (GimpData *data,
+ GOutputStream *output,
+ GError **error)
{
GimpGradient *gradient = GIMP_GRADIENT (data);
- GOutputStream *output;
GString *string;
GimpGradientSegment *seg;
gint num_segments;
gsize bytes_written;
GError *my_error = NULL;
- output = G_OUTPUT_STREAM (g_file_replace (gimp_data_get_file (data),
- NULL, FALSE, G_FILE_CREATE_NONE,
- NULL, &my_error));
- if (! output)
- {
- g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
- _("Could not open '%s' for writing: %s"),
- gimp_file_get_utf8_name (gimp_data_get_file (data)),
- my_error->message);
- g_clear_error (&my_error);
- return FALSE;
- }
-
/* File format is:
*
* GIMP Gradient
@@ -131,12 +118,10 @@ gimp_gradient_save (GimpData *data,
my_error->message);
g_clear_error (&my_error);
g_string_free (string, TRUE);
- g_object_unref (output);
return FALSE;
}
g_string_free (string, TRUE);
- g_object_unref (output);
return TRUE;
}
diff --git a/app/core/gimpgradient-save.h b/app/core/gimpgradient-save.h
index 866a80a..9e46f58 100644
--- a/app/core/gimpgradient-save.h
+++ b/app/core/gimpgradient-save.h
@@ -20,12 +20,13 @@
/* don't call this function directly, use gimp_data_save() instead */
-gboolean gimp_gradient_save (GimpData *data,
- GError **error);
+gboolean gimp_gradient_save (GimpData *data,
+ GOutputStream *output,
+ GError **error);
-gboolean gimp_gradient_save_pov (GimpGradient *gradient,
- GFile *file,
- GError **error);
+gboolean gimp_gradient_save_pov (GimpGradient *gradient,
+ GFile *file,
+ GError **error);
#endif /* __GIMP_GRADIENT_SAVE_H__ */
diff --git a/app/core/gimppalette-save.c b/app/core/gimppalette-save.c
index d0a40c9..dde2d67 100644
--- a/app/core/gimppalette-save.c
+++ b/app/core/gimppalette-save.c
@@ -33,28 +33,15 @@
gboolean
-gimp_palette_save (GimpData *data,
- GError **error)
+gimp_palette_save (GimpData *data,
+ GOutputStream *output,
+ GError **error)
{
- GimpPalette *palette = GIMP_PALETTE (data);
- GOutputStream *output;
- GString *string;
- GList *list;
- gsize bytes_written;
- GError *my_error = NULL;
-
- output = G_OUTPUT_STREAM (g_file_replace (gimp_data_get_file (data),
- NULL, FALSE, G_FILE_CREATE_NONE,
- NULL, &my_error));
- if (! output)
- {
- g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
- _("Could not open '%s' for writing: %s"),
- gimp_file_get_utf8_name (gimp_data_get_file (data)),
- my_error->message);
- g_clear_error (&my_error);
- return FALSE;
- }
+ GimpPalette *palette = GIMP_PALETTE (data);
+ GString *string;
+ GList *list;
+ gsize bytes_written;
+ GError *my_error = NULL;
string = g_string_new ("GIMP Palette\n");
@@ -87,12 +74,10 @@ gimp_palette_save (GimpData *data,
my_error->message);
g_clear_error (&my_error);
g_string_free (string, TRUE);
- g_object_unref (output);
return FALSE;
}
g_string_free (string, TRUE);
- g_object_unref (output);
return TRUE;
}
diff --git a/app/core/gimppalette-save.h b/app/core/gimppalette-save.h
index 4775f88..9ed2e37 100644
--- a/app/core/gimppalette-save.h
+++ b/app/core/gimppalette-save.h
@@ -20,8 +20,9 @@
/* don't call this function directly, use gimp_data_save() instead */
-gboolean gimp_palette_save (GimpData *data,
- GError **error);
+gboolean gimp_palette_save (GimpData *data,
+ GOutputStream *output,
+ GError **error);
#endif /* __GIMP_PALETTE_SAVE_H__ */
diff --git a/app/core/gimptoolpreset-save.c b/app/core/gimptoolpreset-save.c
index 9cd72a3..0513e7b 100644
--- a/app/core/gimptoolpreset-save.c
+++ b/app/core/gimptoolpreset-save.c
@@ -29,15 +29,16 @@
gboolean
-gimp_tool_preset_save (GimpData *data,
- GError **error)
+gimp_tool_preset_save (GimpData *data,
+ GOutputStream *output,
+ GError **error)
{
g_return_val_if_fail (GIMP_IS_TOOL_PRESET (data), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- return gimp_config_serialize_to_gfile (GIMP_CONFIG (data),
- gimp_data_get_file (data),
- "GIMP tool preset file",
- "end of GIMP tool preset file",
- NULL, error);
+ return gimp_config_serialize_to_stream (GIMP_CONFIG (data),
+ output,
+ "GIMP tool preset file",
+ "end of GIMP tool preset file",
+ NULL, error);
}
diff --git a/app/core/gimptoolpreset-save.h b/app/core/gimptoolpreset-save.h
index 91e0549..2d66d8f 100644
--- a/app/core/gimptoolpreset-save.h
+++ b/app/core/gimptoolpreset-save.h
@@ -20,8 +20,9 @@
/* don't call this function directly, use gimp_data_save() instead */
-gboolean gimp_tool_preset_save (GimpData *data,
- GError **error);
+gboolean gimp_tool_preset_save (GimpData *data,
+ GOutputStream *output,
+ GError **error);
#endif /* __GIMP_TOOL_PRESET_SAVE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]