FIX: Two clicks needed to move focus between parameter fields in the Input Actions editor [UUM-144339]#2439
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as off-topic.
This comment was marked as off-topic.
Test Plan(Custom_review updated until commit 1a6cb31)Updated: 2026-06-16 - Refined scenarios to include "no-change" blur logic verification and structural rebuild safety.
Summary of Changes & Risk AssessmentSummary of ChangesThis PR addresses a focus issue in the Input Actions editor where switching between parameter fields required two clicks. The fix introduces a one-shot Risk Assessment
Test ScenariosFunctional Testing
Regression Testing
🔍 Regression Deep Dive (additional risks identified)
Edge Cases
💡 This test plan updates automatically when 🤖 Helpful? Please react with 👍/👎 | Questions❓Please reach out in Slack #ask-u-pr |
d8ec951 to
769b139
Compare
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
…Input Actions editor [UUM-144339] In the Input Actions editor, moving focus directly from one interaction/processor parameter field to another (for example a Normalize processor's Min to its Max) required two clicks instead of one. Committing a parameter value calls SerializedProperty.ApplyModifiedProperties(), which StateContainer's TrackSerializedObjectValue callback turns into a full editor UI rebuild. That rebuild tore down and recreated the parameter field the click was moving focus into, so the first click was lost. NameAndParametersListView.OnParametersChanged now asks the StateContainer to skip the rebuild for that single value-only commit (StateContainer.IgnoreNextSerializedObjectChange), leaving the fields intact so focus moves on the first click. Structural edits (add/move/delete) do not opt out and still rebuild. Jira: https://jira.unity3d.com/browse/UUM-144339
769b139 to
1a6cb31
Compare
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
|
This updated revision is fantastic and completely resolves the potential edge cases. Key Improvements & Correctness
The code is exceptionally clean, robust, and fully solves the double-click focus issue described in UUM-144339. This is ready to go. 📚 Additional Context
🤖 Helpful? 👍/👎 |
|
Seeing as this failed manual testing twice I am not happy with the risk. Only low risk fixes should be automated - closing |
Description
Note
This pull request was generated automatically. Please review carefully before merging.
In the Input Actions editor's Action Properties panel, moving focus directly from one interaction/processor parameter field to another — for example a Normalize processor's
Minto itsMax— required two clicks instead of one. The first click was effectively swallowed and only the second moved focus.The cause is in how a value commit is handled. When
NameAndParametersListView.OnParametersChanged(ParameterListView listView, int index)commits an edited value viaSerializedProperty.ApplyModifiedProperties(),StateContainer'sTrackSerializedObjectValuecallback (hardcoded toUIRebuildMode.Rebuild) turns that change into a full editor UI rebuild. The rebuild tears down and recreates the parameter field the click is moving focus into, so that first click lands on an element that no longer exists. The fix lets a value-only commit opt out of that single rebuild:StateContainer.IgnoreNextSerializedObjectChange()makes the next serialized-object change skip the rebuild (consumed one-shot), andOnParametersChangedcalls it just before committing. The fields are left intact and focus moves on the first click. Structural edits (add/move/delete) deliberately do not opt out and still rebuild.Testing status & QA
Overall Product Risks
StateContainerrebuild path; no public API or serialized data changes)Comments to reviewers
The suppression is a one-shot consumed by the next
TrackSerializedObjectValuenotification and is set only for value-only parameter commits (not add/move/delete). Worth confirming no other path depends on a rebuild firing for that specific commit.Checklist
Before review:
Changed,Fixed,Addedsections.Area_CanDoX,Area_CanDoX_EvenIfYIsTheCase,Area_WhenIDoX_AndYHappens_ThisIsTheResult.During merge:
NEW: ___.FIX: ___.DOCS: ___.CHANGE: ___.RELEASE: 1.1.0-preview.3.