diff --git a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.cpp index fd5d3b3413..199ee3280e 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 releasing 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 releasing 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