So, the intricacies of the input processing for key presses and how ProcessTouch() works are still a bit beyond me, but I did find what appears to be a solution...
It seems that this code that processes the submit press/unpress:
if (submitKeyDown || submitKeyUp)
{
currentScheme = ControlScheme.Controller;
currentTouch.last = currentTouch.current;
currentTouch.current = mCurrentSelection;
ProcessTouch(submitKeyDown, submitKeyUp);
currentTouch.last = null;
}
Guarantees that when the un-press happens, currentTouch.current is not equal to currentTouch.last.
This in turn triggers this code:
// If the drag process hasn't started yet but we've already moved off the object, start it immediately
if (!currentTouch.dragStarted && currentTouch.last != currentTouch.current)
This ultimately means that Drag() gets called on the scroll view, which seems to be looking at mouse/touch deltas or something and coming up with some bogus values that aren't relevant.
My solution was to swap these two lines around, which has the end result that a submit key release won't be considered a "drag" event at all:
currentTouch.last = currentTouch.current;
currentTouch.current = mCurrentSelection;
Does that seem like an appropriate fix?