Skip to content

Commit da1113e

Browse files
committed
fix: Fixed NullReferenceException when pressing keyboard keys in search mode
1 parent 0c2a0c2 commit da1113e

File tree

1 file changed

+66
-4
lines changed

1 file changed

+66
-4
lines changed

Editor/TypeDropdown/SelectionTree.KeyboardInput.cs

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ private void HandleKeyboardEvents()
1919
KeyCode.LeftArrow => OnArrowLeft(),
2020
KeyCode.KeypadEnter => OnEnter(),
2121
KeyCode.Return => OnEnter(),
22-
KeyCode.DownArrow => _noneElement is { IsSelected: true } ? OnArrowDownNone() : OnArrowDown(),
22+
KeyCode.DownArrow => OnArrowDown(),
2323
KeyCode.UpArrow => OnArrowUp(),
2424
_ => false
2525
};
@@ -30,7 +30,7 @@ private void HandleKeyboardEvents()
3030

3131
private bool OnArrowRight()
3232
{
33-
if (!SelectedNode.IsFolder || SelectedNode.Expanded)
33+
if (SelectedNode == null || DrawInSearchMode || !SelectedNode.IsFolder || SelectedNode.Expanded)
3434
return false;
3535

3636
SelectedNode.Expanded = true;
@@ -39,7 +39,7 @@ private bool OnArrowRight()
3939

4040
private bool OnArrowLeft()
4141
{
42-
if (!SelectedNode.IsFolder || !SelectedNode.Expanded)
42+
if (SelectedNode == null ||DrawInSearchMode || !SelectedNode.IsFolder || !SelectedNode.Expanded)
4343
return false;
4444

4545
SelectedNode.Expanded = false;
@@ -48,6 +48,9 @@ private bool OnArrowLeft()
4848

4949
private bool OnEnter()
5050
{
51+
if (SelectedNode == null)
52+
return false;
53+
5154
if (SelectedNode.IsFolder)
5255
{
5356
SelectedNode.Expanded = ! SelectedNode.Expanded;
@@ -62,6 +65,28 @@ private bool OnEnter()
6265

6366
private bool OnArrowDown()
6467
{
68+
if (_noneElement is { IsSelected: true })
69+
return OnArrowDownNone();
70+
71+
if (DrawInSearchMode)
72+
return OnArrowDownSearch();
73+
74+
return OnArrowDownRegular();
75+
}
76+
77+
private bool OnArrowDownRegular()
78+
{
79+
if (SelectedNode == null)
80+
{
81+
if (_root.ChildNodes.Count == 0)
82+
{
83+
return false;
84+
}
85+
86+
SelectedNode = _root.ChildNodes[0];
87+
return true;
88+
}
89+
6590
if (SelectedNode.IsFolder && SelectedNode.Expanded)
6691
{
6792
SelectedNode = SelectedNode.ChildNodes[0];
@@ -81,6 +106,26 @@ private bool OnArrowDown()
81106
return true;
82107
}
83108

109+
private bool OnArrowDownSearch()
110+
{
111+
if (_searchModeTree.Count == 0)
112+
return false;
113+
114+
int indexOfSelected = _searchModeTree.IndexOf(SelectedNode);
115+
116+
if (indexOfSelected == _searchModeTree.Count - 1)
117+
return false;
118+
119+
if (indexOfSelected == -1)
120+
{
121+
SelectedNode = _searchModeTree[0];
122+
return true;
123+
}
124+
125+
SelectedNode = _searchModeTree[indexOfSelected + 1];
126+
return true;
127+
}
128+
84129
private bool OnArrowDownNone()
85130
{
86131
var firstItem = _root.ChildNodes.FirstOrDefault();
@@ -94,7 +139,10 @@ private bool OnArrowDownNone()
94139

95140
private bool OnArrowUp()
96141
{
97-
if (SelectedNode.IsRoot)
142+
if (DrawInSearchMode)
143+
return OnArrowUpSearch();
144+
145+
if (SelectedNode == null || SelectedNode.IsRoot)
98146
return false;
99147

100148
if (SelectedNode.ParentNode.IsRoot)
@@ -126,6 +174,20 @@ private bool OnArrowUp()
126174
return true;
127175
}
128176

177+
private bool OnArrowUpSearch()
178+
{
179+
if (_searchModeTree.Count == 0)
180+
return false;
181+
182+
int indexOfSelected = _searchModeTree.IndexOf(SelectedNode);
183+
184+
if (indexOfSelected <= 0)
185+
return false;
186+
187+
SelectedNode = _searchModeTree[indexOfSelected - 1];
188+
return true;
189+
}
190+
129191
private bool IsExpandedFolder(SelectionNode previousNode)
130192
{
131193
return previousNode.IsFolder && previousNode.Expanded && previousNode.ChildNodes.Count != 0;

0 commit comments

Comments
 (0)