gboolean gimp_pdb_item_is_modifyable (GimpItem *item, GimpPDBItemModify modify, GError **error) { g_return_val_if_fail (GIMP_IS_ITEM (item), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); if ((modify & GIMP_PDB_ITEM_CONTENT) && gimp_item_is_content_locked (item)) { g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT, _("Item '%s' (%d) cannot be modified because its " "contents are locked"), gimp_object_get_name (item), gimp_item_get_ID (item)); return FALSE; } if ((modify & GIMP_PDB_ITEM_POSITION) && gimp_item_is_position_locked (item)) { g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT, _("Item '%s' (%d) cannot be modified because its " "position and size are locked"), gimp_object_get_name (item), gimp_item_get_ID (item)); return FALSE; } return TRUE; }
static gboolean gimp_layer_mask_is_position_locked (const GimpItem *item) { GimpLayerMask *mask = GIMP_LAYER_MASK (item); GimpLayer *layer = gimp_layer_mask_get_layer (mask); if (layer) return gimp_item_is_position_locked (GIMP_ITEM (layer)); return FALSE; }
gboolean gimp_item_linked_is_locked (const GimpItem *item) { GList *list; GList *l; gboolean locked = FALSE; g_return_val_if_fail (GIMP_IS_ITEM (item), FALSE); g_return_val_if_fail (gimp_item_get_linked (item) == TRUE, FALSE); g_return_val_if_fail (gimp_item_is_attached (item), FALSE); list = gimp_image_item_list_get_list (gimp_item_get_image (item), item, GIMP_ITEM_TYPE_ALL, GIMP_ITEM_SET_LINKED); list = gimp_image_item_list_filter (item, list, TRUE, FALSE); for (l = list; l && ! locked; l = g_list_next (l)) { GimpItem *item = l->data; /* temporarily set the item to not being linked, or we will * run into a recursion because gimp_item_is_position_locked() * call this function if the item is linked */ gimp_item_set_linked (item, FALSE, FALSE); if (gimp_item_is_position_locked (item)) locked = TRUE; gimp_item_set_linked (item, TRUE, FALSE); } g_list_free (list); return locked; }