Skip to content

Commit 58ac591

Browse files
committed
Fix applying new array Size when SerializedProperty was dirty
1 parent 718d916 commit 58ac591

1 file changed

Lines changed: 28 additions & 12 deletions

File tree

Assets/Editor Toolbox/Editor/Internal/ReorderableListBase.cs

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,25 @@ private void DoDraggingAndSelection()
260260
}
261261
}
262262

263+
protected bool TryGetNewValueOverride(SerializedProperty property, int index, out object newValue)
264+
{
265+
if (overrideNewElementCallback != null)
266+
{
267+
newValue = overrideNewElementCallback(index);
268+
return true;
269+
}
270+
271+
if (property.propertyType == SerializedPropertyType.ManagedReference ||
272+
property.propertyType == SerializedPropertyType.Generic)
273+
{
274+
newValue = null;
275+
return true;
276+
}
277+
278+
newValue = default;
279+
return false;
280+
}
281+
263282
protected abstract void DoListMiddle();
264283

265284
protected abstract void DoListMiddle(Rect middleRect);
@@ -457,27 +476,24 @@ public void CutKeyboardFocus()
457476

458477
public void AppendElement()
459478
{
460-
var newSize = Size.intValue + 1;
461-
Size.intValue = newSize;
479+
var newSize = List.arraySize + 1;
480+
List.arraySize = newSize;
462481
Index = newSize - 1;
463482

464483
List.serializedObject.ApplyModifiedProperties();
465484
var property = List.GetArrayElementAtIndex(Index);
466-
var fieldInfo = property.GetFieldInfo();
467-
if (fieldInfo == null)
485+
if (!TryGetNewValueOverride(property, Index, out var newValue))
468486
{
469487
return;
470488
}
471489

472-
if (overrideNewElementCallback != null)
473-
{
474-
var newValue = overrideNewElementCallback(Index);
475-
property.SetProperValue(fieldInfo, newValue, false);
476-
}
477-
else
490+
var fieldInfo = property.GetFieldInfo();
491+
if (fieldInfo == null)
478492
{
479-
property.SetProperValue(fieldInfo, null, false);
493+
return;
480494
}
495+
496+
property.SetProperValue(fieldInfo, newValue, false);
481497
}
482498

483499
public void RemoveElement()
@@ -660,7 +676,7 @@ public virtual void DrawStandardHeader(Rect rect)
660676
sizeValue = Mathf.Max(EditorGUI.DelayedIntField(rect, sizeValue, Style.sizePropertyStyle), 0);
661677
if (EditorGUI.EndChangeCheck())
662678
{
663-
property.intValue = sizeValue;
679+
List.arraySize = sizeValue;
664680
}
665681

666682
EditorGUI.EndProperty();

0 commit comments

Comments
 (0)