|
@@ -671,7 +671,7 @@ namespace Terminal.Gui.Core {
|
|
|
}
|
|
|
|
|
|
[Fact, AutoInitShutdown]
|
|
|
- public void Mouse_Drag ()
|
|
|
+ public void Mouse_Drag_On_Top_With_Superview_Null ()
|
|
|
{
|
|
|
var menu = new MenuBar (new MenuBarItem [] {
|
|
|
new MenuBarItem("File", new MenuItem [] {
|
|
@@ -825,5 +825,147 @@ namespace Terminal.Gui.Core {
|
|
|
|
|
|
Application.Run ();
|
|
|
}
|
|
|
+
|
|
|
+ [Fact, AutoInitShutdown]
|
|
|
+ public void Mouse_Drag_On_Top_With_Superview_Not_Null ()
|
|
|
+ {
|
|
|
+ var menu = new MenuBar (new MenuBarItem [] {
|
|
|
+ new MenuBarItem("File", new MenuItem [] {
|
|
|
+ new MenuItem("New", "", null)
|
|
|
+ })
|
|
|
+ });
|
|
|
+
|
|
|
+ var sbar = new StatusBar (new StatusItem [] {
|
|
|
+ new StatusItem(Key.N, "~CTRL-N~ New", null)
|
|
|
+ });
|
|
|
+
|
|
|
+ var win = new Window ("Window") {
|
|
|
+ X = 3,
|
|
|
+ Y = 2,
|
|
|
+ Width = Dim.Fill (10),
|
|
|
+ Height = Dim.Fill (5)
|
|
|
+ };
|
|
|
+ var top = Application.Top;
|
|
|
+ top.Add (menu, sbar, win);
|
|
|
+
|
|
|
+ var iterations = -1;
|
|
|
+
|
|
|
+ Application.Iteration = () => {
|
|
|
+ iterations++;
|
|
|
+ if (iterations == 0) {
|
|
|
+ ((FakeDriver)Application.Driver).SetBufferSize (20, 10);
|
|
|
+
|
|
|
+ Assert.Null (Application.MouseGrabView);
|
|
|
+ // Grab the mouse
|
|
|
+ ReflectionTools.InvokePrivate (
|
|
|
+ typeof (Application),
|
|
|
+ "ProcessMouseEvent",
|
|
|
+ new MouseEvent () {
|
|
|
+ X = 4,
|
|
|
+ Y = 2,
|
|
|
+ Flags = MouseFlags.Button1Pressed
|
|
|
+ });
|
|
|
+
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+ Assert.Equal (new Rect (3, 2, 7, 3), Application.MouseGrabView.Frame);
|
|
|
+
|
|
|
+ TestHelpers.AssertDriverContentsWithFrameAre (@"
|
|
|
+ File
|
|
|
+
|
|
|
+ ┌─────┐
|
|
|
+ │ │
|
|
|
+ └─────┘
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ CTRL-N New", output);
|
|
|
+
|
|
|
+
|
|
|
+ } else if (iterations == 1) {
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+ // Grab to left
|
|
|
+ ReflectionTools.InvokePrivate (
|
|
|
+ typeof (Application),
|
|
|
+ "ProcessMouseEvent",
|
|
|
+ new MouseEvent () {
|
|
|
+ X = 5,
|
|
|
+ Y = 2,
|
|
|
+ Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
|
|
|
+ });
|
|
|
+
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+
|
|
|
+ } else if (iterations == 2) {
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+
|
|
|
+ TestHelpers.AssertDriverContentsWithFrameAre (@"
|
|
|
+ File
|
|
|
+
|
|
|
+ ┌────┐
|
|
|
+ │ │
|
|
|
+ └────┘
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ CTRL-N New", output);
|
|
|
+
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+ Assert.Equal (new Rect (4, 2, 6, 3), Application.MouseGrabView.Frame);
|
|
|
+
|
|
|
+ } else if (iterations == 3) {
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+ // Grab to top
|
|
|
+ ReflectionTools.InvokePrivate (
|
|
|
+ typeof (Application),
|
|
|
+ "ProcessMouseEvent",
|
|
|
+ new MouseEvent () {
|
|
|
+ X = 5,
|
|
|
+ Y = 1,
|
|
|
+ Flags = MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition
|
|
|
+ });
|
|
|
+
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+
|
|
|
+ } else if (iterations == 4) {
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+
|
|
|
+ TestHelpers.AssertDriverContentsWithFrameAre (@"
|
|
|
+ File
|
|
|
+ ┌────┐
|
|
|
+ │ │
|
|
|
+ │ │
|
|
|
+ └────┘
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ CTRL-N New", output);
|
|
|
+
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+ Assert.Equal (new Rect (4, 1, 6, 4), Application.MouseGrabView.Frame);
|
|
|
+
|
|
|
+ } else if (iterations == 5) {
|
|
|
+ Assert.Equal (win, Application.MouseGrabView);
|
|
|
+ // Ungrab the mouse
|
|
|
+ ReflectionTools.InvokePrivate (
|
|
|
+ typeof (Application),
|
|
|
+ "ProcessMouseEvent",
|
|
|
+ new MouseEvent () {
|
|
|
+ X = 7,
|
|
|
+ Y = 4,
|
|
|
+ Flags = MouseFlags.Button1Released
|
|
|
+ });
|
|
|
+
|
|
|
+ Assert.Null (Application.MouseGrabView);
|
|
|
+
|
|
|
+ } else if (iterations == 8) {
|
|
|
+ Application.RequestStop ();
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
}
|
|
|
}
|