Skip to content

Commit e0f81e8

Browse files
committed
Only raise double click in same pos
1 parent 8a62266 commit e0f81e8

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

Terminal.Gui/ConsoleDrivers/V2/MouseButtonState.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ internal class MouseButtonStateEx
1010
private readonly TimeSpan _repeatClickThreshold;
1111
private readonly int _buttonIdx;
1212
private int _consecutiveClicks;
13+
private Point _lastPosition = new Point ();
1314

1415
/// <summary>
1516
/// When the button entered its current state.
@@ -31,10 +32,11 @@ public MouseButtonStateEx (Func<DateTime> now, TimeSpan repeatClickThreshold, in
3132
public void UpdateState (MouseEventArgs e, out int? numClicks)
3233
{
3334
bool isPressedNow = IsPressed (_buttonIdx, e.Flags);
35+
bool isSamePosition = _lastPosition == e.Position;
3436

3537
TimeSpan elapsed = _now () - At;
3638

37-
if (elapsed > _repeatClickThreshold)
39+
if (elapsed > _repeatClickThreshold || !isSamePosition)
3840
{
3941
// Expired
4042
OverwriteState (e);
@@ -70,6 +72,7 @@ private void OverwriteState (MouseEventArgs e)
7072
{
7173
Pressed = IsPressed (_buttonIdx, e.Flags);
7274
At = _now ();
75+
_lastPosition = e.Position;
7376
}
7477

7578
private bool IsPressed (int btn, MouseFlags eFlags)

UnitTests/ConsoleDrivers/V2/MouseInterpreterTests.cs

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,50 +35,47 @@ public static IEnumerable<object []> SequenceTests ()
3535
{
3636
yield return new object []
3737
{
38-
new List<MouseEventArgs> ()
38+
new List<MouseEventArgs>
3939
{
40-
// Mouse was down
41-
new ()
42-
{
43-
Flags = MouseFlags.Button1Pressed
44-
},
45-
46-
// Then it wasn't
40+
new() { Flags = MouseFlags.Button1Pressed },
4741
new()
4842
},
49-
// No extra then click
5043
null,
5144
MouseFlags.Button1Clicked
5245
};
5346

5447
yield return new object []
5548
{
56-
new List<MouseEventArgs> ()
49+
new List<MouseEventArgs>
5750
{
58-
// Mouse was down
59-
new ()
60-
{
61-
Flags = MouseFlags.Button1Pressed
62-
},
63-
64-
// Then it wasn't
51+
new() { Flags = MouseFlags.Button1Pressed },
6552
new(),
66-
67-
// Then it was again
68-
new ()
69-
{
70-
Flags = MouseFlags.Button1Pressed
71-
},
72-
73-
// Then it wasn't
53+
new() { Flags = MouseFlags.Button1Pressed },
7454
new()
7555
},
76-
// No extra then click, then into none/double click
7756
null,
7857
MouseFlags.Button1Clicked,
7958
null,
8059
MouseFlags.Button1DoubleClicked
8160
};
61+
62+
63+
yield return new object []
64+
{
65+
new List<MouseEventArgs>
66+
{
67+
new() { Flags = MouseFlags.Button1Pressed ,Position = new Point (10,11)},
68+
new(){Position = new Point (10,11)},
69+
70+
// Clicking the line below means no double click because it's a different location
71+
new() { Flags = MouseFlags.Button1Pressed,Position = new Point (10,12) },
72+
new(){Position = new Point (10,12)}
73+
},
74+
null,
75+
MouseFlags.Button1Clicked,
76+
null,
77+
MouseFlags.Button1Clicked //release is click because new position
78+
};
8279
}
8380

8481
}

0 commit comments

Comments
 (0)