void OnUndoRedo() { var undos = new List <string>(); var redos = new List <string>(); Undo.GetRecords(undos, redos); var rebuildAll = redos.Any(x => x.StartsWith("Timeline ")) || undos.Any(x => x.StartsWith("Timeline")); var evalNow = redos.Any(x => x.Contains("Edit Curve")) || undos.Any(x => x.Contains("Edit Curve")); if (rebuildAll || evalNow) { ValidateSelection(); if (state != null) { if (evalNow) // when curves change, the new values need to be set in the transform before the inspector handles the undo { state.EvaluateImmediate(); } if (rebuildAll) { state.Refresh(); } } Repaint(); } }