libgimp: fix legacy plug-ins, which I broke with the big ID removal

- hand out and leak proxy object objects to legacy API like candy,
  bypassing the factory in GimpPlugIn, because there is no plug-in
  singleton.

- gimpgpcompat.c: image, item etc. are now objects, simply forgot this
  file.
This commit is contained in:
Michael Natterer 2019-08-29 18:36:59 +02:00
parent 33601f7a87
commit 37897b13fe
4 changed files with 97 additions and 24 deletions

View File

@ -160,10 +160,18 @@ gimp_display_get_by_id (gint32 display_id)
{
if (display_id > 0)
{
GimpPlugIn *plug_in = gimp_get_plug_in ();
GimpProcedure *procedure = _gimp_plug_in_get_procedure (plug_in);
GimpPlugIn *plug_in = gimp_get_plug_in ();
return _gimp_procedure_get_display (procedure, display_id);
if (plug_in)
{
GimpProcedure *procedure = _gimp_plug_in_get_procedure (plug_in);
return _gimp_procedure_get_display (procedure, display_id);
}
return g_object_new (GIMP_TYPE_DISPLAY,
"id", display_id,
NULL);
}
return NULL;

View File

@ -457,31 +457,38 @@ _gimp_params_to_value_array (const GimpParam *params,
break;
case GIMP_PDB_ITEM:
g_value_set_int (&value, params[i].data.d_item);
g_value_set_object (&value,
gimp_item_get_by_id (params[i].data.d_item));
break;
case GIMP_PDB_DISPLAY:
g_value_set_int (&value, params[i].data.d_display);
g_value_set_object (&value,
gimp_display_get_by_id (params[i].data.d_display));
break;
case GIMP_PDB_IMAGE:
g_value_set_int (&value, params[i].data.d_image);
g_value_set_object (&value,
gimp_image_get_by_id (params[i].data.d_image));
break;
case GIMP_PDB_LAYER:
g_value_set_int (&value, params[i].data.d_layer);
g_value_set_object (&value,
gimp_item_get_by_id (params[i].data.d_layer));
break;
case GIMP_PDB_CHANNEL:
g_value_set_int (&value, params[i].data.d_channel);
g_value_set_object (&value,
gimp_item_get_by_id (params[i].data.d_channel));
break;
case GIMP_PDB_DRAWABLE:
g_value_set_int (&value, params[i].data.d_drawable);
g_value_set_object (&value,
gimp_item_get_by_id (params[i].data.d_drawable));
break;
case GIMP_PDB_SELECTION:
g_value_set_int (&value, params[i].data.d_selection);
g_value_set_object (&value,
gimp_item_get_by_id (params[i].data.d_selection));
break;
case GIMP_PDB_COLORARRAY:
@ -538,7 +545,8 @@ _gimp_value_array_to_params (GimpValueArray *args,
for (i = 0; i < length; i++)
{
GValue *value = gimp_value_array_index (args, i);
GValue *value = gimp_value_array_index (args, i);
GObject *object;
params[i].type = _gimp_pdb_gtype_to_arg_type (G_VALUE_TYPE (value));
@ -620,31 +628,45 @@ _gimp_value_array_to_params (GimpValueArray *args,
break;
case GIMP_PDB_ITEM:
params[i].data.d_item = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_item =
object ? gimp_item_get_id (GIMP_ITEM (object)) : -1;
break;
case GIMP_PDB_DISPLAY:
params[i].data.d_display = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_display =
object ? gimp_display_get_id (GIMP_DISPLAY (object)) : -1;
break;
case GIMP_PDB_IMAGE:
params[i].data.d_image = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_image =
object ? gimp_image_get_id (GIMP_IMAGE (object)) : -1;
break;
case GIMP_PDB_LAYER:
params[i].data.d_layer = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_layer =
object ? gimp_item_get_id (GIMP_ITEM (object)) : -1;
break;
case GIMP_PDB_CHANNEL:
params[i].data.d_channel = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_channel =
object ? gimp_item_get_id (GIMP_ITEM (object)) : -1;
break;
case GIMP_PDB_DRAWABLE:
params[i].data.d_drawable = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_drawable =
object ? gimp_item_get_id (GIMP_ITEM (object)) : -1;
break;
case GIMP_PDB_SELECTION:
params[i].data.d_selection = g_value_get_int (value);
object = g_value_get_object (value);
params[i].data.d_selection =
object ? gimp_item_get_id (GIMP_ITEM (object)) : -1;
break;
case GIMP_PDB_COLORARRAY:

View File

@ -158,10 +158,18 @@ gimp_image_get_by_id (gint32 image_id)
{
if (image_id > 0)
{
GimpPlugIn *plug_in = gimp_get_plug_in ();
GimpProcedure *procedure = _gimp_plug_in_get_procedure (plug_in);
GimpPlugIn *plug_in = gimp_get_plug_in ();
return _gimp_procedure_get_image (procedure, image_id);
if (plug_in)
{
GimpProcedure *procedure = _gimp_plug_in_get_procedure (plug_in);
return _gimp_procedure_get_image (procedure, image_id);
}
return g_object_new (GIMP_TYPE_IMAGE,
"id", image_id,
NULL);
}
return NULL;

View File

@ -163,10 +163,45 @@ gimp_item_get_by_id (gint32 item_id)
{
if (item_id > 0)
{
GimpPlugIn *plug_in = gimp_get_plug_in ();
GimpProcedure *procedure = _gimp_plug_in_get_procedure (plug_in);
GimpPlugIn *plug_in = gimp_get_plug_in ();
return _gimp_procedure_get_item (procedure, item_id);
if (plug_in)
{
GimpProcedure *procedure = _gimp_plug_in_get_procedure (plug_in);
return _gimp_procedure_get_item (procedure, item_id);
}
if (gimp_item_id_is_layer (item_id))
{
return g_object_new (GIMP_TYPE_LAYER,
"id", item_id,
NULL);
}
else if (gimp_item_id_is_layer_mask (item_id))
{
return g_object_new (GIMP_TYPE_LAYER_MASK,
"id", item_id,
NULL);
}
else if (gimp_item_id_is_selection (item_id))
{
return g_object_new (GIMP_TYPE_SELECTION,
"id", item_id,
NULL);
}
else if (gimp_item_id_is_channel (item_id))
{
return g_object_new (GIMP_TYPE_CHANNEL,
"id", item_id,
NULL);
}
else if (gimp_item_id_is_vectors (item_id))
{
return g_object_new (GIMP_TYPE_VECTORS,
"id", item_id,
NULL);
}
}
return NULL;