The recent change of blending the background/foreground colours for text
selection doesn't work everywhere, users with vision impairment or
colour-blindness would probably find it hard to distinguish text selection
colours; and the current code can't possibly cover all variations of colour
schemes out there. The same goes with certain displays and viewing angles,
some display types are notoriously awful when viewed at an angle.
BUG: 435309
FIXED-IN: 21.08
- Add a type alias for QPointer<Session>
- Use TerminalDisplay::setSessionController() as early as possible
- Use Screen::setCurrentTerminalDisplay() in TerminalDisplay::mousePressEvent(),
this matches what's being done in keyPressEvent()
- Add convenience function TerminalDisplay::currentSession()
- More const
This test currently is bogus, as soon as I reflow the Screen
object, the data is not correct. If anyone can check what I'm
doing wrong here it's appreciated.
The idea is that I pass a large string "aaa bbb ccc ddd" then
force a reflow for:
"aaa bbb
ccc ddd"
then I could copy only the column
bbb
ddd
Because the setSize did not work for that, the test is bogus.
but it's a start.
AutoScrollHandler generates synthetic mouse moves to allow extending the
selection by dragging the mouse ouside the display area. The synthetic
events it generates didn't carry any modifiers, so they were not
properly working when an application had requested mouse tracking
reports. In that case, generate the events with ShiftModifier, so they
work properly.
As gumix explains in the bug below, "Konsole keeps sending mouse-drag
reports in ESC[?1003h mode after releasing button outside window [...]
The only way to stop it is to get mouse back over Konsole window."
These mouse-drag reports are actually generated by AutoScrollHandler, to
support the use case of extending the selection by dragging the mouse
outside the display area.
So, only generate those reports while selecting.
Can be tested by playing around in vttest:
- 11. Test non-VT100 (e.g., VT220, XTERM) terminals
- 8. Test XTERM special features
- 5. Mouse features
- 7. Mouse Button-Event Tracking (XFree86 xterm)
BUG: 391975
AutoScrollHandler allows to extend the selection by dragging the mouse
outside the display. It does this by generating synthetic mouse move
events when the left mouse button is held down and the mouse is moved
outside of the display area. This improves the user experience of
extending the selection to cover text that is scrolled outside the
display area.
Unfortunately, this was broken by commit
6667d96ed9, which filters out mouse move
events if they don't change the character cell position. So, modify the
filtering a bit, allowing mouse movements outside the display area to
pass through.
Something was swallowing mouse moves on the top left 100x30 pixels of
TerminalDisplay. As it turns out, it was the widgets for TerminalFonts
and TerminalColor. Neither of them really needs to be a QWidget.
TerminalColor emits the onPalette(const QPalette &) signal, has slots,
and overrides event(QEvent &), so turn it into a QObject.
TerminalFonts doesn't do any of the above, turn it into a plain C++
object.
Now that TerminalFonts is no longer a QObject, manage it with a
std::unique_ptr.
TerminalFonts::fontChange(const QFont &) was calling update(), which was
probably a leftover from when it was split from TerminalDisplay. Get
rid of it. Trivial testing using keyboard shortcuts to change font size
(Ctrl++, Ctrl+-, Alt+Ctrl+0), and previewing font changes on "Edit
Current Profile..." seem to indicate that it isn't needed.
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.
As explained by magiblot at the bug below, "When double clicking with
the right button, the sequences sent to the application in the terminal
are DOWN-UP-UP instead of DOWN-UP-DOWN-UP."
BUG: 425926
When a Splitter has only one child, it can be removed, and the
child can be united with the widget above, unless it's the only
splitter - as that holds the main widget.
The existing code scans through `programs` to find an acceptable
shell to start; `_program` is the shell that is configured for
the session (line 456). The first shell to be found from that
list, is assigned to `exec` and we'll run that shell.
If the shell found wasn't the one configured (e.g. one of the
other ones from the list) then a warning is printed, but we carry on.
**However**, if the shell found is the **last** one in the list
(i.e. `/bin/sh`) then a warning is printed and the shell does
not start.
If the configured shell is `/bin/sh` this obviously breaks down:
it is found (as the first one in the list!) but still equals the
last one; the warning is printed and nothing runs.
It is unclear **why** `/bin/sh` is not allowed as a shell:
it exists, it's an executable, and it's an interactive shell.
Curiously, configuring the shell as `sh` for the session runs
`/bin/sh` in the end, but just tricks the logic here:
- `checkProgram("sh")` returns `sh` as string,
- so the comparison against `/bin/sh` fails,
- and we can run `sh` .. which is `/bin/sh`.
There's no good reason to forbid `/bin/sh`, so change the check to
**only** fail if no shell was found at all (`exec` stayed empty)
or if the found shell behaves weirdly (is not equal to itself).
A new assert in GCC 11.1.0 std::piecewise_linear_distribution fails in
the case that the lower and upper boundaries are equal. So, make sure
to not construct a std::piecewise_linear_distribution when minSaturation
equals maxSaturation and when minLightness equals maxLightness.
BUG: 434892
It should be uint. I am not sure this fixes the mentioned bug, but it's
correct anyway, std::mt19937 and co. unsigned types; and we shouldn't mix
signed with unsigned.
CCBUG: 434892
We only need to set the favourite emblem for the default profile icon, for
other profiles, the profile icon is already set on the menu action.
Rename a lambda to a more meaningful name.
BUG: 437200
FIXED-IN: 21.08
Commits 9ffe33a27a and
4352df00d9 introduce and use a
getScreenLineColumns(line) method to provide support for DECDWL
(Double-Width) lines.
It turns out that under some conditions on resize Screen::_cuY (the
current cursor Y position) and ScreenWindow::endWindowLine() can have
different ideas of how many lines the terminal has.
A test that asserts:
- while [ true ]; do echo -e "\e[?1047h"; done
- Resize the window, making it smaller
BUG: 436327