Skip to content

Commit 62d141b

Browse files
committed
fix: Fixed NullReferenceException when choosing a type for a generic unity object
Removed event usage in SelectedNode setter and moved it to the HandleKeyboardEvents method
1 parent ad42822 commit 62d141b

File tree

2 files changed

+45
-64
lines changed

2 files changed

+45
-64
lines changed

Editor/TypeDropdown/SelectionTree.KeyboardInput.cs

Lines changed: 44 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,103 +8,94 @@ internal partial class SelectionTree
88
{
99
#region KeyboardEvents
1010

11-
protected void HandleKeyboardEvents()
11+
private void HandleKeyboardEvents()
1212
{
13-
// KeyDown is always used somehow, so we use KeyUp here
1413
if (Event.current.type != EventType.KeyDown)
1514
return;
1615

17-
switch (Event.current.keyCode)
16+
bool eventUsed = Event.current.keyCode switch
1817
{
19-
case KeyCode.RightArrow:
20-
OnArrowRight();
21-
break;
22-
case KeyCode.LeftArrow:
23-
OnArrowLeft();
24-
break;
25-
case KeyCode.KeypadEnter:
26-
case KeyCode.Return:
27-
OnEnter();
28-
break;
29-
case KeyCode.DownArrow:
30-
if (_noneElement is { IsSelected: true })
31-
{
32-
OnArrowDownNone();
33-
}
34-
else
35-
{
36-
OnArrowDown();
37-
}
38-
break;
39-
case KeyCode.UpArrow:
40-
OnArrowUp();
41-
break;
42-
}
18+
KeyCode.RightArrow => OnArrowRight(),
19+
KeyCode.LeftArrow => OnArrowLeft(),
20+
KeyCode.KeypadEnter => OnEnter(),
21+
KeyCode.Return => OnEnter(),
22+
KeyCode.DownArrow => _noneElement is { IsSelected: true } ? OnArrowDownNone() : OnArrowDown(),
23+
KeyCode.UpArrow => OnArrowUp(),
24+
_ => false
25+
};
26+
27+
if (eventUsed)
28+
Event.current.Use();
4329
}
4430

45-
private void OnArrowRight()
31+
private bool OnArrowRight()
4632
{
4733
if (!SelectedNode.IsFolder || SelectedNode.Expanded)
48-
return;
34+
return false;
4935

5036
SelectedNode.Expanded = true;
51-
Event.current.Use();
37+
return true;
5238
}
5339

54-
private void OnArrowLeft()
40+
private bool OnArrowLeft()
5541
{
5642
if (!SelectedNode.IsFolder || !SelectedNode.Expanded)
57-
return;
43+
return false;
5844

5945
SelectedNode.Expanded = false;
60-
Event.current.Use();
46+
return true;
6147
}
6248

63-
private void OnEnter()
49+
private bool OnEnter()
6450
{
6551
if (SelectedNode.IsFolder)
6652
{
6753
SelectedNode.Expanded = ! SelectedNode.Expanded;
68-
RequestRepaint();
6954
}
7055
else
7156
{
7257
FinalizeSelection();
7358
}
59+
60+
return true;
7461
}
7562

76-
private void OnArrowDown()
63+
private bool OnArrowDown()
7764
{
7865
if (SelectedNode.IsFolder && SelectedNode.Expanded)
7966
{
8067
SelectedNode = SelectedNode.ChildNodes[0];
68+
return true;
8169
}
82-
else
83-
{
84-
if (SelectedNode.IsRoot)
85-
return;
8670

87-
SelectedNode = SelectedNode.ParentNode.GetNextChild(SelectedNode);
71+
if (SelectedNode.IsRoot)
72+
return false;
8873

89-
if (!_visibleRect.Contains(SelectedNode.Rect))
90-
{
91-
_scrollbar.RequestScrollToNode(SelectedNode, Scrollbar.NodePosition.Bottom);
92-
}
74+
SelectedNode = SelectedNode.ParentNode.GetNextChild(SelectedNode);
75+
76+
if (!_visibleRect.Contains(SelectedNode.Rect))
77+
{
78+
_scrollbar.RequestScrollToNode(SelectedNode, Scrollbar.NodePosition.Bottom);
9379
}
80+
81+
return true;
9482
}
9583

96-
private void OnArrowDownNone()
84+
private bool OnArrowDownNone()
9785
{
9886
var firstItem = _root.ChildNodes.FirstOrDefault();
9987

100-
if (firstItem != null)
101-
SelectedNode = firstItem;
88+
if (firstItem == null)
89+
return false;
90+
91+
SelectedNode = firstItem;
92+
return true;
10293
}
10394

104-
private void OnArrowUp()
95+
private bool OnArrowUp()
10596
{
10697
if (SelectedNode.IsRoot)
107-
return;
98+
return false;
10899

109100
if (SelectedNode.ParentNode.IsRoot)
110101
{
@@ -113,7 +104,7 @@ private void OnArrowUp()
113104
if (isFirst && _noneElement != null)
114105
{
115106
SelectedNode = _noneElement;
116-
return;
107+
return true;
117108
}
118109
}
119110

@@ -131,6 +122,8 @@ private void OnArrowUp()
131122
{
132123
_scrollbar.RequestScrollToNode(SelectedNode, Scrollbar.NodePosition.Top);
133124
}
125+
126+
return true;
134127
}
135128

136129
private bool IsExpandedFolder(SelectionNode previousNode)

Editor/TypeDropdown/SelectionTree.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ internal partial class SelectionTree : IRepainter
2626
private readonly Scrollbar _scrollbar;
2727

2828
private string _searchString = string.Empty;
29-
private SelectionNode _selectedNode;
3029
private Rect _visibleRect;
3130
public bool RepaintRequested;
31+
public SelectionNode SelectedNode;
3232

3333
public SelectionTree(
3434
TypeItem[] items,
@@ -55,18 +55,6 @@ public SelectionTree(
5555

5656
public string[] SelectionPaths { get; }
5757

58-
public SelectionNode SelectedNode
59-
{
60-
get => _selectedNode;
61-
set
62-
{
63-
_selectedNode = value;
64-
65-
if (Event.current.type != EventType.Layout)
66-
Event.current.Use();
67-
}
68-
}
69-
7058
public bool DrawInSearchMode { get; private set; }
7159

7260
private List<SelectionNode> Nodes => _root.ChildNodes;

0 commit comments

Comments
 (0)