|
@@ -788,6 +788,7 @@ namespace Terminal.Gui {
|
|
{
|
|
{
|
|
CloseMenu (false, false);
|
|
CloseMenu (false, false);
|
|
}
|
|
}
|
|
|
|
+
|
|
internal void CloseMenu (bool reopen = false, bool isSubMenu = false)
|
|
internal void CloseMenu (bool reopen = false, bool isSubMenu = false)
|
|
{
|
|
{
|
|
isMenuClosing = true;
|
|
isMenuClosing = true;
|
|
@@ -809,12 +810,11 @@ namespace Terminal.Gui {
|
|
if (!reopen)
|
|
if (!reopen)
|
|
selected = -1;
|
|
selected = -1;
|
|
LastFocused.SuperView?.SetFocus (LastFocused);
|
|
LastFocused.SuperView?.SetFocus (LastFocused);
|
|
- IsMenuOpen = false;
|
|
|
|
} else {
|
|
} else {
|
|
SuperView.SetFocus (this);
|
|
SuperView.SetFocus (this);
|
|
- IsMenuOpen = false;
|
|
|
|
PositionCursor ();
|
|
PositionCursor ();
|
|
}
|
|
}
|
|
|
|
+ IsMenuOpen = false;
|
|
break;
|
|
break;
|
|
|
|
|
|
case true:
|
|
case true:
|
|
@@ -823,10 +823,10 @@ namespace Terminal.Gui {
|
|
RemoveAllOpensSubMenus ();
|
|
RemoveAllOpensSubMenus ();
|
|
openCurrentMenu.previousSubFocused?.SuperView?.SetFocus (openCurrentMenu.previousSubFocused);
|
|
openCurrentMenu.previousSubFocused?.SuperView?.SetFocus (openCurrentMenu.previousSubFocused);
|
|
openSubMenu = null;
|
|
openSubMenu = null;
|
|
|
|
+ IsMenuOpen = true;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
isMenuClosing = false;
|
|
isMenuClosing = false;
|
|
- IsMenuOpen = false;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void RemoveSubMenu (int index)
|
|
void RemoveSubMenu (int index)
|
|
@@ -1087,31 +1087,26 @@ namespace Terminal.Gui {
|
|
}
|
|
}
|
|
handled = false;
|
|
handled = false;
|
|
|
|
|
|
- if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1Clicked || me.Flags == MouseFlags.Button1DoubleClicked ||
|
|
|
|
|
|
+ if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1Clicked ||
|
|
(me.Flags == MouseFlags.ReportMousePosition && selected > -1) ||
|
|
(me.Flags == MouseFlags.ReportMousePosition && selected > -1) ||
|
|
(me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && selected > -1)) {
|
|
(me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition) && selected > -1)) {
|
|
int pos = 1;
|
|
int pos = 1;
|
|
int cx = me.X;
|
|
int cx = me.X;
|
|
for (int i = 0; i < Menus.Length; i++) {
|
|
for (int i = 0; i < Menus.Length; i++) {
|
|
if (cx > pos && me.X < pos + 1 + Menus [i].TitleLength) {
|
|
if (cx > pos && me.X < pos + 1 + Menus [i].TitleLength) {
|
|
- if (selected == i && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) &&
|
|
|
|
- IsMenuOpen) {
|
|
|
|
- Application.UngrabMouse ();
|
|
|
|
|
|
+ if (me.Flags == MouseFlags.Button1Clicked) {
|
|
if (Menus [i].IsTopLevel) {
|
|
if (Menus [i].IsTopLevel) {
|
|
var menu = new Menu (this, i, 0, Menus [i]);
|
|
var menu = new Menu (this, i, 0, Menus [i]);
|
|
menu.Run (Menus [i].Action);
|
|
menu.Run (Menus [i].Action);
|
|
- } else {
|
|
|
|
- CloseMenu ();
|
|
|
|
}
|
|
}
|
|
- } else if ((me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) &&
|
|
|
|
- !IsMenuOpen) {
|
|
|
|
- if (Menus [i].IsTopLevel) {
|
|
|
|
- var menu = new Menu (this, i, 0, Menus [i]);
|
|
|
|
- menu.Run (Menus [i].Action);
|
|
|
|
|
|
+ } else if (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) {
|
|
|
|
+ if (IsMenuOpen) {
|
|
|
|
+ CloseAllMenus ();
|
|
} else {
|
|
} else {
|
|
Activate (i);
|
|
Activate (i);
|
|
}
|
|
}
|
|
- } else if (selected != i && selected > -1 && me.Flags == MouseFlags.ReportMousePosition) {
|
|
|
|
|
|
+ } else if (selected != i && selected > -1 && (me.Flags == MouseFlags.ReportMousePosition ||
|
|
|
|
+ me.Flags == MouseFlags.Button1Pressed && me.Flags == MouseFlags.ReportMousePosition)) {
|
|
if (IsMenuOpen) {
|
|
if (IsMenuOpen) {
|
|
CloseMenu ();
|
|
CloseMenu ();
|
|
Activate (i);
|
|
Activate (i);
|
|
@@ -1140,7 +1135,7 @@ namespace Terminal.Gui {
|
|
me.View.MouseEvent (me);
|
|
me.View.MouseEvent (me);
|
|
}
|
|
}
|
|
} else if (!(me.View is MenuBar || me.View is Menu) && (me.Flags.HasFlag (MouseFlags.Button1Clicked) ||
|
|
} else if (!(me.View is MenuBar || me.View is Menu) && (me.Flags.HasFlag (MouseFlags.Button1Clicked) ||
|
|
- me.Flags == MouseFlags.Button1DoubleClicked || me.Flags == MouseFlags.Button1Pressed)) {
|
|
|
|
|
|
+ me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked)) {
|
|
Application.UngrabMouse ();
|
|
Application.UngrabMouse ();
|
|
CloseAllMenus ();
|
|
CloseAllMenus ();
|
|
handled = false;
|
|
handled = false;
|
|
@@ -1149,24 +1144,25 @@ namespace Terminal.Gui {
|
|
handled = false;
|
|
handled = false;
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
- } else if (!IsMenuOpen && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked ||
|
|
|
|
- me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))) {
|
|
|
|
|
|
+ } else if (!IsMenuOpen && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked || me.Flags.HasFlag (MouseFlags.Button1Pressed | MouseFlags.ReportMousePosition))) {
|
|
Application.GrabMouse (current);
|
|
Application.GrabMouse (current);
|
|
- } else {
|
|
|
|
|
|
+ } else if (IsMenuOpen && (me.View is MenuBar || me.View is Menu)) {
|
|
|
|
+ Application.GrabMouse (me.View);
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
handled = false;
|
|
handled = false;
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
- //if (me.View != this && (me.Flags != MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked))
|
|
|
|
|
|
+ //if (me.View != this && me.Flags != MouseFlags.Button1Pressed)
|
|
// return true;
|
|
// return true;
|
|
- //else if (me.View != this && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked)) {
|
|
|
|
|
|
+ //else if (me.View != this && me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) {
|
|
// Application.UngrabMouse ();
|
|
// Application.UngrabMouse ();
|
|
// host.CloseAllMenus ();
|
|
// host.CloseAllMenus ();
|
|
// return true;
|
|
// return true;
|
|
//}
|
|
//}
|
|
|
|
|
|
|
|
|
|
- //if (!(me.View is MenuBar) && !(me.View is Menu) && (me.Flags != MouseFlags.Button1Pressed ||
|
|
|
|
- // me.Flags != MouseFlags.Button1DoubleClicked))
|
|
|
|
|
|
+ //if (!(me.View is MenuBar) && !(me.View is Menu) && me.Flags != MouseFlags.Button1Pressed))
|
|
// return false;
|
|
// return false;
|
|
|
|
|
|
//if (Application.mouseGrabView != null) {
|
|
//if (Application.mouseGrabView != null) {
|
|
@@ -1175,12 +1171,11 @@ namespace Terminal.Gui {
|
|
// me.Y -= me.OfY;
|
|
// me.Y -= me.OfY;
|
|
// me.View.MouseEvent (me);
|
|
// me.View.MouseEvent (me);
|
|
// return true;
|
|
// return true;
|
|
- // } else if (!(me.View is MenuBar || me.View is Menu) && (me.Flags == MouseFlags.Button1Pressed ||
|
|
|
|
- // me.Flags == MouseFlags.Button1DoubleClicked)) {
|
|
|
|
|
|
+ // } else if (!(me.View is MenuBar || me.View is Menu) && me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) {
|
|
// Application.UngrabMouse ();
|
|
// Application.UngrabMouse ();
|
|
// CloseAllMenus ();
|
|
// CloseAllMenus ();
|
|
// }
|
|
// }
|
|
- //} else if (!isMenuClosed && selected == -1 && (me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked)) {
|
|
|
|
|
|
+ //} else if (!isMenuClosed && selected == -1 && me.Flags == MouseFlags.Button1Pressed || me.Flags == MouseFlags.Button1DoubleClicked) {
|
|
// Application.GrabMouse (this);
|
|
// Application.GrabMouse (this);
|
|
// return true;
|
|
// return true;
|
|
//}
|
|
//}
|