From d4de5bb52061315d828ae31fb23f6df4fb7b0ae6 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Apr 2016 14:06:54 +0200 Subject: [PATCH] Close menu on non-client clicks. --- src/Perspex.Controls/Menu.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Perspex.Controls/Menu.cs b/src/Perspex.Controls/Menu.cs index 099f4e2345..1d61f8add1 100644 --- a/src/Perspex.Controls/Menu.cs +++ b/src/Perspex.Controls/Menu.cs @@ -7,6 +7,7 @@ using System.Reactive.Disposables; using Perspex.Controls.Primitives; using Perspex.Controls.Templates; using Perspex.Input; +using Perspex.Input.Raw; using Perspex.Interactivity; using Perspex.LogicalTree; using Perspex.Rendering; @@ -112,7 +113,8 @@ namespace Perspex.Controls _subscription = new CompositeDisposable( pointerPress, - Disposable.Create(() => topLevel.Deactivated -= Deactivated)); + Disposable.Create(() => topLevel.Deactivated -= Deactivated), + InputManager.Instance.Process.Subscribe(ListenForNonClientClick)); var inputRoot = e.Root as IInputRoot; @@ -195,6 +197,20 @@ namespace Perspex.Controls Close(); } + /// + /// Listens for non-client clicks and closes the menu when one is detected. + /// + /// The raw event. + private void ListenForNonClientClick(RawInputEventArgs e) + { + var mouse = e as RawMouseEventArgs; + + if (mouse?.Type == RawMouseEventType.NonClientLeftButtonDown) + { + Close(); + } + } + /// /// Called when a submenu is clicked somewhere in the menu. ///