aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/terminal/terminalwidget.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <[email protected]>2023-07-25 09:16:48 +0200
committerMarcus Tillmanns <[email protected]>2023-07-26 14:06:38 +0000
commit79e839b29ffefa509ee71f78e4b7b057e3a74429 (patch)
tree3d25a0351016a9303ee780e79d5741f0b2cf2384 /src/plugins/terminal/terminalwidget.cpp
parent75d9dc2d313acca3ddf72809d2d2bec89b836844 (diff)
Terminal: Add mouse support
Change-Id: Ibeb8e13b5f8f75f16ec86f64536235587c844ffc Reviewed-by: Cristian Adam <[email protected]>
Diffstat (limited to 'src/plugins/terminal/terminalwidget.cpp')
-rw-r--r--src/plugins/terminal/terminalwidget.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp
index 63826ea6d99..72b7e103483 100644
--- a/src/plugins/terminal/terminalwidget.cpp
+++ b/src/plugins/terminal/terminalwidget.cpp
@@ -1280,6 +1280,14 @@ void TerminalWidget::updateViewportRect(const QRect &rect)
void TerminalWidget::wheelEvent(QWheelEvent *event)
{
verticalScrollBar()->event(event);
+
+ if (!settings().enableMouseTracking())
+ return;
+
+ if (event->angleDelta().ry() > 0)
+ m_surface->mouseButton(Qt::ExtraButton1, true, event->modifiers());
+ else if (event->angleDelta().ry() < 0)
+ m_surface->mouseButton(Qt::ExtraButton2, true, event->modifiers());
}
void TerminalWidget::focusInEvent(QFocusEvent *)
@@ -1306,8 +1314,18 @@ void TerminalWidget::inputMethodEvent(QInputMethodEvent *event)
m_surface->sendKey(event->commitString());
}
+QPoint TerminalWidget::toGridPos(QMouseEvent *event) const
+{
+ return globalToGrid(event->pos().toPointF() + QPointF(0, -topMargin() + 0.5));
+}
+
void TerminalWidget::mousePressEvent(QMouseEvent *event)
{
+ if (settings().enableMouseTracking()) {
+ m_surface->mouseMove(toGridPos(event), event->modifiers());
+ m_surface->mouseButton(event->button(), true, event->modifiers());
+ }
+
m_scrollDirection = 0;
m_activeMouseSelect.start = viewportToGlobal(event->pos());
@@ -1383,8 +1401,12 @@ void TerminalWidget::mousePressEvent(QMouseEvent *event)
}
}
}
+
void TerminalWidget::mouseMoveEvent(QMouseEvent *event)
{
+ if (settings().enableMouseTracking())
+ m_surface->mouseMove(toGridPos(event), event->modifiers());
+
if (m_selection && event->buttons() & Qt::LeftButton) {
Selection newSelection = *m_selection;
int scrollVelocity = 0;
@@ -1487,6 +1509,11 @@ bool TerminalWidget::checkLinkAt(const QPoint &pos)
void TerminalWidget::mouseReleaseEvent(QMouseEvent *event)
{
+ if (settings().enableMouseTracking()) {
+ m_surface->mouseMove(toGridPos(event), event->modifiers());
+ m_surface->mouseButton(event->button(), false, event->modifiers());
+ }
+
m_scrollTimer.stop();
if (m_selection && event->button() == Qt::LeftButton) {
@@ -1528,6 +1555,12 @@ TerminalWidget::TextAndOffsets TerminalWidget::textAt(const QPoint &pos) const
void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
+ if (settings().enableMouseTracking()) {
+ m_surface->mouseMove(toGridPos(event), event->modifiers());
+ m_surface->mouseButton(event->button(), true, event->modifiers());
+ m_surface->mouseButton(event->button(), false, event->modifiers());
+ }
+
const auto hit = textAt(event->pos());
setSelection(Selection{hit.start, hit.end, true});