Skip to content

Commit e5d6dd7

Browse files
committed
Fixes gui-cs#3950. KeyDown and MouseEvent no longer fires for Listbox
1 parent 64b216b commit e5d6dd7

File tree

3 files changed

+62
-30
lines changed

3 files changed

+62
-30
lines changed

Terminal.Gui/View/View.Keyboard.cs

+18-16
Original file line numberDiff line numberDiff line change
@@ -319,28 +319,30 @@ public bool NewKeyDownEvent (Key key)
319319

320320
bool RaiseKeyDown (Key k)
321321
{
322-
// Before (fire the cancellable event)
323-
if (OnKeyDown (k) || k.Handled)
322+
// First fire event
323+
KeyDown?.Invoke (this, k);
324+
325+
if (k.Handled)
324326
{
325327
return true;
326328
}
327329

328-
// fire event
329-
KeyDown?.Invoke (this, k);
330-
331-
return k.Handled;
330+
// After (fire the cancellable event)
331+
return OnKeyDown (k);
332332
}
333333

334334
bool RaiseKeyDownNotHandled (Key k)
335335
{
336-
if (OnKeyDownNotHandled (k) || k.Handled)
336+
// First fire event
337+
KeyDownNotHandled?.Invoke (this, k);
338+
339+
if (k.Handled)
337340
{
338341
return true;
339342
}
340343

341-
KeyDownNotHandled?.Invoke (this, k);
342-
343-
return false;
344+
// After (fire the cancellable event)
345+
return OnKeyDownNotHandled (k);
344346
}
345347
}
346348

@@ -453,16 +455,16 @@ public bool NewKeyUpEvent (Key key)
453455

454456
bool RaiseKeyUp (Key k)
455457
{
456-
// Before (fire the cancellable event)
457-
if (OnKeyUp (k) || k.Handled)
458+
// First fire event
459+
KeyUp?.Invoke (this, k);
460+
461+
if (k.Handled)
458462
{
459463
return true;
460464
}
461465

462-
// fire event
463-
KeyUp?.Invoke (this, k);
464-
465-
return k.Handled;
466+
// After (fire the cancellable event)
467+
return OnKeyUp (k);
466468
}
467469
}
468470

Terminal.Gui/View/View.Mouse.cs

+6-4
Original file line numberDiff line numberDiff line change
@@ -335,14 +335,16 @@ protected virtual void OnMouseLeave () { }
335335
/// <returns><see langword="true"/>, if the event was handled, <see langword="false"/> otherwise.</returns>
336336
public bool RaiseMouseEvent (MouseEventArgs mouseEvent)
337337
{
338-
if (OnMouseEvent (mouseEvent) || mouseEvent.Handled)
338+
// First fire event
339+
MouseEvent?.Invoke (this, mouseEvent);
340+
341+
if (mouseEvent.Handled)
339342
{
340343
return true;
341344
}
342345

343-
MouseEvent?.Invoke (this, mouseEvent);
344-
345-
return mouseEvent.Handled;
346+
// After (fire the cancellable event)
347+
return OnMouseEvent (mouseEvent);
346348
}
347349

348350
/// <summary>Called when a mouse event occurs within the view's <see cref="Viewport"/>.</summary>

UnitTests/View/Keyboard/KeyboardEventTests.cs

+38-10
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void NewKeyDownUpEvents_Events_Are_Raised_With_Only_Key_Modifiers (bool s
102102
Assert.Equal (alt, e.IsAlt);
103103
Assert.Equal (control, e.IsCtrl);
104104
Assert.False (keyDown);
105-
Assert.True (view.OnKeyDownCalled);
105+
Assert.False (view.OnKeyDownCalled);
106106
keyDown = true;
107107
};
108108
view.KeyDownNotHandled += (s, e) => { keyDownNotHandled = true; };
@@ -114,7 +114,7 @@ public void NewKeyDownUpEvents_Events_Are_Raised_With_Only_Key_Modifiers (bool s
114114
Assert.Equal (alt, e.IsAlt);
115115
Assert.Equal (control, e.IsCtrl);
116116
Assert.False (keyUp);
117-
Assert.True (view.OnKeyUpCalled);
117+
Assert.False (view.OnKeyUpCalled);
118118
keyUp = true;
119119
};
120120

