Terminal: Implement scroll keyboard shortcuts

Change-Id: I354e6f63f89893ca057d17fab9810ea5c3dece7d
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Marcus Tillmanns
2025-01-07 14:08:06 +01:00
parent 51f105e07f
commit 875caa56b1
4 changed files with 33 additions and 2 deletions

View File

@@ -647,6 +647,11 @@ void TerminalSurface::sendFocus(bool hasFocus)
vterm_state_focus_out(vts);
}
bool TerminalSurface::isInAltScreen()
{
return d->m_altscreen;
}
void TerminalSurface::setWriteToPty(WriteToPty writeToPty)
{
d->m_writeToPty = writeToPty;

View File

@@ -105,6 +105,7 @@ public:
void mouseButton(Qt::MouseButton button, bool pressed, Qt::KeyboardModifiers modifiers);
void sendFocus(bool hasFocus);
bool isInAltScreen();
signals:
void invalidated(QRect grid);
void fullSizeChanged(QSize newSize);

View File

@@ -950,7 +950,33 @@ void TerminalView::keyPressEvent(QKeyEvent *event)
event->accept();
if (d->m_surface->isInAltScreen()) {
d->m_surface->sendKey(event);
} else {
switch (event->key()) {
case Qt::Key_PageDown:
verticalScrollBar()->setValue(qBound(
0,
verticalScrollBar()->value() + d->m_surface->liveSize().height(),
verticalScrollBar()->maximum()));
break;
case Qt::Key_PageUp:
verticalScrollBar()->setValue(qBound(
0,
verticalScrollBar()->value() - d->m_surface->liveSize().height(),
verticalScrollBar()->maximum()));
break;
case Qt::Key_End:
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
break;
case Qt::Key_Home:
verticalScrollBar()->setValue(0);
break;
default:
d->m_surface->sendKey(event);
break;
}
}
}
void TerminalView::keyReleaseEvent(QKeyEvent *event)

View File

@@ -42,7 +42,6 @@
#include <QPixmapCache>
#include <QRawFont>
#include <QRegularExpression>
#include <QScrollBar>
#include <QTextItem>
#include <QTextLayout>
#include <QToolTip>