From 58d84dfc2bb1be6c9443ee40a1c5a154980d0f43 Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 14 Oct 2025 21:16:37 +0200 Subject: [PATCH] app, pdb: check the real instance type to determine text, link and vector layers. Without this, libgimp was creating raster GimpLayer objects when these had been rasterized, which only made kinda sense when the old "discard" procedures were not reversible. Yet even this was not entirely true, since it was still possible to undo, but unfortunately these objects are long lived. Once you get a GimpLayer, it won't ever change into a GimpTextLayer (or others)! So we need to have an object of the correct child type then we'll use gimp_rasterizable_is_rasterized() to decide how to make use of the object. --- app/pdb/item-cmds.c | 15 ++++++--------- pdb/groups/item.pdb | 15 ++++++--------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/app/pdb/item-cmds.c b/app/pdb/item-cmds.c index 1ca3505db6..bac87e621e 100644 --- a/app/pdb/item-cmds.c +++ b/app/pdb/item-cmds.c @@ -167,9 +167,8 @@ item_id_is_text_layer_invoker (GimpProcedure *procedure, { GimpItem *item = gimp_item_get_by_id (gimp, item_id); - text_layer = (GIMP_IS_LAYER (item) && - ! gimp_item_is_removed (item) && - gimp_item_is_text_layer (item)); + text_layer = (GIMP_IS_TEXT_LAYER (item) && + ! gimp_item_is_removed (item)); } return_vals = gimp_procedure_get_return_values (procedure, success, @@ -200,9 +199,8 @@ item_id_is_vector_layer_invoker (GimpProcedure *procedure, { GimpItem *item = gimp_item_get_by_id (gimp, item_id); - vector_layer = (GIMP_IS_LAYER (item) && - ! gimp_item_is_removed (item) && - gimp_item_is_vector_layer (item)); + vector_layer = (GIMP_IS_VECTOR_LAYER (item) && + ! gimp_item_is_removed (item)); } return_vals = gimp_procedure_get_return_values (procedure, success, @@ -264,9 +262,8 @@ item_id_is_link_layer_invoker (GimpProcedure *procedure, { GimpItem *item = gimp_item_get_by_id (gimp, item_id); - text_layer = (GIMP_IS_LAYER (item) && - ! gimp_item_is_removed (item) && - gimp_item_is_link_layer (item)); + text_layer = (GIMP_IS_LINK_LAYER (item) && + ! gimp_item_is_removed (item)); } return_vals = gimp_procedure_get_return_values (procedure, success, diff --git a/pdb/groups/item.pdb b/pdb/groups/item.pdb index d9c6ce66bb..6b5fcf7f86 100644 --- a/pdb/groups/item.pdb +++ b/pdb/groups/item.pdb @@ -170,9 +170,8 @@ HELP { GimpItem *item = gimp_item_get_by_id (gimp, item_id); - text_layer = (GIMP_IS_LAYER (item) && - ! gimp_item_is_removed (item) && - gimp_item_is_text_layer (item)); + text_layer = (GIMP_IS_TEXT_LAYER (item) && + ! gimp_item_is_removed (item)); } CODE ); @@ -206,9 +205,8 @@ HELP { GimpItem *item = gimp_item_get_by_id (gimp, item_id); - vector_layer = (GIMP_IS_LAYER (item) && - ! gimp_item_is_removed (item) && - gimp_item_is_vector_layer (item)); + vector_layer = (GIMP_IS_VECTOR_LAYER (item) && + ! gimp_item_is_removed (item)); } CODE ); @@ -276,9 +274,8 @@ HELP { GimpItem *item = gimp_item_get_by_id (gimp, item_id); - text_layer = (GIMP_IS_LAYER (item) && - ! gimp_item_is_removed (item) && - gimp_item_is_link_layer (item)); + text_layer = (GIMP_IS_LINK_LAYER (item) && + ! gimp_item_is_removed (item)); } CODE );