diff --git a/src/cascadia/TerminalControl/ControlInteractivity.cpp b/src/cascadia/TerminalControl/ControlInteractivity.cpp index a1a71fb3a9..06ce1e17f3 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.cpp +++ b/src/cascadia/TerminalControl/ControlInteractivity.cpp @@ -169,6 +169,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation void ControlInteractivity::GotFocus() { + _focused = true; + if (_uiaEngine.get()) { THROW_IF_FAILED(_uiaEngine->Enable()); @@ -181,6 +183,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation void ControlInteractivity::LostFocus() { + _focused = false; + if (_uiaEngine.get()) { THROW_IF_FAILED(_uiaEngine->Disable()); @@ -248,7 +252,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation PasteFromClipboard.raise(*this, std::move(args)); } - void ControlInteractivity::PointerPressed(Control::MouseButtonState buttonState, + void ControlInteractivity::PointerPressed(const uint32_t /*pointerId*/, + Control::MouseButtonState buttonState, const unsigned int pointerUpdateKind, const uint64_t timestamp, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, @@ -261,6 +266,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation const auto shiftEnabled = modifiers.IsShiftPressed(); const auto ctrlEnabled = modifiers.IsCtrlPressed(); + // Mark that this pointer event actually started within our bounds. + // We'll need this later, for PointerMoved events. + _pointerPressedInBounds = true; + // GH#9396: we prioritize hyper-link over VT mouse events auto hyperlink = _core->GetHyperlink(terminalPosition.to_core_point()); if (WI_IsFlagSet(buttonState, MouseButtonState::IsLeftButtonDown) && @@ -355,24 +364,23 @@ namespace winrt::Microsoft::Terminal::Control::implementation } } - void ControlInteractivity::TouchPressed(const winrt::Windows::Foundation::Point contactPoint) + void ControlInteractivity::TouchPressed(const Core::Point contactPoint) { _touchAnchor = contactPoint; } - bool ControlInteractivity::PointerMoved(Control::MouseButtonState buttonState, + bool ControlInteractivity::PointerMoved(const uint32_t /*pointerId*/, + Control::MouseButtonState buttonState, const unsigned int pointerUpdateKind, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, - const bool focused, - const Core::Point pixelPosition, - const bool pointerPressedInBounds) + const Core::Point pixelPosition) { const auto terminalPosition = _getTerminalPosition(til::point{ pixelPosition }, false); // Returning true from this function indicates that the caller should do no further processing of this movement. bool handledCompletely = false; // Short-circuit isReadOnly check to avoid warning dialog - if (focused && !_core->IsInReadOnlyMode() && _canSendVTMouseInput(modifiers)) + if (_focused && !_core->IsInReadOnlyMode() && _canSendVTMouseInput(modifiers)) { _sendMouseEventHelper(terminalPosition, pointerUpdateKind, modifiers, 0, buttonState); handledCompletely = true; @@ -381,7 +389,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // actually start _in_ the control bounds. Case in point - someone drags // a file into the bounds of the control. That shouldn't send the // selection into space. - else if (focused && pointerPressedInBounds && WI_IsFlagSet(buttonState, MouseButtonState::IsLeftButtonDown)) + else if (_focused && _pointerPressedInBounds && WI_IsFlagSet(buttonState, MouseButtonState::IsLeftButtonDown)) { if (_singleClickTouchdownPos) { @@ -427,10 +435,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation return handledCompletely; } - void ControlInteractivity::TouchMoved(const winrt::Windows::Foundation::Point newTouchPoint, - const bool focused) + void ControlInteractivity::TouchMoved(const Core::Point newTouchPoint) { - if (focused && + if (_focused && _touchAnchor) { const auto anchor = _touchAnchor.value(); @@ -464,11 +471,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation } } - void ControlInteractivity::PointerReleased(Control::MouseButtonState buttonState, + void ControlInteractivity::PointerReleased(const uint32_t /*pointerId*/, + Control::MouseButtonState buttonState, const unsigned int pointerUpdateKind, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, const Core::Point pixelPosition) { + _pointerPressedInBounds = false; + const auto terminalPosition = _getTerminalPosition(til::point{ pixelPosition }, false); // Short-circuit isReadOnly check to avoid warning dialog if (!_core->IsInReadOnlyMode() && _canSendVTMouseInput(modifiers)) diff --git a/src/cascadia/TerminalControl/ControlInteractivity.h b/src/cascadia/TerminalControl/ControlInteractivity.h index b800fbb25a..7f80c2f8e5 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.h +++ b/src/cascadia/TerminalControl/ControlInteractivity.h @@ -51,23 +51,23 @@ namespace winrt::Microsoft::Terminal::Control::implementation ::Microsoft::Console::Render::IRenderData* GetRenderData() const; #pragma region Input Methods - void PointerPressed(Control::MouseButtonState buttonState, + void PointerPressed(const uint32_t pointerId, + Control::MouseButtonState buttonState, const unsigned int pointerUpdateKind, const uint64_t timestamp, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, const Core::Point pixelPosition); - void TouchPressed(const winrt::Windows::Foundation::Point contactPoint); + void TouchPressed(const Core::Point contactPoint); - bool PointerMoved(Control::MouseButtonState buttonState, + bool PointerMoved(const uint32_t pointerId, + Control::MouseButtonState buttonState, const unsigned int pointerUpdateKind, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, - const bool focused, - const Core::Point pixelPosition, - const bool pointerPressedInBounds); - void TouchMoved(const winrt::Windows::Foundation::Point newTouchPoint, - const bool focused); + const Core::Point pixelPosition); + void TouchMoved(const Core::Point newTouchPoint); - void PointerReleased(Control::MouseButtonState buttonState, + void PointerReleased(const uint32_t pointerId, + Control::MouseButtonState buttonState, const unsigned int pointerUpdateKind, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, const Core::Point pixelPosition); @@ -115,7 +115,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // If this is set, then we assume we are in the middle of panning the // viewport via touch input. - std::optional _touchAnchor; + std::optional _touchAnchor; using Timestamp = uint64_t; @@ -142,6 +142,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation uint64_t _id; static std::atomic _nextId; + bool _focused{ false }; + bool _pointerPressedInBounds{ false }; + unsigned int _numberOfClicks(Core::Point clickPos, Timestamp clickTime); void _updateSystemParameterSettings() noexcept; diff --git a/src/cascadia/TerminalControl/ControlInteractivity.idl b/src/cascadia/TerminalControl/ControlInteractivity.idl index 3796fc3845..33d89722f8 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.idl +++ b/src/cascadia/TerminalControl/ControlInteractivity.idl @@ -36,24 +36,24 @@ namespace Microsoft.Terminal.Control void RequestPasteTextFromClipboard(); void SetEndSelectionPoint(Microsoft.Terminal.Core.Point point); - void PointerPressed(MouseButtonState buttonState, + void PointerPressed(UInt32 pointerId, + MouseButtonState buttonState, UInt32 pointerUpdateKind, UInt64 timestamp, Microsoft.Terminal.Core.ControlKeyStates modifiers, Microsoft.Terminal.Core.Point pixelPosition); - void TouchPressed(Windows.Foundation.Point contactPoint); + void TouchPressed(Microsoft.Terminal.Core.Point contactPoint); - Boolean PointerMoved(MouseButtonState buttonState, + Boolean PointerMoved(UInt32 pointerId, + MouseButtonState buttonState, UInt32 pointerUpdateKind, Microsoft.Terminal.Core.ControlKeyStates modifiers, - Boolean focused, - Microsoft.Terminal.Core.Point pixelPosition, - Boolean pointerPressedInBounds); + Microsoft.Terminal.Core.Point pixelPosition); - void TouchMoved(Windows.Foundation.Point newTouchPoint, - Boolean focused); + void TouchMoved(Microsoft.Terminal.Core.Point newTouchPoint); - void PointerReleased(MouseButtonState buttonState, + void PointerReleased(UInt32 pointerId, + MouseButtonState buttonState, UInt32 pointerUpdateKind, Microsoft.Terminal.Core.ControlKeyStates modifiers, Microsoft.Terminal.Core.Point pixelPosition); diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index 9f632d276d..ced2d9e873 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -1990,12 +1990,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation // NB: I don't think this is correct because the touch should be in the center of the rect. // I suspect the point.Position() would be correct. const auto contactRect = point.Properties().ContactRect(); - _interactivity.TouchPressed({ contactRect.X, contactRect.Y }); + til::point newTouchPoint{ til::math::rounding, contactRect.X, contactRect.Y }; + _interactivity.TouchPressed(newTouchPoint.to_core_point()); } else { const auto cursorPosition = point.Position(); - _interactivity.PointerPressed(TermControl::GetPressedMouseButtons(point), + _interactivity.PointerPressed(point.PointerId(), + TermControl::GetPressedMouseButtons(point), TermControl::GetPointerUpdateKind(point), point.Timestamp(), ControlKeyStates{ args.KeyModifiers() }, @@ -2034,12 +2036,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (type == Windows::Devices::Input::PointerDeviceType::Mouse || type == Windows::Devices::Input::PointerDeviceType::Pen) { - auto suppressFurtherHandling = _interactivity.PointerMoved(TermControl::GetPressedMouseButtons(point), + auto suppressFurtherHandling = _interactivity.PointerMoved(point.PointerId(), + TermControl::GetPressedMouseButtons(point), TermControl::GetPointerUpdateKind(point), ControlKeyStates(args.KeyModifiers()), - _focused, - pixelPosition, - _pointerPressedInBounds); + pixelPosition); // GH#9109 - Only start an auto-scroll when the drag actually // started within our bounds. Otherwise, someone could start a drag @@ -2078,7 +2079,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation else if (type == Windows::Devices::Input::PointerDeviceType::Touch) { const auto contactRect = point.Properties().ContactRect(); - _interactivity.TouchMoved({ contactRect.X, contactRect.Y }, _focused); + til::point newTouchPoint{ til::math::rounding, contactRect.X, contactRect.Y }; + + _interactivity.TouchMoved(newTouchPoint.to_core_point()); } args.Handled(true); @@ -2111,7 +2114,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (type == Windows::Devices::Input::PointerDeviceType::Mouse || type == Windows::Devices::Input::PointerDeviceType::Pen) { - _interactivity.PointerReleased(TermControl::GetPressedMouseButtons(point), + _interactivity.PointerReleased(point.PointerId(), + TermControl::GetPressedMouseButtons(point), TermControl::GetPointerUpdateKind(point), ControlKeyStates(args.KeyModifiers()), pixelPosition); diff --git a/src/cascadia/UnitTests_Control/ControlInteractivityTests.cpp b/src/cascadia/UnitTests_Control/ControlInteractivityTests.cpp index 8007ee5fc6..1b538b8505 100644 --- a/src/cascadia/UnitTests_Control/ControlInteractivityTests.cpp +++ b/src/cascadia/UnitTests_Control/ControlInteractivityTests.cpp @@ -313,10 +313,13 @@ namespace ControlUnitTests const til::size fontSize{ 9, 21 }; + interactivity->GotFocus(); + Log::Comment(L"Click on the terminal"); const til::point terminalPosition0{ 0, 0 }; const auto cursorPosition0 = terminalPosition0 * fontSize; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -329,29 +332,28 @@ namespace ControlUnitTests // move not quite a whole cell, but enough to start a selection const til::point terminalPosition1{ 0, 0 }; const til::point cursorPosition1{ 6, 0 }; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); Log::Comment(L"Verify that there's one selection"); VERIFY_IS_TRUE(core->HasSelection()); Log::Comment(L"Drag the mouse down a whole row"); const til::point terminalPosition2{ 1, 1 }; const auto cursorPosition2 = terminalPosition2 * fontSize; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition2.to_core_point(), - true); + cursorPosition2.to_core_point()); Log::Comment(L"Verify that there's now two selections (one on each row)"); VERIFY_IS_TRUE(core->HasSelection()); Log::Comment(L"Release the mouse"); - interactivity->PointerReleased(noMouseDown, + interactivity->PointerReleased(0, + noMouseDown, WM_LBUTTONUP, //pointerUpdateKind modifiers, cursorPosition2.to_core_point()); @@ -361,7 +363,8 @@ namespace ControlUnitTests Log::Comment(L"click outside the current selection"); const til::point terminalPosition3{ 2, 2 }; const auto cursorPosition3 = terminalPosition3 * fontSize; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -372,12 +375,11 @@ namespace ControlUnitTests Log::Comment(L"Drag the mouse"); const til::point terminalPosition4{ 3, 2 }; const auto cursorPosition4 = terminalPosition4 * fontSize; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition4.to_core_point(), - true); + cursorPosition4.to_core_point()); Log::Comment(L"Verify that there's now one selection"); VERIFY_IS_TRUE(core->HasSelection()); } @@ -408,10 +410,17 @@ namespace ControlUnitTests const til::size fontSize{ 9, 21 }; + interactivity->GotFocus(); + // This test is sensitive to the number of rows scrolled per scroll wheel, + // which is reloaded from the system parameters when focus is received. + // Reset it. + interactivity->_rowsToScroll = 1; + Log::Comment(L"Click on the terminal"); const til::point terminalPosition0{ 5, 5 }; const auto cursorPosition0{ terminalPosition0 * fontSize }; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -426,12 +435,11 @@ namespace ControlUnitTests Log::Comment(L"Drag the mouse just a little"); // move not quite a whole cell, but enough to start a selection const auto cursorPosition1{ cursorPosition0 + til::point{ 6, 0 } }; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); Log::Comment(L"Verify that there's one selection"); VERIFY_IS_TRUE(core->HasSelection()); @@ -559,9 +567,12 @@ namespace ControlUnitTests const til::size fontSize{ 9, 21 }; + interactivity->GotFocus(); + Log::Comment(L"Click on the terminal"); const til::point cursorPosition0{ 6, 0 }; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -575,12 +586,11 @@ namespace ControlUnitTests Log::Comment(L"Drag the mouse a lot. This simulates dragging the mouse real fast."); const til::point cursorPosition1{ 6 + fontSize.width * 2, 0 }; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); Log::Comment(L"Verify that there's one selection"); VERIFY_IS_TRUE(core->HasSelection()); @@ -602,10 +612,13 @@ namespace ControlUnitTests const auto leftMouseDown{ Control::MouseButtonState::IsLeftButtonDown }; const Control::MouseButtonState noMouseDown{}; + interactivity->GotFocus(); + const til::size fontSize{ 9, 21 }; Log::Comment(L"Click on the terminal"); const til::point cursorPosition0{ 6, 0 }; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -619,12 +632,11 @@ namespace ControlUnitTests Log::Comment(L"Drag the mouse a lot. This simulates dragging the mouse real fast."); const til::point cursorPosition1{ 6 + fontSize.width * 2, 0 }; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); Log::Comment(L"Verify that there's one selection"); VERIFY_IS_TRUE(core->HasSelection()); @@ -634,7 +646,8 @@ namespace ControlUnitTests til::point expectedEnd{ 3, 0 }; // add 1 to x-coordinate because end is exclusive VERIFY_ARE_EQUAL(expectedEnd, core->_terminal->GetSelectionEnd()); - interactivity->PointerReleased(noMouseDown, + interactivity->PointerReleased(0, + noMouseDown, WM_LBUTTONUP, modifiers, cursorPosition1.to_core_point()); @@ -644,12 +657,11 @@ namespace ControlUnitTests Log::Comment(L"Simulate dragging the mouse into the control, without first clicking into the control"); const til::point cursorPosition2{ fontSize.width * 10, 0 }; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition2.to_core_point(), - false); + cursorPosition2.to_core_point()); Log::Comment(L"The selection should be unchanged."); VERIFY_ARE_EQUAL(expectedAnchor, core->_terminal->GetSelectionAnchor()); @@ -676,6 +688,12 @@ namespace ControlUnitTests auto expectedViewHeight = 20; auto expectedBufferHeight = 20; + interactivity->GotFocus(); + // This test is sensitive to the number of rows scrolled per scroll wheel, + // which is reloaded from the system parameters when focus is received. + // Reset it. + interactivity->_rowsToScroll = 1; + auto scrollChangedHandler = [&](auto&&, const Control::ScrollPositionChangedArgs& args) mutable { VERIFY_ARE_EQUAL(expectedTop, args.ViewTop()); VERIFY_ARE_EQUAL(expectedViewHeight, args.ViewHeight()); @@ -722,7 +740,8 @@ namespace ControlUnitTests Log::Comment(L"Click on the terminal"); const til::point terminalPosition0{ 4, 4 }; const auto cursorPosition0 = terminalPosition0 * fontSize; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -735,12 +754,11 @@ namespace ControlUnitTests // move the mouse as if to make a selection const til::point terminalPosition1{ 10, 4 }; const auto cursorPosition1 = terminalPosition1 * fontSize; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); Log::Comment(L"Verify that there's still no selection"); VERIFY_IS_FALSE(core->HasSelection()); } @@ -770,10 +788,13 @@ namespace ControlUnitTests const til::size fontSize{ 9, 21 }; + interactivity->GotFocus(); + Log::Comment(L"Click on the terminal"); const til::point terminalPosition0{ 5, 5 }; const auto cursorPosition0{ terminalPosition0 * fontSize }; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -788,12 +809,11 @@ namespace ControlUnitTests Log::Comment(L"Drag the mouse just a little"); // move not quite a whole cell, but enough to start a selection const auto cursorPosition1{ cursorPosition0 + til::point{ 6, 0 } }; - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); Log::Comment(L"Verify that there's one selection"); VERIFY_IS_TRUE(core->HasSelection()); @@ -850,12 +870,11 @@ namespace ControlUnitTests // character in the buffer (if, albeit in a new location). // // This helps test GH #14462, a regression from #10749. - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition0.to_core_point(), - true); + cursorPosition0.to_core_point()); VERIFY_IS_TRUE(core->HasSelection()); { const auto anchor{ core->_terminal->GetSelectionAnchor() }; @@ -876,12 +895,11 @@ namespace ControlUnitTests expectedAnchor.y -= 1; expectedEnd.y -= 1; VERIFY_ARE_EQUAL(scrollbackLength - 3, core->_terminal->GetScrollOffset()); - interactivity->PointerMoved(leftMouseDown, + interactivity->PointerMoved(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind modifiers, - true, // focused, - cursorPosition1.to_core_point(), - true); + cursorPosition1.to_core_point()); VERIFY_IS_TRUE(core->HasSelection()); { const auto anchor{ core->_terminal->GetSelectionAnchor() }; @@ -929,7 +947,8 @@ namespace ControlUnitTests const til::size fontSize{ 9, 21 }; const til::point terminalPosition0{ 5, 5 }; const auto cursorPosition0{ terminalPosition0 * fontSize }; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -978,7 +997,8 @@ namespace ControlUnitTests const til::size fontSize{ 9, 21 }; const til::point terminalPosition0{ 5, 5 }; const auto cursorPosition0{ terminalPosition0 * fontSize }; - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -994,7 +1014,8 @@ namespace ControlUnitTests // The viewport is only 30 wide, so clamping 35 to the buffer size gets // us 29, which converted is (32 + 29 + 1) = 62 = '>' expectedOutput.push_back(L"\x1b[M >&"); - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -1009,7 +1030,8 @@ namespace ControlUnitTests // will be clamped to the top line. expectedOutput.push_back(L"\x1b[M &!"); // 5, 1 - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -1025,7 +1047,8 @@ namespace ControlUnitTests VERIFY_ARE_EQUAL(0, core->ScrollOffset()); Log::Comment(L" --- Click on a spot that's still outside the buffer ---"); expectedOutput.push_back(L"\x1b[M >&"); - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers, @@ -1039,7 +1062,8 @@ namespace ControlUnitTests Log::Comment(L" --- Click on a spot that's NOW INSIDE the buffer ---"); // (32 + 35 + 1) = 68 = 'D' expectedOutput.push_back(L"\x1b[M D&"); - interactivity->PointerPressed(leftMouseDown, + interactivity->PointerPressed(0, + leftMouseDown, WM_LBUTTONDOWN, //pointerUpdateKind 0, // timestamp modifiers,