From aeb2b458d075431f8cf9832132935f23d93c6b74 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 25 Apr 2023 14:59:18 +0200 Subject: [PATCH] Terminal: Allow dropping files Change-Id: I978ea72d6de7df6c31d1d2d2368e7aadf835279d Reviewed-by: Cristian Adam --- src/plugins/terminal/terminalwidget.cpp | 21 +++++++++++++++++++++ src/plugins/terminal/terminalwidget.h | 3 +++ 2 files changed, 24 insertions(+) diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index 67d7cae59d6..6e13960bccf 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -90,6 +91,7 @@ TerminalWidget::TerminalWidget(QWidget *parent, const OpenTerminalParameters &op setAttribute(Qt::WA_InputMethodEnabled); setAttribute(Qt::WA_MouseTracking); + setAcceptDrops(true); setCursor(Qt::IBeamCursor); @@ -1439,6 +1441,25 @@ void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *event) event->accept(); } +void TerminalWidget::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasUrls()) { + event->setDropAction(Qt::CopyAction); + event->accept(); + } +} + +void TerminalWidget::dropEvent(QDropEvent *event) +{ + QString urls = Utils::transform(event->mimeData()->urls(), [](const QUrl &url) { + return QString("\"%1\"").arg(url.toDisplayString(QUrl::PreferLocalFile)); + }).join(" "); + + writeToPty(urls.toUtf8()); + event->setDropAction(Qt::CopyAction); + event->accept(); +} + void TerminalWidget::showEvent(QShowEvent *event) { Q_UNUSED(event); diff --git a/src/plugins/terminal/terminalwidget.h b/src/plugins/terminal/terminalwidget.h index 5833d17979e..4e1f2906b09 100644 --- a/src/plugins/terminal/terminalwidget.h +++ b/src/plugins/terminal/terminalwidget.h @@ -103,6 +103,9 @@ protected: void mouseReleaseEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; + void dragEnterEvent(QDragEnterEvent *event) override; + void dropEvent(QDropEvent *event) override; + void showEvent(QShowEvent *event) override; bool event(QEvent *event) override;