diff --git a/src/app/commands/filters/filter_manager_impl.cpp b/src/app/commands/filters/filter_manager_impl.cpp index c38793fe4..37b7ae7ae 100644 --- a/src/app/commands/filters/filter_manager_impl.cpp +++ b/src/app/commands/filters/filter_manager_impl.cpp @@ -66,7 +66,9 @@ FilterManagerImpl::FilterManagerImpl(Context* context, Filter* filter) { int x, y; Image* image = m_site.image(&x, &y); - if (!image) + if (!image + || (m_site.layer() && + m_site.layer()->isReference())) throw NoImageException(); init(m_site.cel()); @@ -242,11 +244,16 @@ void FilterManagerImpl::applyToTarget() case CelsTarget::Selected: { auto range = App::instance()->timeline()->range(); - if (range.enabled()) - cels = get_unlocked_unique_cels(m_site.sprite(), range); + if (range.enabled()) { + for (Cel* cel : get_unlocked_unique_cels(m_site.sprite(), range)) { + if (!cel->layer()->isReference()) + cels.push_back(cel); + } + } else if (m_site.cel() && m_site.layer() && - m_site.layer()->isEditable()) { + m_site.layer()->isEditable() && + !m_site.layer()->isReference()) { cels.push_back(m_site.cel()); } break; @@ -254,7 +261,8 @@ void FilterManagerImpl::applyToTarget() case CelsTarget::All: { for (Cel* cel : m_site.sprite()->uniqueCels()) { - if (cel->layer()->isEditable()) + if (cel->layer()->isEditable() && + !cel->layer()->isReference()) cels.push_back(cel); } break; diff --git a/src/app/ui/document_view.cpp b/src/app/ui/document_view.cpp index 927a3e8c1..9ccc19f38 100644 --- a/src/app/ui/document_view.cpp +++ b/src/app/ui/document_view.cpp @@ -467,7 +467,8 @@ bool DocumentView::onCanCut(Context* ctx) ContextFlags::ActiveLayerIsVisible | ContextFlags::ActiveLayerIsEditable | ContextFlags::HasVisibleMask | - ContextFlags::HasActiveImage)) + ContextFlags::HasActiveImage) + && !ctx->checkFlags(ContextFlags::ActiveLayerIsReference)) return true; else if (m_editor->isMovingPixels()) return true; @@ -480,7 +481,8 @@ bool DocumentView::onCanCopy(Context* ctx) if (ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | ContextFlags::ActiveLayerIsVisible | ContextFlags::HasVisibleMask | - ContextFlags::HasActiveImage)) + ContextFlags::HasActiveImage) + && !ctx->checkFlags(ContextFlags::ActiveLayerIsReference)) return true; else if (m_editor->isMovingPixels()) return true; @@ -491,11 +493,12 @@ bool DocumentView::onCanCopy(Context* ctx) bool DocumentView::onCanPaste(Context* ctx) { return - (clipboard::get_current_format() == clipboard::ClipboardImage && - ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | - ContextFlags::ActiveLayerIsVisible | - ContextFlags::ActiveLayerIsEditable | - ContextFlags::ActiveLayerIsImage)); + (clipboard::get_current_format() == clipboard::ClipboardImage + && ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | + ContextFlags::ActiveLayerIsVisible | + ContextFlags::ActiveLayerIsEditable | + ContextFlags::ActiveLayerIsImage) + && !ctx->checkFlags(ContextFlags::ActiveLayerIsReference)); } bool DocumentView::onCanClear(Context* ctx) @@ -503,7 +506,8 @@ bool DocumentView::onCanClear(Context* ctx) if (ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable | ContextFlags::ActiveLayerIsVisible | ContextFlags::ActiveLayerIsEditable | - ContextFlags::ActiveLayerIsImage)) { + ContextFlags::ActiveLayerIsImage) + && !ctx->checkFlags(ContextFlags::ActiveLayerIsReference)) { return true; } else if (m_editor->isMovingPixels()) {