Make OnTabClicked fire for clicks in empty space and fix Notepad to only show context menu on right click.

This commit is contained in:
tznind
2023-01-21 08:31:17 +00:00
parent 8b8bb2ab60
commit ab398b93cb
3 changed files with 37 additions and 9 deletions

View File

@@ -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 {
/// <summary>
/// Gets the <see cref="TabView.Tab"/> that the mouse was over when the <see cref="MouseEvent"/>
/// occurred.
/// Gets the <see cref="TabView.Tab"/> (if any) that the mouse
/// was over when the <see cref="MouseEvent"/> occurred.
/// </summary>
/// <remarks>This will be null if the click is after last tab
/// or before first.</remarks>
public Tab Tab { get; }
/// <summary>

View File

@@ -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;

View File

@@ -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 ()