Skip to content

Commit e58f599

Browse files
authored
FIX: Avoid errors logged when opening settings menu (ISX-1721) (#1825)
* FIX: Avoid errors logged when opening settings menu (ISX-1721) * Address feedback: Consolidate root element for views and bugfix logic. * Rename after merging develop branch. * Fix scrollview access sometimes failing. * Match existing styles, including having readonly element variables rather than accessed on demand.
1 parent a89c735 commit e58f599

File tree

12 files changed

+93
-106
lines changed

12 files changed

+93
-106
lines changed

Packages/com.unity.inputsystem/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ however, it has to be formatted properly to pass verification tests.
3636
- Fixed missing name in window title for Input Action assets.
3737
- Fixed showing action properties view when there were no actions.
3838
- Fixed "Listen" functionality for selecting an input sometimes expecting the wrong input type.
39+
- Fixed console errors that can be produced when opening input package settings from the Inspector.
3940
- Fixed InputManager.asset file growing in size on each Reset call.
4041

4142
## [1.8.0-pre.2] - 2023-11-09

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/ActionMapsView.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@ namespace UnityEngine.InputSystem.Editor
1313
internal class ActionMapsView : ViewBase<ActionMapsView.ViewState>
1414
{
1515
public ActionMapsView(VisualElement root, StateContainer stateContainer)
16-
: base(stateContainer)
16+
: base(root, stateContainer)
1717
{
18-
m_Root = root;
19-
20-
m_ListView = m_Root?.Q<ListView>("action-maps-list-view");
18+
m_ListView = root.Q<ListView>("action-maps-list-view");
2119
m_ListView.selectionType = UIElements.SelectionType.Single;
2220

2321
m_ListViewSelectionChangeFilter = new CollectionViewSelectionChangeFilter(m_ListView);
@@ -61,12 +59,11 @@ public ActionMapsView(VisualElement root, StateContainer stateContainer)
6159
CreateSelector(s => new ViewStateCollection<string>(Selectors.GetActionMapNames(s)),
6260
(actionMapNames, state) => new ViewState(Selectors.GetSelectedActionMap(state), actionMapNames));
6361

64-
addActionMapButton.clicked += AddActionMap;
62+
m_AddActionMapButton = root.Q<Button>("add-new-action-map-button");
63+
m_AddActionMapButton.clicked += AddActionMap;
6564
ContextMenu.GetContextMenuForActionMapListView(this, m_ListView.parent);
6665
}
6766

68-
private Button addActionMapButton => m_Root?.Q<Button>("add-new-action-map-button");
69-
7067
public override void RedrawUI(ViewState viewState)
7168
{
7269
m_ListView.itemsSource = viewState.actionMapNames?.ToList() ?? new List<string>();
@@ -81,7 +78,7 @@ public override void RedrawUI(ViewState viewState)
8178

8279
public override void DestroyView()
8380
{
84-
addActionMapButton.clicked -= AddActionMap;
81+
m_AddActionMapButton.clicked -= AddActionMap;
8582
}
8683

8784
private void RenameNewActionMaps()
@@ -183,8 +180,8 @@ private void OnValidateCommand(ValidateCommandEvent evt)
183180

184181
private readonly CollectionViewSelectionChangeFilter m_ListViewSelectionChangeFilter;
185182
private bool m_EnterRenamingMode;
186-
private readonly VisualElement m_Root;
187-
private ListView m_ListView;
183+
private readonly ListView m_ListView;
184+
private readonly Button m_AddActionMapButton;
188185

189186
internal class ViewState
190187
{

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/ActionPropertiesView.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ namespace UnityEngine.InputSystem.Editor
1010
{
1111
internal class ActionPropertiesView : ViewBase<(SerializedInputAction?, List<string>)>
1212
{
13-
private readonly VisualElement m_Root;
1413
private readonly Foldout m_ParentFoldout;
1514

1615
public ActionPropertiesView(VisualElement root, Foldout foldout, StateContainer stateContainer)
17-
: base(stateContainer)
16+
: base(root, stateContainer)
1817
{
19-
m_Root = root;
2018
m_ParentFoldout = foldout;
2119

2220
// TODO: Consider IEquatable<T> and how to compare selector data
@@ -37,7 +35,7 @@ public override void RedrawUI((SerializedInputAction ? , List<string>) viewState
3735
m_ParentFoldout.text = "Action";
3836
var inputAction = viewState.Item1.Value;
3937

40-
m_Root.Clear();
38+
rootElement.Clear();
4139

4240
var actionType = new EnumField("Action Type", inputAction.type)
4341
{
@@ -47,7 +45,7 @@ public override void RedrawUI((SerializedInputAction ? , List<string>) viewState
4745
{
4846
Dispatch(Commands.ChangeActionType(inputAction, (InputActionType)evt.newValue));
4947
});
50-
m_Root.Add(actionType);
48+
rootElement.Add(actionType);
5149

5250
if (inputAction.type != InputActionType.Button)
5351
{
@@ -65,7 +63,7 @@ public override void RedrawUI((SerializedInputAction ? , List<string>) viewState
6563
{
6664
Dispatch(Commands.ChangeActionControlType(inputAction, controlType.index));
6765
});
68-
m_Root.Add(controlType);
66+
rootElement.Add(controlType);
6967
}
7068

7169
if (inputAction.type != InputActionType.Value)
@@ -79,7 +77,7 @@ public override void RedrawUI((SerializedInputAction ? , List<string>) viewState
7977
{
8078
Dispatch(Commands.ChangeInitialStateCheck(inputAction, evt.newValue));
8179
});
82-
m_Root.Add(initialStateCheck);
80+
rootElement.Add(initialStateCheck);
8381
}
8482
}
8583
}

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/ActionsTreeView.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ namespace UnityEngine.InputSystem.Editor
1616
/// </summary>
1717
internal class ActionsTreeView : ViewBase<ActionsTreeView.ViewState>
1818
{
19-
private readonly VisualElement m_Root;
2019
private readonly TreeView m_ActionsTreeView;
21-
private Button addActionButton => m_Root?.Q<Button>("add-new-action-button");
20+
private readonly Button m_AddActionButton;
21+
private readonly ScrollView m_PropertiesScrollview;
2222

2323
private bool m_RenameOnActionAdded;
2424
private readonly CollectionViewSelectionChangeFilter m_ActionsTreeViewSelectionChangeFilter;
@@ -27,11 +27,11 @@ internal class ActionsTreeView : ViewBase<ActionsTreeView.ViewState>
2727
private Dictionary<Guid, int> m_GuidToTreeViewId;
2828

2929
public ActionsTreeView(VisualElement root, StateContainer stateContainer)
30-
: base(stateContainer)
30+
: base(root, stateContainer)
3131
{
32-
m_Root = root;
33-
34-
m_ActionsTreeView = m_Root.Q<TreeView>("actions-tree-view");
32+
m_AddActionButton = root.Q<Button>("add-new-action-button");
33+
m_PropertiesScrollview = root.Q<ScrollView>("properties-scrollview");
34+
m_ActionsTreeView = root.Q<TreeView>("actions-tree-view");
3535
//assign unique viewDataKey to store treeView states like expanded/collapsed items - make it unique to avoid conflicts with other TreeViews
3636
m_ActionsTreeView.viewDataKey = "InputActionTreeView " + stateContainer.GetState().serializedObject.targetObject.GetInstanceID();
3737
m_GuidToTreeViewId = new Dictionary<Guid, int>();
@@ -147,7 +147,7 @@ public ActionsTreeView(VisualElement root, StateContainer stateContainer)
147147
};
148148
});
149149

150-
addActionButton.clicked += AddAction;
150+
m_AddActionButton.clicked += AddAction;
151151
}
152152

153153
private int GetSelectedElementId(InputActionsEditorState state, List<TreeViewItemData<ActionOrBindingData>> treeData)
@@ -188,7 +188,7 @@ private int GetComponentOrBindingID(List<TreeViewItemData<ActionOrBindingData>>
188188

189189
public override void DestroyView()
190190
{
191-
addActionButton.clicked -= AddAction;
191+
m_AddActionButton.clicked -= AddAction;
192192
}
193193

194194
public override void RedrawUI(ViewState viewState)
@@ -202,10 +202,10 @@ public override void RedrawUI(ViewState viewState)
202202
m_ActionsTreeView.ScrollToItemById(viewState.newElementID);
203203
}
204204
RenameNewAction(viewState.newElementID);;
205-
addActionButton.SetEnabled(viewState.actionMapCount > 0);
205+
m_AddActionButton.SetEnabled(viewState.actionMapCount > 0);
206206

207207
// Don't want to show action properties if there's no actions.
208-
m_Root.Q<VisualElement>("properties-scrollview").visible = m_ActionsTreeView.GetTreeCount() > 0;
208+
m_PropertiesScrollview.visible = m_ActionsTreeView.GetTreeCount() > 0;
209209
}
210210

211211
private void RenameNewAction(int id)

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/BindingPropertiesView.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ namespace UnityEngine.InputSystem.Editor
77
{
88
internal class BindingPropertiesView : ViewBase<BindingPropertiesView.ViewState>
99
{
10-
private readonly VisualElement m_Root;
1110
private readonly Foldout m_ParentFoldout;
1211
private CompositeBindingPropertiesView m_CompositeBindingPropertiesView;
1312
private CompositePartBindingPropertiesView m_CompositePartBindingPropertiesView;
1413

1514
public BindingPropertiesView(VisualElement root, Foldout foldout, StateContainer stateContainer)
16-
: base(stateContainer)
15+
: base(root, stateContainer)
1716
{
18-
m_Root = root;
1917
m_ParentFoldout = foldout;
2018

2119
CreateSelector(state => state.selectedBindingIndex,
@@ -37,7 +35,7 @@ public override void RedrawUI(ViewState viewState)
3735
if (selectedBindingIndex == -1)
3836
return;
3937

40-
m_Root.Clear();
38+
rootElement.Clear();
4139

4240
var binding = viewState.selectedBinding;
4341
if (!binding.HasValue)
@@ -47,11 +45,11 @@ public override void RedrawUI(ViewState viewState)
4745
if (binding.Value.isComposite)
4846
{
4947
m_ParentFoldout.text = "Composite";
50-
m_CompositeBindingPropertiesView = CreateChildView(new CompositeBindingPropertiesView(m_Root, stateContainer));
48+
m_CompositeBindingPropertiesView = CreateChildView(new CompositeBindingPropertiesView(rootElement, stateContainer));
5149
}
5250
else if (binding.Value.isPartOfComposite)
5351
{
54-
m_CompositePartBindingPropertiesView = CreateChildView(new CompositePartBindingPropertiesView(m_Root, stateContainer));
52+
m_CompositePartBindingPropertiesView = CreateChildView(new CompositePartBindingPropertiesView(rootElement, stateContainer));
5553
DrawControlSchemeToggles(viewState, binding.Value);
5654
}
5755
else
@@ -64,7 +62,7 @@ public override void RedrawUI(ViewState viewState)
6462
controlPathEditor.SetExpectedControlLayout(inputAction?.expectedControlType ?? "");
6563

6664
var controlPathContainer = new IMGUIContainer(controlPathEditor.OnGUI);
67-
m_Root.Add(controlPathContainer);
65+
rootElement.Add(controlPathContainer);
6866

6967
DrawControlSchemeToggles(viewState, binding.Value);
7068
}
@@ -81,15 +79,15 @@ private void DrawControlSchemeToggles(ViewState viewState, SerializedInputBindin
8179
if (!viewState.controlSchemes.Any()) return;
8280

8381
var useInControlSchemeLabel = new Label("Use in control scheme");
84-
m_Root.Add(useInControlSchemeLabel);
82+
rootElement.Add(useInControlSchemeLabel);
8583

8684
foreach (var controlScheme in viewState.controlSchemes)
8785
{
8886
var checkbox = new Toggle(controlScheme.name)
8987
{
9088
value = binding.controlSchemes.Any(scheme => controlScheme.name == scheme)
9189
};
92-
m_Root.Add(checkbox);
90+
rootElement.Add(checkbox);
9391
checkbox.RegisterValueChangedCallback(changeEvent =>
9492
{
9593
Dispatch(ControlSchemeCommands.ChangeSelectedBindingsControlSchemes(controlScheme.name, changeEvent.newValue));

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/CompositeBindingPropertiesView.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ namespace UnityEngine.InputSystem.Editor
1111
{
1212
internal class CompositeBindingPropertiesView : ViewBase<CompositeBindingPropertiesView.ViewState>
1313
{
14-
private readonly VisualElement m_Root;
1514
private readonly DropdownField m_CompositeTypeField;
1615
private EventCallback<ChangeEvent<string>> m_CompositeTypeFieldChangedHandler;
1716

@@ -20,12 +19,11 @@ internal class CompositeBindingPropertiesView : ViewBase<CompositeBindingPropert
2019
InputActionsEditorConstants.CompositeBindingPropertiesViewUxml;
2120

2221
public CompositeBindingPropertiesView(VisualElement root, StateContainer stateContainer)
23-
: base(stateContainer)
22+
: base(root, stateContainer)
2423
{
25-
m_Root = root;
2624
var visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(UxmlName);
2725
var container = visualTreeAsset.CloneTree();
28-
m_Root.Add(container);
26+
rootElement.Add(container);
2927

3028
m_CompositeTypeField = container.Q<DropdownField>("composite-type-dropdown");
3129

@@ -46,7 +44,7 @@ public override void RedrawUI(ViewState viewState)
4644
{
4745
Dispatch(Commands.UpdatePathNameAndValues(viewState.parameterListView.GetParameters(), viewState.selectedBindingPath));
4846
};
49-
viewState.parameterListView.OnDrawVisualElements(m_Root);
47+
viewState.parameterListView.OnDrawVisualElements(rootElement);
5048
}
5149

5250
public override void DestroyView()

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/CompositePartBindingPropertiesView.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ namespace UnityEngine.InputSystem.Editor
99
{
1010
internal class CompositePartBindingPropertiesView : ViewBase<CompositePartBindingPropertiesView.ViewState>
1111
{
12-
private readonly VisualElement m_Root;
1312
private readonly DropdownField m_CompositePartField;
1413
private readonly IMGUIContainer m_PathEditorContainer;
1514

@@ -18,12 +17,11 @@ internal class CompositePartBindingPropertiesView : ViewBase<CompositePartBindin
1817
InputActionsEditorConstants.CompositePartBindingPropertiesViewUxml;
1918

2019
public CompositePartBindingPropertiesView(VisualElement root, StateContainer stateContainer)
21-
: base(stateContainer)
20+
: base(root, stateContainer)
2221
{
23-
m_Root = root;
2422
var visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(UxmlName);
2523
var container = visualTreeAsset.CloneTree();
26-
m_Root.Add(container);
24+
rootElement.Add(container);
2725

2826
m_PathEditorContainer = container.Q<IMGUIContainer>("path-editor-container");
2927
m_CompositePartField = container.Q<DropdownField>("composite-part-dropdown");

Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/ControlSchemesView.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ internal class ControlSchemesView : ViewBase<InputControlScheme>
1515
public event Action<ViewBase<InputControlScheme>> OnClosing;
1616

1717
public ControlSchemesView(VisualElement root, StateContainer stateContainer, bool updateExisting = false)
18-
: base(stateContainer)
18+
: base(root, stateContainer)
1919
{
20-
m_Root = root;
2120
m_UpdateExisting = updateExisting;
2221

2322
var controlSchemeEditor = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(
@@ -49,7 +48,7 @@ public ControlSchemesView(VisualElement root, StateContainer stateContainer, boo
4948
};
5049
popupWindow.contentContainer.Add(controlSchemeVisualElement);
5150
m_ModalWindow.Add(popupWindow);
52-
m_Root.Add(m_ModalWindow);
51+
root.Add(m_ModalWindow);
5352
m_ModalWindow.StretchToParentSize();
5453
m_ModalWindow.RegisterCallback<ClickEvent>(evt => Close());
5554
popupWindow.RegisterCallback<ClickEvent>(evt => evt.StopPropagation());
@@ -96,7 +95,7 @@ private void RemoveDeviceRequirement()
9695

9796
public override void RedrawUI(InputControlScheme viewState)
9897
{
99-
m_Root.Q<TextField>(kControlSchemeNameTextField).value = viewState.name;
98+
rootElement.Q<TextField>(kControlSchemeNameTextField).value = viewState.name;
10099

101100
m_ListView.itemsSource?.Clear();
102101
m_ListView.itemsSource = viewState.deviceRequirements.Count > 0 ?
@@ -161,7 +160,6 @@ private void BindDeviceTypeCell(VisualElement visualElement, int rowIndex)
161160
((Label)visualElement).text = (((string, bool))m_ListView.itemsSource[rowIndex]).Item1;
162161
}
163162

164-
private readonly VisualElement m_Root;
165163
private readonly bool m_UpdateExisting;
166164
private MultiColumnListView m_ListView;
167165
private VisualElement m_ModalWindow;

0 commit comments

Comments
 (0)