app, pdb: do not push undos on rasterizables when loading a XCF.
Fixing: > GIMP-CRITICAL: gimp_image_undo_push_rasterizable: assertion 'gimp_item_is_attached (GIMP_ITEM (rasterizable))' failed … when loading the XCF from #14131.
This commit is contained in:
parent
75d9fc6d9a
commit
2edd6ccb95
9 changed files with 27 additions and 19 deletions
|
|
@ -1137,7 +1137,7 @@ layers_rasterize_cmd_callback (GimpAction *action,
|
|||
for (iter = layers; iter; iter = iter->next)
|
||||
{
|
||||
if (GIMP_IS_RASTERIZABLE (iter->data) && ! gimp_rasterizable_is_rasterized (iter->data))
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (iter->data));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (iter->data), TRUE);
|
||||
}
|
||||
|
||||
gimp_image_undo_group_end (image);
|
||||
|
|
|
|||
|
|
@ -86,11 +86,11 @@ gimp_rasterizable_default_init (GimpRasterizableInterface *iface)
|
|||
* Rasterize @rasterizable.
|
||||
**/
|
||||
void
|
||||
gimp_rasterizable_rasterize (GimpRasterizable *rasterizable)
|
||||
gimp_rasterizable_rasterize (GimpRasterizable *rasterizable,
|
||||
gboolean push_undo)
|
||||
{
|
||||
GimpRasterizablePrivate *private;
|
||||
GimpImage *image;
|
||||
gchar *undo_text;
|
||||
|
||||
g_return_if_fail (GIMP_IS_RASTERIZABLE (rasterizable));
|
||||
g_return_if_fail (! gimp_rasterizable_is_rasterized (rasterizable));
|
||||
|
|
@ -98,17 +98,24 @@ gimp_rasterizable_rasterize (GimpRasterizable *rasterizable)
|
|||
private = GIMP_RASTERIZABLE_GET_PRIVATE (rasterizable);
|
||||
image = gimp_item_get_image (GIMP_ITEM (rasterizable));
|
||||
|
||||
/* TRANSLATORS: the %s will be a type of item, i.e. "Text Layer". */
|
||||
undo_text = g_strdup_printf (_("Rasterize %s"),
|
||||
GIMP_VIEWABLE_GET_CLASS (rasterizable)->default_name);
|
||||
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_ITEM_PROPERTIES, undo_text);
|
||||
if (push_undo)
|
||||
{
|
||||
gchar *undo_text;
|
||||
|
||||
gimp_image_undo_push_rasterizable (image, NULL, rasterizable);
|
||||
/* TRANSLATORS: the %s will be a type of item, i.e. "Text Layer". */
|
||||
undo_text = g_strdup_printf (_("Rasterize %s"),
|
||||
GIMP_VIEWABLE_GET_CLASS (rasterizable)->default_name);
|
||||
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_ITEM_PROPERTIES, undo_text);
|
||||
gimp_image_undo_push_rasterizable (image, NULL, rasterizable);
|
||||
|
||||
g_free (undo_text);
|
||||
}
|
||||
|
||||
private->rasterized = TRUE;
|
||||
g_signal_emit (rasterizable, gimp_rasterizable_signals[SET_RASTERIZED], 0, TRUE);
|
||||
|
||||
gimp_image_undo_group_end (image);
|
||||
if (push_undo)
|
||||
gimp_image_undo_group_end (image);
|
||||
|
||||
/* Triggers thumbnail update. */
|
||||
gimp_drawable_update_all (GIMP_DRAWABLE (rasterizable));
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@ struct _GimpRasterizableInterface
|
|||
};
|
||||
|
||||
|
||||
void gimp_rasterizable_rasterize (GimpRasterizable *rasterizable);
|
||||
void gimp_rasterizable_rasterize (GimpRasterizable *rasterizable,
|
||||
gboolean push_undo);
|
||||
void gimp_rasterizable_restore (GimpRasterizable *rasterizable);
|
||||
|
||||
gboolean gimp_rasterizable_is_rasterized (GimpRasterizable *rasterizable);
|
||||
|
|
|
|||
|
|
@ -329,7 +329,7 @@ gimp_vector_layer_set_buffer (GimpDrawable *drawable,
|
|||
|
||||
if (push_undo && ! is_rasterized)
|
||||
{
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer), push_undo);
|
||||
gimp_image_undo_group_end (image);
|
||||
}
|
||||
}
|
||||
|
|
@ -358,7 +358,7 @@ gimp_vector_layer_push_undo (GimpDrawable *drawable,
|
|||
|
||||
if (! is_rasterized)
|
||||
{
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer), TRUE);
|
||||
gimp_image_undo_group_end (image);
|
||||
}
|
||||
}
|
||||
|
|
@ -809,7 +809,7 @@ gimp_vector_layer_changed_options (GimpVectorLayer *layer)
|
|||
GimpItem *item = GIMP_ITEM (layer);
|
||||
|
||||
if (layer->options && ! layer->options->path)
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer), TRUE);
|
||||
else if (gimp_item_is_attached (item))
|
||||
gimp_vector_layer_refresh (layer);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ rasterizable_rasterize_invoker (GimpProcedure *procedure,
|
|||
{
|
||||
if (! gimp_rasterizable_is_rasterized (GIMP_RASTERIZABLE (item)))
|
||||
{
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (item));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (item), TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -170,5 +170,5 @@ gimp_text_layer_set_xcf_flags (GimpTextLayer *text_layer,
|
|||
(flags & TEXT_LAYER_XCF_DONT_AUTO_RENAME) == 0);
|
||||
|
||||
if ((flags & TEXT_LAYER_XCF_MODIFIED) != 0)
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (text_layer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (text_layer), FALSE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -348,7 +348,7 @@ gimp_text_layer_set_buffer (GimpDrawable *drawable,
|
|||
|
||||
if (push_undo && ! is_rasterized)
|
||||
{
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer), push_undo);
|
||||
gimp_image_undo_group_end (image);
|
||||
}
|
||||
}
|
||||
|
|
@ -377,7 +377,7 @@ gimp_text_layer_push_undo (GimpDrawable *drawable,
|
|||
|
||||
if (! is_rasterized)
|
||||
{
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (layer), TRUE);
|
||||
gimp_image_undo_group_end (image);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1024,7 +1024,7 @@ xcf_load_image (Gimp *gimp,
|
|||
g_object_unref (options);
|
||||
|
||||
if (vdata->modified)
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (vlayer));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (vlayer), FALSE);
|
||||
|
||||
if (selected)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ HELP
|
|||
{
|
||||
if (! gimp_rasterizable_is_rasterized (GIMP_RASTERIZABLE (item)))
|
||||
{
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (item));
|
||||
gimp_rasterizable_rasterize (GIMP_RASTERIZABLE (item), TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue