mirror of https://github.com/GNOME/gimp.git
app: add a GOutputStream* parameter to GimpData::save()
Open/close the stream generically in GimpData. Improves error handling and simplifies the save() functions.
This commit is contained in:
parent
0acbfc3ffa
commit
aab55c34c8
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
Loading…
Reference in New Issue