diff --git a/Terminal.Gui/Views/TabView.cs b/Terminal.Gui/Views/TabView.cs
index 1bac1da3c..8d60a3b0d 100644
--- a/Terminal.Gui/Views/TabView.cs
+++ b/Terminal.Gui/Views/TabView.cs
@@ -679,7 +679,7 @@ namespace Terminal.Gui {
me.Flags.HasFlag (MouseFlags.Button2Clicked) ||
me.Flags.HasFlag (MouseFlags.Button3Clicked);
- if (hit != null && isClick) {
+ if (isClick) {
host.OnTabClicked (new TabMouseEventArgs (hit, me));
// user canceled click
@@ -777,9 +777,11 @@ namespace Terminal.Gui {
public class TabMouseEventArgs : EventArgs {
///
- /// Gets the that the mouse was over when the
- /// occurred.
+ /// Gets the (if any) that the mouse
+ /// was over when the occurred.
///
+ /// This will be null if the click is after last tab
+ /// or before first.
public Tab Tab { get; }
///
diff --git a/UICatalog/Scenarios/Notepad.cs b/UICatalog/Scenarios/Notepad.cs
index 5e2fde4d8..0bb238d78 100644
--- a/UICatalog/Scenarios/Notepad.cs
+++ b/UICatalog/Scenarios/Notepad.cs
@@ -67,12 +67,27 @@ namespace UICatalog.Scenarios {
private void TabView_TabClicked (object sender, TabView.TabMouseEventArgs e)
{
- var contextMenu = new ContextMenu (e.MouseEvent.X + 1, e.MouseEvent.Y + 1,
- new MenuBarItem (new MenuItem [] {
+ // we are only interested in right clicks
+ if(!e.MouseEvent.Flags.HasFlag(MouseFlags.Button3Clicked)) {
+ return;
+ }
+
+ MenuBarItem items;
+
+ if (e.Tab == null) {
+ items = new MenuBarItem (new MenuItem [] {
+ new MenuItem ($"Open", "", () => Open()),
+ });
+
+ } else {
+ items = new MenuBarItem (new MenuItem [] {
new MenuItem ($"Save", "", () => Save(e.Tab)),
new MenuItem ($"Close", "", () => Close(e.Tab)),
- })
- );
+ });
+ }
+
+
+ var contextMenu = new ContextMenu (e.MouseEvent.X + 1, e.MouseEvent.Y + 1, items);
contextMenu.Show ();
e.MouseEvent.Handled = true;
@@ -175,11 +190,11 @@ namespace UICatalog.Scenarios {
};
}
- public void Save()
+ public void Save ()
{
Save (tabView.SelectedTab);
}
- public void Save (TabView.Tab tabToSave )
+ public void Save (TabView.Tab tabToSave)
{
var tab = tabToSave as OpenedFile;
diff --git a/UnitTests/Views/TabViewTests.cs b/UnitTests/Views/TabViewTests.cs
index a177d251c..5177b638e 100644
--- a/UnitTests/Views/TabViewTests.cs
+++ b/UnitTests/Views/TabViewTests.cs
@@ -839,6 +839,17 @@ namespace Terminal.Gui.ViewTests {
Assert.Equal(tab1, clicked);
Assert.Equal(tab2, tv.SelectedTab);
+
+ tabRow.MouseEvent (new MouseEvent {
+ X = 10,
+ Y = 1,
+ Flags = MouseFlags.Button1Clicked
+ });
+
+ // Clicking beyond last tab should raise event with null Tab
+ Assert.Null (clicked);
+ Assert.Equal (tab2, tv.SelectedTab);
+
}
private void InitFakeDriver ()