From d70fc5ee6a726b55626b126065a96f79df17e5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Javier=20Merino=20Mor=C3=A1n?= Date: Thu, 18 Mar 2021 13:40:18 +0100 Subject: [PATCH] Make mouse tracking modes mutually exclusive On xterm, modes 9 (X10 legacy, button press), 1000 (button press and release), 1001 (mouse highlight tracking), 1002 (mouse drag) 1003 (mouse move) and DECELR (DEC Locator) are mutually exclusive. So are 1005 (extended coordinates mode), 1006 (SGR extended coordinates), 1015 (urxvt extended coordinates) and 1016 (use pixel coordinates). On xterm, disabling any of the 9, 1000, 1001, 1002, 1003, DECELR modes disables mouse tracking. To disable the extended coordinate modes (1005, 1006, 1015, 1016), the current mode should be disabled. So, do the same for the modes Konsole supports. --- src/Vt102Emulation.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Vt102Emulation.cpp b/src/Vt102Emulation.cpp index c9a0038f..b5b71086 100644 --- a/src/Vt102Emulation.cpp +++ b/src/Vt102Emulation.cpp @@ -1416,11 +1416,24 @@ void Vt102Emulation::setMode(int m) case MODE_Mouse1001: case MODE_Mouse1002: case MODE_Mouse1003: + _currentModes.mode[MODE_Mouse1000] = false; + _currentModes.mode[MODE_Mouse1001] = false; + _currentModes.mode[MODE_Mouse1002] = false; + _currentModes.mode[MODE_Mouse1003] = false; + _currentModes.mode[m] = true; Q_EMIT programRequestsMouseTracking(true); break; case MODE_Mouse1007: Q_EMIT enableAlternateScrolling(true); break; + case MODE_Mouse1005: + case MODE_Mouse1006: + case MODE_Mouse1015: + _currentModes.mode[MODE_Mouse1005] = false; + _currentModes.mode[MODE_Mouse1006] = false; + _currentModes.mode[MODE_Mouse1015] = false; + _currentModes.mode[m] = true; + break; case MODE_BracketedPaste: Q_EMIT programBracketedPasteModeChanged(true); @@ -1453,6 +1466,12 @@ void Vt102Emulation::resetMode(int m) case MODE_Mouse1001: case MODE_Mouse1002: case MODE_Mouse1003: + // Same behavior as xterm, these modes are mutually exclusive, + // and disabling any disables mouse tracking. + _currentModes.mode[MODE_Mouse1000] = false; + _currentModes.mode[MODE_Mouse1001] = false; + _currentModes.mode[MODE_Mouse1002] = false; + _currentModes.mode[MODE_Mouse1003] = false; Q_EMIT programRequestsMouseTracking(false); break; case MODE_Mouse1007: