We've tracked down and fixed the issue that a lot of you were having with dropdowns changing the wrong values. Sorry for the inconvencience,
and, as always, a big thank you to everyone who helped us track it down by providing examples that let us reproduce the problem.
Fixed an issue where the object fields would break control id's, causing enums and dropdowns to sometimes change the value of a different member than intended.
Fixed massive number of cases where value changes would not be registered properly by Odin. This particularly affected value changes triggered by dropdown menus, and meant that objects would sometimes not be marked dirty when they should, and prefab instances would not be updated when the prefab itself was changed.
Fixed case where pasting a value in the inspector would not properly mark an object as dirty, sometimes causing pasted values to be lost on reload.
Fixed error in multiselection where, if a value was dragged onto a UnityObject field, the UnityObject values wouldn't change if the dragged object was the same as the first selected object value.
Fixed error in multiselection where "parallel" UnityObjects wouldn't be detected as a null property if all of them were null.
Fixed error in multiselection where "parallel" UnityObjects wouldn't have a value conflict detected if none of them were null, but they were still different object references.
Fixed case where ListDrawer would throw constant NullReferenceExceptions if ListElementLabelName was set and ShowIndexLabels was false or not set to true globally.
Fixed a few cases where quaternions values wouldn't be able to be changed properly in raw mode.
Serialization of types derived from Dictionary<TKey, TValue> now works properly, instead of breaking the derived dictionary's internal values completely.
A dictionary's comparer is now also serialized along with the dictionary itself. This means comparers in serialized dictionaries are no longer reset to default constantly.
Improved a lot of label-width alignments.
When you hit the add button on a list of delegates, a null delegate is now instantly added to the list, rather than going through the object picker UI
Downgraded annoying and mostly irrelevant error messages from the DelegateFormatter's deserialization code to warnings instead.
Deserialization logic now attempts to recover from cases where the stated serialized format does not match the serialized data itself, and performs better logging if this very odd case should ever occur again.
Added custom formatter for KeyValuePair<TKey, TValue>, so they can also be serialized outside of the context of the standard dictionary formatter.
Added GUIHelper.ActualLabelWidth which returns the raw value of EditorGUIUtility.labelWidth.