From 27d1e7f432f2e79ec77508fbe9bd9b0cccd37a10 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 9 May 2020 16:42:42 +0200 Subject: [PATCH] LibVT: Add "Open URL" and "Copy URL" to TerminalWidget context menu These only show up when you right click a hyperlinked character cell. --- Libraries/LibVT/TerminalWidget.cpp | 25 +++++++++++++++++++------ Libraries/LibVT/TerminalWidget.h | 1 + 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Libraries/LibVT/TerminalWidget.cpp b/Libraries/LibVT/TerminalWidget.cpp index 1a4e812e57..d00caca5f5 100644 --- a/Libraries/LibVT/TerminalWidget.cpp +++ b/Libraries/LibVT/TerminalWidget.cpp @@ -125,6 +125,21 @@ TerminalWidget::TerminalWidget(int ptm_fd, bool automatic_size_policy, RefPtradd_action(copy_action()); + m_context_menu->add_action(paste_action()); + + m_context_menu_for_hyperlink = GUI::Menu::construct(); + m_context_menu_for_hyperlink->add_action(GUI::Action::create("Open URL", [this](auto&) { + Desktop::Launcher::open(m_hovered_href); + })); + m_context_menu_for_hyperlink->add_action(GUI::Action::create("Copy URL", [this](auto&) { + GUI::Clipboard::the().set_data(m_hovered_href); + })); + m_context_menu_for_hyperlink->add_separator(); + m_context_menu_for_hyperlink->add_action(copy_action()); + m_context_menu_for_hyperlink->add_action(paste_action()); } TerminalWidget::~TerminalWidget() @@ -743,12 +758,10 @@ void TerminalWidget::emit(const u8* data, size_t size) void TerminalWidget::context_menu_event(GUI::ContextMenuEvent& event) { - if (!m_context_menu) { - m_context_menu = GUI::Menu::construct(); - m_context_menu->add_action(copy_action()); - m_context_menu->add_action(paste_action()); - } - m_context_menu->popup(event.screen_position()); + if (m_hovered_href_id.is_null()) + m_context_menu->popup(event.screen_position()); + else + m_context_menu_for_hyperlink->popup(event.screen_position()); } void TerminalWidget::drop_event(GUI::DropEvent& event) diff --git a/Libraries/LibVT/TerminalWidget.h b/Libraries/LibVT/TerminalWidget.h index ca244aca1e..36f5bdcf4b 100644 --- a/Libraries/LibVT/TerminalWidget.h +++ b/Libraries/LibVT/TerminalWidget.h @@ -169,6 +169,7 @@ private: RefPtr m_paste_action; RefPtr m_context_menu; + RefPtr m_context_menu_for_hyperlink; Core::ElapsedTimer m_triple_click_timer; };