app: add a small infrastructure to validate known parasites

when they are added to items, images or globally, from the PDF or an
XCF file. None of the validation functions does anything currently,
they simply return TRUE.
This commit is contained in:
Michael Natterer 2014-03-22 00:11:15 +01:00
parent 245106f320
commit 60f23afde2
13 changed files with 129 additions and 13 deletions

View File

@ -28,6 +28,18 @@
#include "gimpparasitelist.h"
gboolean
gimp_parasite_validate (Gimp *gimp,
const GimpParasite *parasite,
GError **error)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (parasite != NULL, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
return TRUE;
}
void
gimp_parasite_attach (Gimp *gimp,
const GimpParasite *parasite)

View File

@ -20,6 +20,9 @@
/* some wrappers to access gimp->parasites, mainly for the PDB */
gboolean gimp_parasite_validate (Gimp *gimp,
const GimpParasite *parasite,
GError **error);
void gimp_parasite_attach (Gimp *gimp,
const GimpParasite *parasite);
void gimp_parasite_detach (Gimp *gimp,

View File

@ -3050,6 +3050,18 @@ gimp_image_parasite_list (const GimpImage *image,
return list;
}
gboolean
gimp_image_parasite_validate (GimpImage *image,
const GimpParasite *parasite,
GError **error)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
g_return_val_if_fail (parasite != NULL, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
return TRUE;
}
void
gimp_image_parasite_attach (GimpImage *image,
const GimpParasite *parasite)

View File

@ -286,6 +286,9 @@ const GimpParasite * gimp_image_parasite_find (const GimpImage *image,
const gchar *name);
gchar ** gimp_image_parasite_list (const GimpImage *image,
gint *count);
gboolean gimp_image_parasite_validate (GimpImage *image,
const GimpParasite *parasite,
GError **error);
void gimp_image_parasite_attach (GimpImage *image,
const GimpParasite *parasite);
void gimp_image_parasite_detach (GimpImage *image,

View File

@ -1798,6 +1798,18 @@ gimp_item_get_parasites (const GimpItem *item)
return GET_PRIVATE (item)->parasites;
}
gboolean
gimp_item_parasite_validate (GimpItem *item,
const GimpParasite *parasite,
GError **error)
{
g_return_val_if_fail (GIMP_IS_ITEM (item), FALSE);
g_return_val_if_fail (parasite != NULL, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
return TRUE;
}
void
gimp_item_parasite_attach (GimpItem *item,
const GimpParasite *parasite,

View File

@ -274,6 +274,9 @@ void gimp_item_set_parasites (GimpItem *item,
GimpParasiteList *parasites);
GimpParasiteList * gimp_item_get_parasites (const GimpItem *item);
gboolean gimp_item_parasite_validate (GimpItem *item,
const GimpParasite *parasite,
GError **error);
void gimp_item_parasite_attach (GimpItem *item,
const GimpParasite *parasite,
gboolean push_undo);

View File

@ -114,7 +114,10 @@ attach_parasite_invoker (GimpProcedure *procedure,
if (success)
{
gimp_parasite_attach (gimp, parasite);
if (gimp_parasite_validate (gimp, parasite, error))
gimp_parasite_attach (gimp, parasite);
else
success = FALSE;
}
return gimp_procedure_get_return_values (procedure, success,

View File

@ -2833,7 +2833,10 @@ image_attach_parasite_invoker (GimpProcedure *procedure,
if (success)
{
gimp_image_parasite_attach (image, parasite);
if (gimp_image_parasite_validate (image, parasite, error))
gimp_image_parasite_attach (image, parasite);
else
success = FALSE;
}
return gimp_procedure_get_return_values (procedure, success,

View File

@ -785,7 +785,10 @@ item_attach_parasite_invoker (GimpProcedure *procedure,
if (success)
{
gimp_item_parasite_attach (item, parasite, TRUE);
if (gimp_item_parasite_validate (item, parasite, error))
gimp_item_parasite_attach (item, parasite, TRUE);
else
success = FALSE;
}
return gimp_procedure_get_return_values (procedure, success,

View File

@ -753,12 +753,25 @@ xcf_load_image_props (XcfInfo *info,
while (info->cp - base < prop_size)
{
GimpParasite *p = xcf_load_parasite (info);
GimpParasite *p = xcf_load_parasite (info);
GError *error = NULL;
if (! p)
return FALSE;
gimp_image_parasite_attach (image, p);
if (! gimp_image_parasite_validate (image, p, &error))
{
gimp_message (info->gimp, G_OBJECT (info->progress),
GIMP_MESSAGE_WARNING,
"Warning, invalid image parasite in XCF file: %s",
error->message);
g_clear_error (&error);
}
else
{
gimp_image_parasite_attach (image, p);
}
gimp_parasite_free (p);
}
@ -1026,12 +1039,25 @@ xcf_load_layer_props (XcfInfo *info,
while (info->cp - base < prop_size)
{
GimpParasite *p = xcf_load_parasite (info);
GimpParasite *p = xcf_load_parasite (info);
GError *error = NULL;
if (! p)
return FALSE;
gimp_item_parasite_attach (GIMP_ITEM (*layer), p, FALSE);
if (! gimp_item_parasite_validate (GIMP_ITEM (*layer), p, &error))
{
gimp_message (info->gimp, G_OBJECT (info->progress),
GIMP_MESSAGE_WARNING,
"Warning, invalid layer parasite in XCF file: %s",
error->message);
g_clear_error (&error);
}
else
{
gimp_item_parasite_attach (GIMP_ITEM (*layer), p, FALSE);
}
gimp_parasite_free (p);
}
@ -1222,12 +1248,26 @@ xcf_load_channel_props (XcfInfo *info,
while ((info->cp - base) < prop_size)
{
GimpParasite *p = xcf_load_parasite (info);
GimpParasite *p = xcf_load_parasite (info);
GError *error = NULL;
if (! p)
return FALSE;
gimp_item_parasite_attach (GIMP_ITEM (*channel), p, FALSE);
if (! gimp_item_parasite_validate (GIMP_ITEM (*channel), p,
&error))
{
gimp_message (info->gimp, G_OBJECT (info->progress),
GIMP_MESSAGE_WARNING,
"Warning, invalid channel parasite in XCF file: %s",
error->message);
g_clear_error (&error);
}
else
{
gimp_item_parasite_attach (GIMP_ITEM (*channel), p, FALSE);
}
gimp_parasite_free (p);
}
@ -2148,11 +2188,24 @@ xcf_load_vector (XcfInfo *info,
for (i = 0; i < num_parasites; i++)
{
GimpParasite *parasite = xcf_load_parasite (info);
GError *error = NULL;
if (! parasite)
return FALSE;
gimp_item_parasite_attach (GIMP_ITEM (vectors), parasite, FALSE);
if (! gimp_item_parasite_validate (GIMP_ITEM (vectors), parasite, &error))
{
gimp_message (info->gimp, G_OBJECT (info->progress),
GIMP_MESSAGE_WARNING,
"Warning, invalid vectors parasite in XCF file: %s",
error->message);
g_clear_error (&error);
}
else
{
gimp_item_parasite_attach (GIMP_ITEM (vectors), parasite, FALSE);
}
gimp_parasite_free (parasite);
}

View File

@ -106,7 +106,10 @@ HELP
%invoke = (
code => <<'CODE'
{
gimp_parasite_attach (gimp, parasite);
if (gimp_parasite_validate (gimp, parasite, error))
gimp_parasite_attach (gimp, parasite);
else
success = FALSE;
}
CODE
);

View File

@ -2862,7 +2862,10 @@ HELP
%invoke = (
code => <<'CODE'
{
gimp_image_parasite_attach (image, parasite);
if (gimp_image_parasite_validate (image, parasite, error))
gimp_image_parasite_attach (image, parasite);
else
success = FALSE;
}
CODE
);

View File

@ -753,7 +753,10 @@ HELP
%invoke = (
code => <<'CODE'
{
gimp_item_parasite_attach (item, parasite, TRUE);
if (gimp_item_parasite_validate (item, parasite, error))
gimp_item_parasite_attach (item, parasite, TRUE);
else
success = FALSE;
}
CODE
);