@@ -147,6 +147,7 @@ public void NewKeyDownEvent_Handled_True_Stops_Processing ()
147147
{
148148
var keyDown = false;
149149
var keyDownNotHandled = false;
150+
var keyHandled = false;
150151

151152
var view = new OnNewKeyTestView ();
152153
Assert.True (view.CanFocus);
@@ -156,8 +157,8 @@ public void NewKeyDownEvent_Handled_True_Stops_Processing ()
156157
{
157158
Assert.Equal (KeyCode.A, e.KeyCode);
158159
Assert.False (keyDown);
159-
Assert.True (view.OnKeyDownCalled);
160-
e.Handled = true;
160+
Assert.False (view.OnKeyDownCalled);
161+
e.Handled = keyHandled;
161162
keyDown = true;
162163
};
163164

@@ -167,15 +168,29 @@ public void NewKeyDownEvent_Handled_True_Stops_Processing ()
167168
Assert.Equal (KeyCode.A, e.KeyCode);
168169
Assert.False (keyDownNotHandled);
169170
Assert.False (view.OnProcessKeyDownCalled);
170-
e.Handled = true;
171+
e.Handled = keyHandled;
171172
keyDownNotHandled = true;
172173
};
173174

174175
view.NewKeyDownEvent (Key.A);
175176
Assert.True (keyDown);
176-
Assert.False (keyDownNotHandled);
177+
Assert.True (keyDownNotHandled);
177178

178179
Assert.True (view.OnKeyDownCalled);
180+
Assert.True (view.OnProcessKeyDownCalled);
181+
182+
keyDown = false;
183+
keyDownNotHandled = false;
184+
keyHandled = true;
185+
view.CancelVirtualMethods = true;
186+
view.OnKeyDownCalled = false;
187+
view.OnProcessKeyDownCalled = false;
188+
189+
view.NewKeyDownEvent (Key.A);
190+
Assert.True (keyDown);
191+
Assert.False (keyDownNotHandled);
192+
193+
Assert.False (view.OnKeyDownCalled);
179194
Assert.False (view.OnProcessKeyDownCalled);
180195
}
181196

@@ -223,7 +238,7 @@ public void NewKeyDownEvent_ProcessKeyDown_Handled_Stops_Processing ()
223238
{
224239
Assert.Equal (KeyCode.A, e.KeyCode);
225240
Assert.False (keyDown);
226-
Assert.True (view.OnKeyDownCalled);
241+
Assert.False (view.OnKeyDownCalled);
227242
e.Handled = false;
228243
keyDown = true;
229244
};
@@ -232,7 +247,7 @@ public void NewKeyDownEvent_ProcessKeyDown_Handled_Stops_Processing ()
232247
{
233248
Assert.Equal (KeyCode.A, e.KeyCode);
234249
Assert.False (keyDownNotHandled);
235-
Assert.True (view.OnProcessKeyDownCalled);
250+
Assert.False (view.OnProcessKeyDownCalled);
236251
e.Handled = true;
237252
keyDownNotHandled = true;
238253
};
@@ -242,13 +257,14 @@ public void NewKeyDownEvent_ProcessKeyDown_Handled_Stops_Processing ()
242257
Assert.True (keyDownNotHandled);
243258

244259
Assert.True (view.OnKeyDownCalled);
245-
Assert.True (view.OnProcessKeyDownCalled);
260+
Assert.False (view.OnProcessKeyDownCalled);
246261
}
247262

248263
[Fact]
249264
public void NewKeyUpEvent_KeyUp_Handled_True_Stops_Processing ()
250265
{
251266
var keyUp = false;
267+
var keyHandled = false;
252268

253269
var view = new OnNewKeyTestView ();
254270
Assert.True (view.CanFocus);
@@ -259,7 +275,7 @@ public void NewKeyUpEvent_KeyUp_Handled_True_Stops_Processing ()
259275
Assert.Equal (KeyCode.A, e.KeyCode);
260276
Assert.False (keyUp);
261277
Assert.False (view.OnProcessKeyDownCalled);
262-
e.Handled = true;
278+
e.Handled = keyHandled;
263279
keyUp = true;
264280
};
265281

@@ -269,6 +285,18 @@ public void NewKeyUpEvent_KeyUp_Handled_True_Stops_Processing ()
269285
Assert.True (view.OnKeyUpCalled);
270286
Assert.False (view.OnKeyDownCalled);
271287
Assert.False (view.OnProcessKeyDownCalled);
288+
289+
keyUp = false;
290+
keyHandled = true;
291+
view.CancelVirtualMethods = true;
292+
view.OnKeyUpCalled = false;
293+
294+
view.NewKeyUpEvent (Key.A);
295+
Assert.True (keyUp);
296+
297+
Assert.False (view.OnKeyUpCalled);
298+
Assert.False (view.OnKeyDownCalled);
299+
Assert.False (view.OnProcessKeyDownCalled);
272300
}
273301

274302
[Theory]

0 commit comments

Comments
 (0)