From 9bb6e3febe82a56b4cc02bee8a15030dc8cedde7 Mon Sep 17 00:00:00 2001 From: "Martin T. H. Sandsmark" Date: Sun, 6 Sep 2020 14:17:31 +0200 Subject: [PATCH] Fix crash when extending selection after switching between primary and secondary screen BUG: 398320 --- src/ScreenWindow.cpp | 5 +++++ src/ScreenWindow.h | 5 +++++ src/widgets/TerminalDisplay.cpp | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/ScreenWindow.cpp b/src/ScreenWindow.cpp index 2018a248..1ae0b5dc 100644 --- a/src/ScreenWindow.cpp +++ b/src/ScreenWindow.cpp @@ -49,6 +49,11 @@ void ScreenWindow::setScreen(Screen *screen) { Q_ASSERT(screen); + if (screen == _screen) { + return; + } + + emit screenAboutToChange(); _screen = screen; } diff --git a/src/ScreenWindow.h b/src/ScreenWindow.h index a3738975..61d244e9 100644 --- a/src/ScreenWindow.h +++ b/src/ScreenWindow.h @@ -257,6 +257,11 @@ Q_SIGNALS: /** Emitted when the selection is changed. */ void selectionChanged(); + /** Emitted when e. g. Screen is changed (to alternate or primary), so + * initial selection offsets etc. are invalidated. + */ + void screenAboutToChange(); + private: Q_DISABLE_COPY(ScreenWindow) diff --git a/src/widgets/TerminalDisplay.cpp b/src/widgets/TerminalDisplay.cpp index e9a810ac..5b4ab6fc 100644 --- a/src/widgets/TerminalDisplay.cpp +++ b/src/widgets/TerminalDisplay.cpp @@ -139,6 +139,11 @@ void TerminalDisplay::setScreenWindow(ScreenWindow* window) connect(_screenWindow.data(), &Konsole::ScreenWindow::outputChanged, this, [this]() { _filterUpdateRequired = true; }); + connect(_screenWindow.data(), &Konsole::ScreenWindow::screenAboutToChange, this, [this]() { + _iPntSel = QPoint(); + _pntSel = QPoint(); + _tripleSelBegin = QPoint(); + }); connect(_screenWindow.data(), &Konsole::ScreenWindow::scrolled, this, [this]() { _filterUpdateRequired = true; });