From 9565930ff02932038b6c5a51410fa14957bf1214 Mon Sep 17 00:00:00 2001 From: Pierre Baillargeon Date: Thu, 7 Dec 2023 17:08:08 -0500 Subject: [PATCH 1/2] EMSUSD-852 allow saving locked layers Relevant change is the removal of the call to isReadOnly(). --- lib/usd/ui/layerEditor/layerTreeItem.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/usd/ui/layerEditor/layerTreeItem.cpp b/lib/usd/ui/layerEditor/layerTreeItem.cpp index a6039e22d6..f4b638ced1 100644 --- a/lib/usd/ui/layerEditor/layerTreeItem.cpp +++ b/lib/usd/ui/layerEditor/layerTreeItem.cpp @@ -267,13 +267,21 @@ bool LayerTreeItem::isIncoming() const { return _isIncomingLayer; } bool LayerTreeItem::needsSaving() const { - if (_layer) { - if (!isSessionLayer() && !isReadOnly() - && (_isSharedStage || parentLayerItem() != nullptr)) { - return isDirty() || isAnonymous(); - } - } - return false; + // If for any reason we don't hold a layer, then we cannot save it. + if (!_layer) + return false; + + // Session layers are managed by Maya, not the Layer Editor, + // so their dirty state does not count. + if (isSessionLayer()) + return false; + + // The top layer of unshared layer are assumed to be managed + // somewhere else and do not get saved here. (Is this correct?) + if (!_isSharedStage && parentLayerItem() == nullptr) + return false; + + return isDirty() || isAnonymous(); } // delegate Action API for command buttons From 9424e1eef5783091410eab0193429927ff96ff0b Mon Sep 17 00:00:00 2001 From: Pierre Baillargeon Date: Fri, 8 Dec 2023 14:17:57 -0500 Subject: [PATCH 2/2] EMSUSD-850 prevent saving unshared layers on double-click The double-click handle was only checking if the layer was anonymous, instead of all teh case where it needed to be saved or was prevented to be saved. --- lib/usd/ui/layerEditor/layerTreeItem.cpp | 6 +++--- lib/usd/ui/layerEditor/layerTreeView.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/usd/ui/layerEditor/layerTreeItem.cpp b/lib/usd/ui/layerEditor/layerTreeItem.cpp index f4b638ced1..67464f0cc6 100644 --- a/lib/usd/ui/layerEditor/layerTreeItem.cpp +++ b/lib/usd/ui/layerEditor/layerTreeItem.cpp @@ -276,9 +276,9 @@ bool LayerTreeItem::needsSaving() const if (isSessionLayer()) return false; - // The top layer of unshared layer are assumed to be managed - // somewhere else and do not get saved here. (Is this correct?) - if (!_isSharedStage && parentLayerItem() == nullptr) + // The stage is not shared, layers are assumed to be managed + // somewhere else and do not get saved here. + if (!_isSharedStage) return false; return isDirty() || isAnonymous(); diff --git a/lib/usd/ui/layerEditor/layerTreeView.cpp b/lib/usd/ui/layerEditor/layerTreeView.cpp index 41855b8c74..561fe4ff37 100644 --- a/lib/usd/ui/layerEditor/layerTreeView.cpp +++ b/lib/usd/ui/layerEditor/layerTreeView.cpp @@ -130,7 +130,7 @@ void LayerTreeView::onItemDoubleClicked(const QModelIndex& index) { if (index.isValid()) { auto layerTreeItem = layerItemFromIndex(index); - if (layerTreeItem->isAnonymous()) { + if (layerTreeItem->needsSaving()) { layerTreeItem->saveEdits(); } }