mirror of https://github.com/GNOME/gimp.git
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:
parent
245106f320
commit
60f23afde2
|
@ -28,6 +28,18 @@
|
||||||
#include "gimpparasitelist.h"
|
#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
|
void
|
||||||
gimp_parasite_attach (Gimp *gimp,
|
gimp_parasite_attach (Gimp *gimp,
|
||||||
const GimpParasite *parasite)
|
const GimpParasite *parasite)
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
|
|
||||||
/* some wrappers to access gimp->parasites, mainly for the PDB */
|
/* 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,
|
void gimp_parasite_attach (Gimp *gimp,
|
||||||
const GimpParasite *parasite);
|
const GimpParasite *parasite);
|
||||||
void gimp_parasite_detach (Gimp *gimp,
|
void gimp_parasite_detach (Gimp *gimp,
|
||||||
|
|
|
@ -3050,6 +3050,18 @@ gimp_image_parasite_list (const GimpImage *image,
|
||||||
return list;
|
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
|
void
|
||||||
gimp_image_parasite_attach (GimpImage *image,
|
gimp_image_parasite_attach (GimpImage *image,
|
||||||
const GimpParasite *parasite)
|
const GimpParasite *parasite)
|
||||||
|
|
|
@ -286,6 +286,9 @@ const GimpParasite * gimp_image_parasite_find (const GimpImage *image,
|
||||||
const gchar *name);
|
const gchar *name);
|
||||||
gchar ** gimp_image_parasite_list (const GimpImage *image,
|
gchar ** gimp_image_parasite_list (const GimpImage *image,
|
||||||
gint *count);
|
gint *count);
|
||||||
|
gboolean gimp_image_parasite_validate (GimpImage *image,
|
||||||
|
const GimpParasite *parasite,
|
||||||
|
GError **error);
|
||||||
void gimp_image_parasite_attach (GimpImage *image,
|
void gimp_image_parasite_attach (GimpImage *image,
|
||||||
const GimpParasite *parasite);
|
const GimpParasite *parasite);
|
||||||
void gimp_image_parasite_detach (GimpImage *image,
|
void gimp_image_parasite_detach (GimpImage *image,
|
||||||
|
|
|
@ -1798,6 +1798,18 @@ gimp_item_get_parasites (const GimpItem *item)
|
||||||
return GET_PRIVATE (item)->parasites;
|
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
|
void
|
||||||
gimp_item_parasite_attach (GimpItem *item,
|
gimp_item_parasite_attach (GimpItem *item,
|
||||||
const GimpParasite *parasite,
|
const GimpParasite *parasite,
|
||||||
|
|
|
@ -274,6 +274,9 @@ void gimp_item_set_parasites (GimpItem *item,
|
||||||
GimpParasiteList *parasites);
|
GimpParasiteList *parasites);
|
||||||
GimpParasiteList * gimp_item_get_parasites (const GimpItem *item);
|
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,
|
void gimp_item_parasite_attach (GimpItem *item,
|
||||||
const GimpParasite *parasite,
|
const GimpParasite *parasite,
|
||||||
gboolean push_undo);
|
gboolean push_undo);
|
||||||
|
|
|
@ -114,7 +114,10 @@ attach_parasite_invoker (GimpProcedure *procedure,
|
||||||
|
|
||||||
if (success)
|
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,
|
return gimp_procedure_get_return_values (procedure, success,
|
||||||
|
|
|
@ -2833,7 +2833,10 @@ image_attach_parasite_invoker (GimpProcedure *procedure,
|
||||||
|
|
||||||
if (success)
|
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,
|
return gimp_procedure_get_return_values (procedure, success,
|
||||||
|
|
|
@ -785,7 +785,10 @@ item_attach_parasite_invoker (GimpProcedure *procedure,
|
||||||
|
|
||||||
if (success)
|
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,
|
return gimp_procedure_get_return_values (procedure, success,
|
||||||
|
|
|
@ -753,12 +753,25 @@ xcf_load_image_props (XcfInfo *info,
|
||||||
|
|
||||||
while (info->cp - base < prop_size)
|
while (info->cp - base < prop_size)
|
||||||
{
|
{
|
||||||
GimpParasite *p = xcf_load_parasite (info);
|
GimpParasite *p = xcf_load_parasite (info);
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
if (! p)
|
if (! p)
|
||||||
return FALSE;
|
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);
|
gimp_parasite_free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1026,12 +1039,25 @@ xcf_load_layer_props (XcfInfo *info,
|
||||||
|
|
||||||
while (info->cp - base < prop_size)
|
while (info->cp - base < prop_size)
|
||||||
{
|
{
|
||||||
GimpParasite *p = xcf_load_parasite (info);
|
GimpParasite *p = xcf_load_parasite (info);
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
if (! p)
|
if (! p)
|
||||||
return FALSE;
|
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);
|
gimp_parasite_free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1222,12 +1248,26 @@ xcf_load_channel_props (XcfInfo *info,
|
||||||
|
|
||||||
while ((info->cp - base) < prop_size)
|
while ((info->cp - base) < prop_size)
|
||||||
{
|
{
|
||||||
GimpParasite *p = xcf_load_parasite (info);
|
GimpParasite *p = xcf_load_parasite (info);
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
if (! p)
|
if (! p)
|
||||||
return FALSE;
|
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);
|
gimp_parasite_free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2148,11 +2188,24 @@ xcf_load_vector (XcfInfo *info,
|
||||||
for (i = 0; i < num_parasites; i++)
|
for (i = 0; i < num_parasites; i++)
|
||||||
{
|
{
|
||||||
GimpParasite *parasite = xcf_load_parasite (info);
|
GimpParasite *parasite = xcf_load_parasite (info);
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
if (! parasite)
|
if (! parasite)
|
||||||
return FALSE;
|
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);
|
gimp_parasite_free (parasite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,10 @@ HELP
|
||||||
%invoke = (
|
%invoke = (
|
||||||
code => <<'CODE'
|
code => <<'CODE'
|
||||||
{
|
{
|
||||||
gimp_parasite_attach (gimp, parasite);
|
if (gimp_parasite_validate (gimp, parasite, error))
|
||||||
|
gimp_parasite_attach (gimp, parasite);
|
||||||
|
else
|
||||||
|
success = FALSE;
|
||||||
}
|
}
|
||||||
CODE
|
CODE
|
||||||
);
|
);
|
||||||
|
|
|
@ -2862,7 +2862,10 @@ HELP
|
||||||
%invoke = (
|
%invoke = (
|
||||||
code => <<'CODE'
|
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
|
CODE
|
||||||
);
|
);
|
||||||
|
|
|
@ -753,7 +753,10 @@ HELP
|
||||||
%invoke = (
|
%invoke = (
|
||||||
code => <<'CODE'
|
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
|
CODE
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue