From 92169b4362c298bf05ccf3d8635228bca1b6a517 Mon Sep 17 00:00:00 2001 From: Jaime Bernardo Date: Wed, 5 Feb 2025 16:25:01 +0000 Subject: [PATCH] [MouseHighlighter]Fix stray highlights stucking --- .../MouseHighlighter/MouseHighlighter.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp index fd5d3b341334..51dd687fa60a 100644 --- a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp +++ b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp @@ -233,6 +233,12 @@ void Highlighter::ClearDrawingPoint(MouseButton _button) { winrt::Windows::UI::Composition::CompositionSpriteShape circleShape{ nullptr }; + if (nullptr == m_alwaysPointer) + { + // Guard against alwaysPointer not being initialized. + return; + } + // always circleShape = m_alwaysPointer; @@ -265,6 +271,11 @@ LRESULT CALLBACK Highlighter::MouseHookProc(int nCode, WPARAM wParam, LPARAM lPa // Clear AlwaysPointer only when it's enabled and RightPointer is not active instance->ClearDrawingPoint(MouseButton::None); } + if (instance->m_leftButtonPressed) + { + // There might be a stray point from the user unpressing the mouse button on an elevated window, which wasn't caught by us. + instance->StartDrawingPointFading(MouseButton::Left); + } instance->AddDrawingPoint(MouseButton::Left); instance->m_leftButtonPressed = true; // start a timer for the scenario, when the user clicks a pinned window which has no focus. @@ -284,6 +295,11 @@ LRESULT CALLBACK Highlighter::MouseHookProc(int nCode, WPARAM wParam, LPARAM lPa // Clear AlwaysPointer only when it's enabled and LeftPointer is not active instance->ClearDrawingPoint(MouseButton::None); } + if (instance->m_rightButtonPressed) + { + // There might be a stray point from the user unpressing the mouse button on an elevated window, which wasn't caught by us. + instance->StartDrawingPointFading(MouseButton::Right); + } instance->AddDrawingPoint(MouseButton::Right); instance->m_rightButtonPressed = true; // same as for the left button, start a timer for reposition ourselves to topmost position