Skip to content

Commit c8d3fab

Browse files
author
David Kline
authored
Merge pull request #1954 from davidkline-ms/inputFix1949
Fix crash (null reference exception) when air-tapping objects
2 parents 611f362 + d6c69d0 commit c8d3fab

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

Assets/HoloToolkit/Input/Scripts/Focus/FocusManager.cs

+10-12
Original file line numberDiff line numberDiff line change
@@ -343,25 +343,20 @@ public void UnregisterPointer(IPointingSource pointingSource)
343343

344344
public GameObject TryGetFocusedObject(BaseEventData eventData)
345345
{
346-
FocusDetails? details = TryGetFocusDetails(eventData);
347-
348-
if (details == null)
349-
{
350-
return null;
351-
}
352-
353346
IPointingSource pointingSource;
354347
TryGetPointingSource(eventData, out pointingSource);
355348
PointerInputEventData pointerInputEventData = GetSpecificPointerEventData(pointingSource);
356349

357350
Debug.Assert(pointerInputEventData != null);
358-
pointerInputEventData.selectedObject = details.Value.Object;
359-
360-
return details.Value.Object;
351+
return pointerInputEventData.selectedObject;
361352
}
362353

363354
public bool TryGetPointingSource(BaseEventData eventData, out IPointingSource pointingSource)
364355
{
356+
// pre-initialize pointingSource to null, assuming we will return false
357+
pointingSource = null;
358+
if (eventData == null) { return false; }
359+
365360
for (int i = 0; i < pointers.Count; i++)
366361
{
367362
if (pointers[i].PointingSource.OwnsInput(eventData))
@@ -371,7 +366,6 @@ public bool TryGetPointingSource(BaseEventData eventData, out IPointingSource po
371366
}
372367
}
373368

374-
pointingSource = null;
375369
return false;
376370
}
377371

@@ -440,7 +434,11 @@ public PointerInputEventData GetGazePointerEventData()
440434
public PointerInputEventData GetSpecificPointerEventData(IPointingSource pointer)
441435
{
442436
PointerData pointerEventData;
443-
return GetPointerData(pointer, out pointerEventData) ? pointerEventData.UnityUIPointerData : null;
437+
438+
if (!GetPointerData(pointer, out pointerEventData)) { return null; }
439+
440+
pointerEventData.UnityUIPointerData.selectedObject = GetFocusedObject(pointer);
441+
return pointerEventData.UnityUIPointerData;
444442
}
445443

446444
public float GetPointingExtent(IPointingSource pointingSource)

Assets/HoloToolkit/Input/Scripts/Utilities/Managers/InputManager.cs

+10-3
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,12 @@ public void RaiseSourceUp(IInputSource source, uint sourceId, InteractionSourceP
435435
pointerInputEventData.InputSource = source;
436436
pointerInputEventData.SourceId = sourceId;
437437

438-
ExecuteEvents.ExecuteHierarchy(inputEventData.selectedObject, pointerInputEventData, ExecuteEvents.pointerUpHandler);
439-
ExecuteEvents.ExecuteHierarchy(inputEventData.selectedObject, pointerInputEventData, ExecuteEvents.pointerClickHandler);
438+
if (pointerInputEventData.selectedObject != null)
439+
{
440+
ExecuteEvents.ExecuteHierarchy(pointerInputEventData.selectedObject, pointerInputEventData, ExecuteEvents.pointerUpHandler);
441+
ExecuteEvents.ExecuteHierarchy(pointerInputEventData.selectedObject, pointerInputEventData, ExecuteEvents.pointerClickHandler);
442+
}
443+
440444
pointerInputEventData.Clear();
441445
}
442446
}
@@ -473,7 +477,10 @@ public void RaiseSourceDown(IInputSource source, uint sourceId, InteractionSourc
473477
pointerInputEventData.pressPosition = pointerInputEventData.position;
474478
pointerInputEventData.pointerPressRaycast = pointerInputEventData.pointerCurrentRaycast;
475479

476-
ExecuteEvents.ExecuteHierarchy(inputEventData.selectedObject, pointerInputEventData, ExecuteEvents.pointerDownHandler);
480+
if (pointerInputEventData.selectedObject != null)
481+
{
482+
ExecuteEvents.ExecuteHierarchy(pointerInputEventData.selectedObject, pointerInputEventData, ExecuteEvents.pointerDownHandler);
483+
}
477484
}
478485
}
479486

0 commit comments

Comments
 (0)