@@ -861,7 +861,7 @@ internal void ProcessNavigation(ref NavigationModel navigationState)
861861
862862 if ( allow )
863863 {
864- var eventData = m_NavigationState . eventData ;
864+ var eventData = m_NavigationState . eventData as ExtendedAxisEventData ;
865865 if ( eventData == null )
866866 {
867867 eventData = new ExtendedAxisEventData ( eventSystem ) ;
@@ -871,6 +871,7 @@ internal void ProcessNavigation(ref NavigationModel navigationState)
871871
872872 eventData . moveVector = moveVector ;
873873 eventData . moveDir = moveDirection ;
874+ eventData . device = navigationState . device ;
874875
875876 if ( IsMoveAllowed ( eventData ) )
876877 {
@@ -903,7 +904,16 @@ internal void ProcessNavigation(ref NavigationModel navigationState)
903904 var submitAction = m_SubmitAction ? . action ;
904905 var cancelAction = m_CancelAction ? . action ;
905906
906- var data = GetBaseEventData ( ) ;
907+ var data = m_SubmitCancelState . eventData as ExtendedSubmitCancelEventData ;
908+ if ( data == null )
909+ {
910+ data = new ExtendedSubmitCancelEventData ( eventSystem ) ;
911+ m_SubmitCancelState . eventData = data ;
912+ }
913+ data . Reset ( ) ;
914+
915+ data . device = m_SubmitCancelState . device ;
916+
907917 if ( cancelAction != null && cancelAction . WasPerformedThisFrame ( ) )
908918 ExecuteEvents . Execute ( eventSystem . currentSelectedGameObject , data , ExecuteEvents . cancelHandler ) ;
909919 if ( ! data . used && submitAction != null && submitAction . WasPerformedThisFrame ( ) )
@@ -1393,7 +1403,7 @@ public InputActionReference move
13931403 public InputActionReference submit
13941404 {
13951405 get => m_SubmitAction ;
1396- set => SwapAction ( ref m_SubmitAction , value , m_ActionsHooked , null ) ;
1406+ set => SwapAction ( ref m_SubmitAction , value , m_ActionsHooked , m_OnSubmitCancelDelegate ) ;
13971407 }
13981408
13991409 /// <summary>
@@ -1433,7 +1443,7 @@ public InputActionReference submit
14331443 public InputActionReference cancel
14341444 {
14351445 get => m_CancelAction ;
1436- set => SwapAction ( ref m_CancelAction , value , m_ActionsHooked , null ) ;
1446+ set => SwapAction ( ref m_CancelAction , value , m_ActionsHooked , m_OnSubmitCancelDelegate ) ;
14371447 }
14381448
14391449 /// <summary>
@@ -2245,6 +2255,12 @@ private void OnMoveCallback(InputAction.CallbackContext context)
22452255 {
22462256 ////REVIEW: should we poll this? or set the action to not be pass-through? (ps4 controller is spamming this action)
22472257 m_NavigationState . move = context . ReadValue < Vector2 > ( ) ;
2258+ m_NavigationState . device = context . control . device ;
2259+ }
2260+
2261+ private void OnSubmitCancelCallback ( InputAction . CallbackContext context )
2262+ {
2263+ m_SubmitCancelState . device = context . control . device ;
22482264 }
22492265
22502266 private void OnTrackedDeviceOrientationCallback ( InputAction . CallbackContext context )
@@ -2441,6 +2457,13 @@ public override Vector2 ConvertPointerEventScrollDeltaToTicks(Vector2 scrollDelt
24412457
24422458#endif
24432459
2460+ #if UNITY_INPUT_SYSTEM_INPUT_MODULE_NON_KEYBOARD
2461+ public override bool IsNonKeyboardNavigationEvent ( BaseEventData eventData )
2462+ {
2463+ return eventData is INavigationEventData eed && eed . device is not Keyboard ;
2464+ }
2465+ #endif
2466+
24442467 private void HookActions ( )
24452468 {
24462469 if ( m_ActionsHooked )
@@ -2458,6 +2481,8 @@ private void HookActions()
24582481 m_OnScrollWheelDelegate = OnScrollCallback ;
24592482 if ( m_OnMoveDelegate == null )
24602483 m_OnMoveDelegate = OnMoveCallback ;
2484+ if ( m_OnSubmitCancelDelegate == null )
2485+ m_OnSubmitCancelDelegate = OnSubmitCancelCallback ;
24612486 if ( m_OnTrackedDeviceOrientationDelegate == null )
24622487 m_OnTrackedDeviceOrientationDelegate = OnTrackedDeviceOrientationCallback ;
24632488 if ( m_OnTrackedDevicePositionDelegate == null )
@@ -2479,6 +2504,8 @@ private void SetActionCallbacks(bool install)
24792504 m_ActionsHooked = install ;
24802505 SetActionCallback ( m_PointAction , m_OnPointDelegate , install ) ;
24812506 SetActionCallback ( m_MoveAction , m_OnMoveDelegate , install ) ;
2507+ SetActionCallback ( m_SubmitAction , m_OnSubmitCancelDelegate , install ) ;
2508+ SetActionCallback ( m_CancelAction , m_OnSubmitCancelDelegate , install ) ;
24822509 SetActionCallback ( m_LeftClickAction , m_OnLeftClickDelegate , install ) ;
24832510 SetActionCallback ( m_RightClickAction , m_OnRightClickDelegate , install ) ;
24842511 SetActionCallback ( m_MiddleClickAction , m_OnMiddleClickDelegate , install ) ;
@@ -2594,6 +2621,7 @@ private struct InputActionReferenceState
25942621
25952622 private Action < InputAction . CallbackContext > m_OnPointDelegate ;
25962623 private Action < InputAction . CallbackContext > m_OnMoveDelegate ;
2624+ private Action < InputAction . CallbackContext > m_OnSubmitCancelDelegate ;
25972625 private Action < InputAction . CallbackContext > m_OnLeftClickDelegate ;
25982626 private Action < InputAction . CallbackContext > m_OnRightClickDelegate ;
25992627 private Action < InputAction . CallbackContext > m_OnMiddleClickDelegate ;
@@ -2611,6 +2639,7 @@ private struct InputActionReferenceState
26112639
26122640 // Navigation-type input.
26132641 private NavigationModel m_NavigationState ;
2642+ private SubmitCancelModel m_SubmitCancelState ;
26142643
26152644 [ NonSerialized ] private GameObject m_LocalMultiPlayerRoot ;
26162645
0 commit comments