Index: libs/image/kis_layer_utils.cpp =================================================================== --- libs/image/kis_layer_utils.cpp +++ libs/image/kis_layer_utils.cpp @@ -50,6 +50,7 @@ #include "lazybrush/kis_colorize_mask.h" #include "commands/kis_node_property_list_command.h" #include +#include "krita_utils.h" namespace KisLayerUtils { @@ -681,8 +682,14 @@ m_info->dstLayer(), m_info->selectionMasks); } - - safeRemoveMultipleNodes(m_info->allSrcNodes(), m_info->image); + KisNodeList safeNodesToDelete = m_info->allSrcNodes(); + KritaUtils::filterContainer(safeNodesToDelete, [this](KisNodeSP node){ + if(node==m_putAfter) + return !node->userLocked(); + else + return true; + }); + safeRemoveMultipleNodes(safeNodesToDelete, m_info->image); } Index: libs/ui/kis_layer_manager.cc =================================================================== --- libs/ui/kis_layer_manager.cc +++ libs/ui/kis_layer_manager.cc @@ -634,12 +634,27 @@ if (!layer) return; if (!m_view->blockUntilOperationsFinished(image)) return; - + bool allMergingLayersUnlocked = true; QList selectedNodes = m_view->nodeManager()->selectedNodes(); - if (selectedNodes.size() > 1) { - image->mergeMultipleLayers(selectedNodes, m_view->activeNode()); + if (selectedNodes.size() > 1) { + for(QList::iterator it = selectedNodes.begin(); it!=selectedNodes.end(); it++){ + KisNodeSP node = *it; + if(node->userLocked() && m_view->activeNode()!=node){ + allMergingLayersUnlocked = false; + break; + } + } + if(allMergingLayersUnlocked==false){ + m_view->showFloatingMessage( + i18nc("floating message in layer manager", + "Layer is locked "), + QIcon(), 2000, KisFloatingMessage::Low); + } + else {image->mergeMultipleLayers(selectedNodes, m_view->activeNode());} - } else if (tryMergeSelectionMasks(m_view->activeNode(), image)) { + } + + else if (tryMergeSelectionMasks(m_view->activeNode(), image)) { // already done! } else if (tryFlattenGroupLayer(m_view->activeNode(), image)) { // already done! @@ -648,8 +663,14 @@ if (!layer->prevSibling()) return; KisLayer *prevLayer = qobject_cast(layer->prevSibling().data()); if (!prevLayer) return; + if (prevLayer->userLocked()){ + m_view->showFloatingMessage( + i18nc("floating message in layer manager", + "Layer is locked "), + QIcon(), 2000, KisFloatingMessage::Low); + } - if (layer->metaData()->isEmpty() && prevLayer->metaData()->isEmpty()) { + else if (layer->metaData()->isEmpty() && prevLayer->metaData()->isEmpty()) { image->mergeDown(layer, KisMetaData::MergeStrategyRegistry::instance()->get("Drop")); } else {