diff --git a/src/cascadia/TerminalApp/TerminalTab.cpp b/src/cascadia/TerminalApp/TerminalTab.cpp index 274a9c02519..5043b90c84e 100644 --- a/src/cascadia/TerminalApp/TerminalTab.cpp +++ b/src/cascadia/TerminalApp/TerminalTab.cpp @@ -609,6 +609,19 @@ namespace winrt::TerminalApp::implementation tab->_RecalculateAndApplyReadOnly(); } }); + + control.FocusFollowMouseRequested([weakThis](auto&& sender, auto&&) { + if (const auto tab{ weakThis.get() }) + { + if (tab->_focusState != FocusState::Unfocused) + { + if (const auto termControl{ sender.try_as() }) + { + termControl.Focus(FocusState::Pointer); + } + } + } + }); } // Method Description: diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index 69a53c2e976..0fd5273ce1b 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -1376,7 +1376,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation if (!_focused && _settings.FocusFollowMouse()) { - Focus(FocusState::Pointer); + _FocusFollowMouseRequestedHandlers(*this, nullptr); } if (ptr.PointerDeviceType() == Windows::Devices::Input::PointerDeviceType::Mouse || ptr.PointerDeviceType() == Windows::Devices::Input::PointerDeviceType::Pen) diff --git a/src/cascadia/TerminalControl/TermControl.h b/src/cascadia/TerminalControl/TermControl.h index b1005c9a5d4..171c28de8a5 100644 --- a/src/cascadia/TerminalControl/TermControl.h +++ b/src/cascadia/TerminalControl/TermControl.h @@ -186,6 +186,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation TYPED_EVENT(HidePointerCursor, IInspectable, IInspectable); TYPED_EVENT(RestorePointerCursor, IInspectable, IInspectable); TYPED_EVENT(ReadOnlyChanged, IInspectable, IInspectable); + TYPED_EVENT(FocusFollowMouseRequested, IInspectable, IInspectable); // clang-format on private: diff --git a/src/cascadia/TerminalControl/TermControl.idl b/src/cascadia/TerminalControl/TermControl.idl index 5bfbdaa1f4f..0bad381493b 100644 --- a/src/cascadia/TerminalControl/TermControl.idl +++ b/src/cascadia/TerminalControl/TermControl.idl @@ -120,5 +120,6 @@ namespace Microsoft.Terminal.TerminalControl Boolean ReadOnly { get; }; void ToggleReadOnly(); event Windows.Foundation.TypedEventHandler ReadOnlyChanged; + event Windows.Foundation.TypedEventHandler FocusFollowMouseRequested; } }