diff --git a/Terminal.Gui/View/View.Drawing.cs b/Terminal.Gui/View/View.Drawing.cs index c2a97e10a..5fcf84acb 100644 --- a/Terminal.Gui/View/View.Drawing.cs +++ b/Terminal.Gui/View/View.Drawing.cs @@ -396,7 +396,7 @@ public partial class View // Drawing APIs } Attribute disabled = new (cs.Disabled.Foreground, cs.Disabled.Background); - if (Diagnostics.HasFlag (ViewDiagnosticFlags.Hover) && _Hover) + if (Diagnostics.HasFlag (ViewDiagnosticFlags.Hover) && _hovering) { disabled = new (disabled.Foreground.GetDarkerColor (), disabled.Background.GetDarkerColor ()); } @@ -406,7 +406,7 @@ public partial class View // Drawing APIs private Attribute GetColor (Attribute inputAttribute) { Attribute attr = inputAttribute; - if (Diagnostics.HasFlag (ViewDiagnosticFlags.Hover) && _Hover) + if (Diagnostics.HasFlag (ViewDiagnosticFlags.Hover) && _hovering) { attr = new (attr.Foreground.GetDarkerColor (), attr.Background.GetDarkerColor ()); } diff --git a/Terminal.Gui/View/View.Mouse.cs b/Terminal.Gui/View/View.Mouse.cs index c1abd2edf..841996cb9 100644 --- a/Terminal.Gui/View/View.Mouse.cs +++ b/Terminal.Gui/View/View.Mouse.cs @@ -126,7 +126,8 @@ public partial class View // Mouse APIs #region MouseEnterLeave - private bool _Hover; + private bool _hovering; + private ColorScheme? _savedNonHoverColorScheme; /// /// INTERNAL Called by when the mouse moves over the View's . @@ -154,7 +155,7 @@ public partial class View // Mouse APIs MouseEnter?.Invoke (this, eventArgs); - _Hover = !eventArgs.Cancel; + _hovering = !eventArgs.Cancel; if (eventArgs.Cancel) { @@ -166,9 +167,8 @@ public partial class View // Mouse APIs HighlightStyle copy = HighlightStyle; HighlightStyle hover = HighlightStyle.Hover; CancelEventArgs args = new (ref copy, ref hover); - RaiseHighlight (args); - - if (args.Cancel) + + if (RaiseHighlight (args) || args.Cancel) { return args.Cancel; } @@ -180,7 +180,7 @@ public partial class View // Mouse APIs cs = new (); } - _savedNonHighlightColorScheme = cs; + _savedNonHoverColorScheme = cs; ColorScheme = ColorScheme.GetHighlightColorScheme (); } @@ -260,7 +260,7 @@ public partial class View // Mouse APIs MouseLeave?.Invoke (this, EventArgs.Empty); - _Hover = false; + _hovering = false; if ((HighlightStyle.HasFlag (HighlightStyle.Hover) || Diagnostics.HasFlag (ViewDiagnosticFlags.Hover))) { @@ -268,8 +268,11 @@ public partial class View // Mouse APIs HighlightStyle hover = HighlightStyle.None; RaiseHighlight (new (ref copy, ref hover)); - ColorScheme = _savedNonHighlightColorScheme; - _savedNonHighlightColorScheme = default; + if (_savedNonHoverColorScheme is { }) + { + ColorScheme = _savedNonHoverColorScheme; + _savedNonHoverColorScheme = null; + } } } @@ -447,9 +450,6 @@ public partial class View // Mouse APIs /// public event EventHandler>? Highlight; - private ColorScheme _savedNonHighlightColorScheme; - - /// /// Enables the highlight for the view when the mouse is pressed. Called from OnMouseEvent. diff --git a/Terminal.Gui/Views/Button.cs b/Terminal.Gui/Views/Button.cs index a714cc5eb..742c34151 100644 --- a/Terminal.Gui/Views/Button.cs +++ b/Terminal.Gui/Views/Button.cs @@ -77,7 +77,7 @@ public class Button : View, IDesignable ShadowStyle = DefaultShadow; HighlightStyle = DefaultHighlightStyle; } - + private bool _wantContinuousButtonPressed; /// @@ -169,7 +169,7 @@ public class Button : View, IDesignable /// protected override void UpdateTextFormatterText () { - base.UpdateTextFormatterText(); + base.UpdateTextFormatterText (); if (NoDecorations) { TextFormatter.Text = Text; diff --git a/UnitTests/Views/MenuBarTests.cs b/UnitTests/Views/MenuBarTests.cs index 39d85fde3..577451025 100644 --- a/UnitTests/Views/MenuBarTests.cs +++ b/UnitTests/Views/MenuBarTests.cs @@ -662,6 +662,12 @@ public class MenuBarTests (ITestOutputHelper output) { ((FakeDriver)Application.Driver).SetBufferSize (40, 15); + // Override CM + Window.DefaultBorderStyle = LineStyle.Single; + Dialog.DefaultButtonAlignment = Alignment.Center; + Dialog.DefaultBorderStyle = LineStyle.Single; + Button.DefaultShadow = ShadowStyle.None; + Assert.Equal (new (0, 0, 40, 15), Application.Driver?.Clip); TestHelpers.AssertDriverContentsWithFrameAre (@"", output);