diff --git a/lib/usdUfe/ufe/StagesSubject.cpp b/lib/usdUfe/ufe/StagesSubject.cpp index 80f0c7aec5..98deab8ff6 100644 --- a/lib/usdUfe/ufe/StagesSubject.cpp +++ b/lib/usdUfe/ufe/StagesSubject.cpp @@ -162,6 +162,12 @@ void sendAttributeChanged( } } break; case AttributeChangeType::kRemoved: { + // Special case when Undoing a visibility change, the notice.GetChangedInfoOnlyPaths() + // does not contain the change, hence handling visibility notification in re-synch path. + if (changedToken == UsdGeomTokens->visibility) { + Ufe::VisibilityChanged vis(ufePath); + notifyWithoutExceptions(vis); + } notifyWithoutExceptions( Ufe::AttributeRemoved(ufePath, changedToken.GetString())); } break; @@ -384,7 +390,7 @@ void StagesSubject::stageChanged( const auto& changedPath = *it; if (changedPath.IsPrimPropertyPath()) { // Special case to detect when an xformop is added or removed from a prim. - // We need to send some notifs so DCC can update (such as on undo + // We need to send some notifications so DCC can update (such as on undo // to move the transform manipulator back to original position). const TfToken nameToken = changedPath.GetNameToken(); auto usdPrimPathStr = changedPath.GetPrimPath().GetString(); @@ -395,7 +401,9 @@ void StagesSubject::stageChanged( notifyWithoutExceptions(ufePath); } } + processAttributeChanges(ufePath, changedPath, it.base()->second); + // No further processing for this prim property path is required. continue; }