diff --git a/CefSharp.Wpf/ChromiumWebBrowser.cs b/CefSharp.Wpf/ChromiumWebBrowser.cs index b6ff8c8814..0db4c5c7ff 100644 --- a/CefSharp.Wpf/ChromiumWebBrowser.cs +++ b/CefSharp.Wpf/ChromiumWebBrowser.cs @@ -469,8 +469,8 @@ protected virtual void Dispose(bool isDisposing) if(popup != null) { - popup.MouseEnter -= PopupMouseEnter; - popup.MouseLeave -= PopupMouseLeave; + popup.Opened -= PopupOpened; + popup.Closed -= PopupClosed; popup = null; } @@ -1633,8 +1633,8 @@ private Popup CreatePopup() Placement = PlacementMode.Absolute, }; - newPopup.MouseEnter += PopupMouseEnter; - newPopup.MouseLeave += PopupMouseLeave; + newPopup.Opened += PopupOpened; + newPopup.Closed += PopupClosed; return newPopup; } @@ -1898,24 +1898,26 @@ protected override void OnMouseWheel(MouseWheelEventArgs e) } /// - /// Handle the mouse cursor entering the pop-up. + /// Captures the mouse when the popup is opened. /// /// The sender. - /// The instance containing the event data. - private void PopupMouseEnter(object sender, MouseEventArgs e) + /// The instance containing the event data. + private void PopupOpened(object sender, EventArgs e) { - Focus(); - Mouse.Capture(this, CaptureMode.Element); + Mouse.Capture(this); } /// - /// Handle the mouse cursor exiting the pop-up. + /// Releases mouse capture when the popup is closed. /// /// The sender. - /// The instance containing the event data. - private void PopupMouseLeave(object sender, MouseEventArgs e) + /// The instance containing the event data. + private void PopupClosed(object sender, EventArgs e) { - Mouse.Capture(this, CaptureMode.None); + if (Mouse.Captured == this) + { + Mouse.Capture(null); + } } /// @@ -1928,7 +1930,6 @@ protected override void OnMouseDown(MouseButtonEventArgs e) { Focus(); OnMouseButton(e); - Mouse.Capture(this); } /// @@ -1938,7 +1939,6 @@ protected override void OnMouseDown(MouseButtonEventArgs e) protected override void OnMouseUp(MouseButtonEventArgs e) { OnMouseButton(e); - Mouse.Capture(null); } ///