From b4923938e101ffbf574c1b50c5d2acf0db0127e7 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Wed, 22 Jan 2020 17:18:28 +0300 Subject: [PATCH] LibVT: Input dragged file path into the terminal on drop We also support dropping plain text and non-file URLs. --- Libraries/LibVT/TerminalWidget.cpp | 21 +++++++++++++++++++++ Libraries/LibVT/TerminalWidget.h | 1 + 2 files changed, 22 insertions(+) diff --git a/Libraries/LibVT/TerminalWidget.cpp b/Libraries/LibVT/TerminalWidget.cpp index c3ff239ab8..7f0a256291 100644 --- a/Libraries/LibVT/TerminalWidget.cpp +++ b/Libraries/LibVT/TerminalWidget.cpp @@ -689,6 +689,27 @@ void TerminalWidget::context_menu_event(GContextMenuEvent& event) m_context_menu->popup(event.screen_position()); } +void TerminalWidget::drop_event(GDropEvent& event) +{ + if (event.data_type() == "text") { + event.accept(); + write(m_ptm_fd, event.data().characters(), event.data().length()); + } else if (event.data_type() == "url-list") { + event.accept(); + auto lines = event.data().split('\n'); + bool first = true; + for (auto& line : lines) { + if (!first) + write(m_ptm_fd, " ", 1); + first = false; + + if (line.starts_with("file://")) + line = line.substring(7, line.length() - 7); + write(m_ptm_fd, line.characters(), line.length()); + } + } +} + void TerminalWidget::did_change_font() { GFrame::did_change_font(); diff --git a/Libraries/LibVT/TerminalWidget.h b/Libraries/LibVT/TerminalWidget.h index 7c154e2c36..9d9744cafd 100644 --- a/Libraries/LibVT/TerminalWidget.h +++ b/Libraries/LibVT/TerminalWidget.h @@ -100,6 +100,7 @@ private: virtual void focusin_event(CEvent&) override; virtual void focusout_event(CEvent&) override; virtual void context_menu_event(GContextMenuEvent&) override; + virtual void drop_event(GDropEvent&) override; virtual void did_change_font() override; // ^TerminalClient