diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000000..4a007aa3265 Binary files /dev/null and b/.DS_Store differ diff --git a/src/cascadia/TerminalCore/Terminal.cpp b/src/cascadia/TerminalCore/Terminal.cpp index 4c5d6eaef18..1179cb61d7e 100644 --- a/src/cascadia/TerminalCore/Terminal.cpp +++ b/src/cascadia/TerminalCore/Terminal.cpp @@ -783,9 +783,14 @@ TerminalInput::OutputType Terminal::SendCharEvent(const wchar_t ch, const WORD s // Return Value: // - none TerminalInput::OutputType Terminal::FocusChanged(const bool focused) -{ - return _getTerminalInput().HandleFocus(focused); -} + { + if (_isFocused != focused) + { + _isFocused = focused; + return _getTerminalInput().HandleFocus(focused); + } + return {}; + } // Method Description: // - Invalidates the regions described in the given pattern tree for the rendering purposes diff --git a/src/cascadia/TerminalCore/Terminal.hpp b/src/cascadia/TerminalCore/Terminal.hpp index 73974e85dad..1b072a6d142 100644 --- a/src/cascadia/TerminalCore/Terminal.hpp +++ b/src/cascadia/TerminalCore/Terminal.hpp @@ -414,6 +414,7 @@ class Microsoft::Terminal::Core::Terminal final : til::CoordType _scrollbackLines = 0; bool _detectURLs = false; bool _clipboardOperationsAllowed = true; + bool _isFocused = false; til::size _altBufferSize; std::optional _deferredResize; diff --git a/src/cascadia/TerminalCore/TerminalApi.cpp b/src/cascadia/TerminalCore/TerminalApi.cpp index 825712028ee..7d1fb34bf93 100644 --- a/src/cascadia/TerminalCore/TerminalApi.cpp +++ b/src/cascadia/TerminalCore/TerminalApi.cpp @@ -140,7 +140,8 @@ unsigned int Terminal::GetInputCodePage() const noexcept void Terminal::CopyToClipboard(wil::zwstring_view content) { - if (_clipboardOperationsAllowed) + // Only allow VT clipboard writes when the terminal has focus + if (_clipboardOperationsAllowed && _isFocused) { _pfnCopyToClipboard(content); } diff --git a/src/host/outputStream.cpp b/src/host/outputStream.cpp index 5ef852065f4..7b1ee168d60 100644 --- a/src/host/outputStream.cpp +++ b/src/host/outputStream.cpp @@ -282,7 +282,13 @@ unsigned int ConhostInternalGetSet::GetInputCodePage() const // - void ConhostInternalGetSet::CopyToClipboard(const wil::zwstring_view content) { - ServiceLocator::LocateGlobals().getConsoleInformation().CopyTextToClipboard(content); + auto& gci = ServiceLocator::LocateGlobals().getConsoleInformation(); + + // Only allow VT clipboard writes when the console has focus + if (WI_IsFlagSet(gci.Flags, CONSOLE_HAS_FOCUS)) + { + gci.CopyTextToClipboard(content); + } } // Routine Description: diff --git a/tools/bx.cmd b/tools/bx.cmd old mode 100644 new mode 100755