## Summary of the Pull Request This fixes two bugs related to dragging into the bounds of the `TermControl`. Although the fixes are fairly small, I'm batching them up, because I don't want to stack 2 more PRs on top of #10051. * #9109 - This is fixed by only starting an autoscroll if the click&drag actually started within the bounds of the control. * #4603 - Building on the above change, only modify the selection when the drag started in the control. ## References * srsly go read #10051. ## PR Checklist * [x] Closes #9109 * [x] Closes #4603 * [x] I work here * [x] Test added * [n/a] Requires documentation to be updated ## Detailed Description of the Pull Request / Additional comments This is kind of annoying that the auto-scrolling is handled by the TermControl, but it uses a timer that's still a WinUI construct. We only want to start the auto-scrolling behavior when the drag started _inside_ the control. Otherwise, in the tab drag scenario, dragging into the bounds of the TermControl will trick it into thinking it should start a scroll.
68 lines
2.7 KiB
Plaintext
68 lines
2.7 KiB
Plaintext
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
import "ICoreState.idl";
|
|
import "IControlSettings.idl";
|
|
import "ControlCore.idl";
|
|
import "EventArgs.idl";
|
|
import "InteractivityAutomationPeer.idl";
|
|
|
|
|
|
namespace Microsoft.Terminal.Control
|
|
{
|
|
|
|
[default_interface] runtimeclass ControlInteractivity
|
|
{
|
|
ControlInteractivity(IControlSettings settings,
|
|
Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
|
|
|
|
ControlCore Core { get; };
|
|
void UpdateSettings();
|
|
void Initialize();
|
|
void GotFocus();
|
|
void LostFocus();
|
|
|
|
InteractivityAutomationPeer OnCreateAutomationPeer();
|
|
|
|
Boolean CopySelectionToClipboard(Boolean singleLine, Windows.Foundation.IReference<CopyFormat> formats);
|
|
void RequestPasteTextFromClipboard();
|
|
void SetEndSelectionPoint(Microsoft.Terminal.Core.Point point);
|
|
|
|
void PointerPressed(MouseButtonState buttonState,
|
|
UInt32 pointerUpdateKind,
|
|
UInt64 timestamp,
|
|
Microsoft.Terminal.Core.ControlKeyStates modifiers,
|
|
Microsoft.Terminal.Core.Point pixelPosition);
|
|
void TouchPressed(Microsoft.Terminal.Core.Point contactPoint);
|
|
|
|
void PointerMoved(MouseButtonState buttonState,
|
|
UInt32 pointerUpdateKind,
|
|
Microsoft.Terminal.Core.ControlKeyStates modifiers,
|
|
Boolean focused,
|
|
Microsoft.Terminal.Core.Point pixelPosition,
|
|
Boolean pointerPressedInBounds);
|
|
|
|
void TouchMoved(Microsoft.Terminal.Core.Point newTouchPoint,
|
|
Boolean focused);
|
|
|
|
void PointerReleased(MouseButtonState buttonState,
|
|
UInt32 pointerUpdateKind,
|
|
Microsoft.Terminal.Core.ControlKeyStates modifiers,
|
|
Microsoft.Terminal.Core.Point pixelPosition);
|
|
void TouchReleased();
|
|
|
|
Boolean MouseWheel(Microsoft.Terminal.Core.ControlKeyStates modifiers,
|
|
Int32 delta,
|
|
Microsoft.Terminal.Core.Point pixelPosition,
|
|
MouseButtonState state);
|
|
|
|
void UpdateScrollbar(Double newValue);
|
|
|
|
event Windows.Foundation.TypedEventHandler<Object, OpenHyperlinkEventArgs> OpenHyperlink;
|
|
event Windows.Foundation.TypedEventHandler<Object, ScrollPositionChangedArgs> ScrollPositionChanged;
|
|
event Windows.Foundation.TypedEventHandler<Object, PasteFromClipboardEventArgs> PasteFromClipboard;
|
|
|
|
|
|
};
|
|
}
|