@@ -914,11 +914,15 @@ internal void ProcessNavigation(ref NavigationModel navigationState)
914
914
915
915
data . device = m_SubmitCancelState . device ;
916
916
917
- if ( cancelAction != null && cancelAction . WasPerformedThisDynamicUpdate ( ) )
917
+ if ( cancelAction != null && m_NavigationState . wasCancelButtonReleased )
918
918
ExecuteEvents . Execute ( eventSystem . currentSelectedGameObject , data , ExecuteEvents . cancelHandler ) ;
919
- if ( ! data . used && submitAction != null && submitAction . WasPerformedThisDynamicUpdate ( ) )
919
+ if ( ! data . used && submitAction != null && m_NavigationState . wasSubmitButtonReleased )
920
920
ExecuteEvents . Execute ( eventSystem . currentSelectedGameObject , data , ExecuteEvents . submitHandler ) ;
921
921
}
922
+
923
+ // We clear the following flags here to mark that we've processed them already
924
+ m_NavigationState . wasSubmitButtonReleased = false ;
925
+ m_NavigationState . wasCancelButtonReleased = false ;
922
926
}
923
927
924
928
private bool IsMoveAllowed ( AxisEventData eventData )
@@ -1403,7 +1407,7 @@ public InputActionReference move
1403
1407
public InputActionReference submit
1404
1408
{
1405
1409
get => m_SubmitAction ;
1406
- set => SwapAction ( ref m_SubmitAction , value , m_ActionsHooked , m_OnSubmitCancelDelegate ) ;
1410
+ set => SwapAction ( ref m_SubmitAction , value , m_ActionsHooked , m_OnSubmitDelegate ) ;
1407
1411
}
1408
1412
1409
1413
/// <summary>
@@ -1443,7 +1447,7 @@ public InputActionReference submit
1443
1447
public InputActionReference cancel
1444
1448
{
1445
1449
get => m_CancelAction ;
1446
- set => SwapAction ( ref m_CancelAction , value , m_ActionsHooked , m_OnSubmitCancelDelegate ) ;
1450
+ set => SwapAction ( ref m_CancelAction , value , m_ActionsHooked , m_OnCancelDelegate ) ;
1447
1451
}
1448
1452
1449
1453
/// <summary>
@@ -2287,11 +2291,6 @@ private void OnMoveCallback(InputAction.CallbackContext context)
2287
2291
m_NavigationState . device = context . control . device ;
2288
2292
}
2289
2293
2290
- private void OnSubmitCancelCallback ( InputAction . CallbackContext context )
2291
- {
2292
- m_SubmitCancelState . device = context . control . device ;
2293
- }
2294
-
2295
2294
private void OnTrackedDeviceOrientationCallback ( InputAction . CallbackContext context )
2296
2295
{
2297
2296
var index = GetPointerStateIndexFor ( ref context ) ;
@@ -2318,6 +2317,26 @@ private void OnTrackedDevicePositionCallback(InputAction.CallbackContext context
2318
2317
#endif
2319
2318
}
2320
2319
2320
+ private void OnSubmit ( InputAction . CallbackContext context )
2321
+ {
2322
+ m_SubmitCancelState . device = context . control . device ;
2323
+
2324
+ if ( ! context . ReadValueAsButton ( ) )
2325
+ {
2326
+ m_NavigationState . wasSubmitButtonReleased = true ;
2327
+ }
2328
+ }
2329
+
2330
+ private void OnCancel ( InputAction . CallbackContext context )
2331
+ {
2332
+ m_SubmitCancelState . device = context . control . device ;
2333
+
2334
+ if ( ! context . ReadValueAsButton ( ) )
2335
+ {
2336
+ m_NavigationState . wasCancelButtonReleased = true ;
2337
+ }
2338
+ }
2339
+
2321
2340
private void OnControlsChanged ( object obj )
2322
2341
{
2323
2342
m_NeedToPurgeStalePointers = true ;
@@ -2509,12 +2528,14 @@ private void HookActions()
2509
2528
m_OnScrollWheelDelegate = OnScrollCallback ;
2510
2529
if ( m_OnMoveDelegate == null )
2511
2530
m_OnMoveDelegate = OnMoveCallback ;
2512
- if ( m_OnSubmitCancelDelegate == null )
2513
- m_OnSubmitCancelDelegate = OnSubmitCancelCallback ;
2514
2531
if ( m_OnTrackedDeviceOrientationDelegate == null )
2515
2532
m_OnTrackedDeviceOrientationDelegate = OnTrackedDeviceOrientationCallback ;
2516
2533
if ( m_OnTrackedDevicePositionDelegate == null )
2517
2534
m_OnTrackedDevicePositionDelegate = OnTrackedDevicePositionCallback ;
2535
+ if ( m_OnSubmitDelegate == null )
2536
+ m_OnSubmitDelegate = OnSubmit ;
2537
+ if ( m_OnCancelDelegate == null )
2538
+ m_OnCancelDelegate = OnCancel ;
2518
2539
2519
2540
SetActionCallbacks ( true ) ;
2520
2541
}
@@ -2532,14 +2553,14 @@ private void SetActionCallbacks(bool install)
2532
2553
m_ActionsHooked = install ;
2533
2554
SetActionCallback ( m_PointAction , m_OnPointDelegate , install ) ;
2534
2555
SetActionCallback ( m_MoveAction , m_OnMoveDelegate , install ) ;
2535
- SetActionCallback ( m_SubmitAction , m_OnSubmitCancelDelegate , install ) ;
2536
- SetActionCallback ( m_CancelAction , m_OnSubmitCancelDelegate , install ) ;
2537
2556
SetActionCallback ( m_LeftClickAction , m_OnLeftClickDelegate , install ) ;
2538
2557
SetActionCallback ( m_RightClickAction , m_OnRightClickDelegate , install ) ;
2539
2558
SetActionCallback ( m_MiddleClickAction , m_OnMiddleClickDelegate , install ) ;
2540
2559
SetActionCallback ( m_ScrollWheelAction , m_OnScrollWheelDelegate , install ) ;
2541
2560
SetActionCallback ( m_TrackedDeviceOrientationAction , m_OnTrackedDeviceOrientationDelegate , install ) ;
2542
2561
SetActionCallback ( m_TrackedDevicePositionAction , m_OnTrackedDevicePositionDelegate , install ) ;
2562
+ SetActionCallback ( m_SubmitAction , m_OnSubmitDelegate , install ) ;
2563
+ SetActionCallback ( m_CancelAction , m_OnCancelDelegate , install ) ;
2543
2564
}
2544
2565
2545
2566
private static void SetActionCallback ( InputActionReference actionReference , Action < InputAction . CallbackContext > callback , bool install )
@@ -2649,13 +2670,14 @@ private struct InputActionReferenceState
2649
2670
2650
2671
private Action < InputAction . CallbackContext > m_OnPointDelegate ;
2651
2672
private Action < InputAction . CallbackContext > m_OnMoveDelegate ;
2652
- private Action < InputAction . CallbackContext > m_OnSubmitCancelDelegate ;
2653
2673
private Action < InputAction . CallbackContext > m_OnLeftClickDelegate ;
2654
2674
private Action < InputAction . CallbackContext > m_OnRightClickDelegate ;
2655
2675
private Action < InputAction . CallbackContext > m_OnMiddleClickDelegate ;
2656
2676
private Action < InputAction . CallbackContext > m_OnScrollWheelDelegate ;
2657
2677
private Action < InputAction . CallbackContext > m_OnTrackedDevicePositionDelegate ;
2658
2678
private Action < InputAction . CallbackContext > m_OnTrackedDeviceOrientationDelegate ;
2679
+ private Action < InputAction . CallbackContext > m_OnSubmitDelegate ;
2680
+ private Action < InputAction . CallbackContext > m_OnCancelDelegate ;
2659
2681
private Action < object > m_OnControlsChangedDelegate ;
2660
2682
2661
2683
// Pointer-type input (also tracking-type).
0 commit comments