diff --git a/Terminal.Gui/Views/Menu/MenuBar.cs b/Terminal.Gui/Views/Menu/MenuBar.cs index 8a89efdfd..0a75e2b32 100644 --- a/Terminal.Gui/Views/Menu/MenuBar.cs +++ b/Terminal.Gui/Views/Menu/MenuBar.cs @@ -556,7 +556,7 @@ public class MenuBar : View mi = parent.Children?.Length > 0 ? parent.Children [_openMenu._currentChild] : null; } - MenuOpened?.Invoke (this, new MenuOpenedEventArgs (parent, mi)); + MenuOpened?.Invoke (this, new (parent, mi)); } /// Virtual method that will invoke the event if it's defined. @@ -829,10 +829,10 @@ public class MenuBar : View View sv = SuperView is null ? Application.Current : SuperView; Point boundsOffset = sv.GetBoundsOffset (); - return new Point ( - superViewFrame.X - sv.Frame.X - boundsOffset.X, - superViewFrame.Y - sv.Frame.Y - boundsOffset.Y - ); + return new ( + superViewFrame.X - sv.Frame.X - boundsOffset.X, + superViewFrame.Y - sv.Frame.Y - boundsOffset.Y + ); } /// @@ -846,7 +846,7 @@ public class MenuBar : View Rectangle currentFrame = Application.Current.Frame; Point boundsOffset = Application.Top.GetBoundsOffset (); - return new Point (screen.X - currentFrame.X - boundsOffset.X, screen.Y - currentFrame.Y - boundsOffset.Y); + return new (screen.X - currentFrame.X - boundsOffset.X, screen.Y - currentFrame.Y - boundsOffset.Y); } internal void NextMenu (bool isSubMenu = false, bool ignoreUseSubMenusSingleFrame = false) @@ -995,7 +995,7 @@ public class MenuBar : View locationOffset.Y += SuperView.Border.Thickness.Top; } - _openMenu = new Menu + _openMenu = new() { Host = this, X = Frame.X + pos + locationOffset.X, @@ -1014,7 +1014,7 @@ public class MenuBar : View // Opens a submenu next to another submenu (openSubMenu) if (_openSubMenu is null) { - _openSubMenu = new List (); + _openSubMenu = new (); } if (sIndex > -1) @@ -1029,7 +1029,7 @@ public class MenuBar : View { locationOffset = GetLocationOffset (); - openCurrentMenu = new Menu + openCurrentMenu = new() { Host = this, X = last.Frame.Left + last.Frame.Width + locationOffset.X, @@ -1044,7 +1044,7 @@ public class MenuBar : View // 2 is for the parent and the separator MenuItem [] mbi = new MenuItem [2 + subMenu.Children.Length]; - mbi [0] = new MenuItem { Title = subMenu.Title, Parent = subMenu }; + mbi [0] = new() { Title = subMenu.Title, Parent = subMenu }; mbi [1] = null; for (var j = 0; j < subMenu.Children.Length; j++) @@ -1054,7 +1054,7 @@ public class MenuBar : View var newSubMenu = new MenuBarItem (mbi) { Parent = subMenu }; - openCurrentMenu = new Menu + openCurrentMenu = new() { Host = this, X = first.Frame.Left, Y = first.Frame.Top, BarItems = newSubMenu }; @@ -1279,10 +1279,10 @@ public class MenuBar : View { if (MenusBorderStyle != LineStyle.None) { - return new Point (0, 1); + return new (0, 1); } - return new Point (-2, 0); + return new (-2, 0); } private void MenuBar_Added (object sender, SuperViewChangedEventArgs e) @@ -1460,7 +1460,7 @@ public class MenuBar : View { if (_shortcutDelimiter != value) { - _shortcutDelimiter = value == default (Rune) ? new Rune ('+') : value; + _shortcutDelimiter = value == default (Rune) ? new ('+') : value; } } } @@ -1533,6 +1533,7 @@ public class MenuBar : View if (FindShortcutInChildMenu (key.KeyCode, Menus [i], out _menuItemToSelect)) { _menuBarItemToActivate = i; + //keyEvent.Scope = KeyBindingScope.HotKey; return base.OnInvokingKeyBindings (key); @@ -1576,6 +1577,7 @@ public class MenuBar : View if (matches) { _menuBarItemToActivate = i; + //keyEvent.Scope = KeyBindingScope.HotKey; break; @@ -1779,35 +1781,34 @@ public class MenuBar : View } } - // TODO: This is dead code. It is not clear what it is trying to do, and it never gets hit. - //if (me.View != current) - //{ - // Application.UngrabMouse (); - // View v = me.View; - // Application.GrabMouse (v); - // MouseEvent nme; + if (me.View != current) + { + Application.UngrabMouse (); + View v = me.View; + Application.GrabMouse (v); + MouseEvent nme; - // if (me.Y > -1) - // { - // Point newxy = v.ScreenToFrame (me.X, me.Y); + if (me.Y > -1) + { + Point frameLoc = v.ScreenToFrame (me.X, me.Y); - // nme = new MouseEvent - // { - // X = newxy.X, - // Y = newxy.Y, - // Flags = me.Flags, - // ScreenX = me.X - newxy.X, - // ScreenY = me.Y - newxy.Y, - // View = v - // }; - // } - // else - // { - // nme = new MouseEvent { X = me.X + current.Frame.X, Y = 0, Flags = me.Flags, View = v }; - // } - // v.OnMouseEvent (nme); - // return false; - //} + nme = new () + { + X = frameLoc.X, + Y = frameLoc.Y, + Flags = me.Flags, + View = v + }; + } + else + { + nme = new () { X = me.X + current.Frame.X, Y = 0, Flags = me.Flags, View = v }; + } + + v.OnMouseEvent (nme); + + return false; + } } else if (!_isContextMenuLoading && !(me.View is MenuBar || me.View is Menu) diff --git a/UnitTests/Views/MenuBarTests.cs b/UnitTests/Views/MenuBarTests.cs index 38f6594cb..17b61f698 100644 --- a/UnitTests/Views/MenuBarTests.cs +++ b/UnitTests/Views/MenuBarTests.cs @@ -2371,7 +2371,8 @@ Edit }; Application.Top.Add (menu); Application.Begin (Application.Top); - + + // Click on Edit Assert.True ( menu.OnMouseEvent ( new MouseEvent { X = 10, Y = 0, Flags = MouseFlags.Button1Pressed, View = menu } @@ -2381,6 +2382,7 @@ Edit Assert.Equal ("_Edit", miCurrent.Parent.Title); Assert.Equal ("_Copy", miCurrent.Title); + // Click on Paste Assert.True ( mCurrent.OnMouseEvent ( new MouseEvent { X = 10, Y = 3, Flags = MouseFlags.ReportMousePosition, View = mCurrent } @@ -2394,14 +2396,16 @@ Edit { if (i == -1) { + // Edit menu is open. Click on the menu at Y = -1, which is outside the menu. Assert.False ( mCurrent.OnMouseEvent ( - new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = menu } - ) + new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = menu } + ) ); } else { + // Edit menu is open. Click on the menu at Y = i. Assert.True ( mCurrent.OnMouseEvent ( new MouseEvent { X = 10, Y = i, Flags = MouseFlags.ReportMousePosition, View = mCurrent }