Sfoglia il codice sorgente

LibVT: Add "Open URL" and "Copy URL" to TerminalWidget context menu

These only show up when you right click a hyperlinked character cell.
Andreas Kling 5 anni fa
parent
commit
27d1e7f432
2 ha cambiato i file con 20 aggiunte e 6 eliminazioni
  1. 19 6
      Libraries/LibVT/TerminalWidget.cpp
  2. 1 0
      Libraries/LibVT/TerminalWidget.h

+ 19 - 6
Libraries/LibVT/TerminalWidget.cpp

@@ -125,6 +125,21 @@ TerminalWidget::TerminalWidget(int ptm_fd, bool automatic_size_policy, RefPtr<Co
     m_paste_action = GUI::Action::create("Paste", { Mod_Ctrl | Mod_Shift, Key_V }, Gfx::Bitmap::load_from_file("/res/icons/paste16.png"), [this](auto&) {
         paste();
     });
+
+    m_context_menu = GUI::Menu::construct();
+    m_context_menu->add_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)

+ 1 - 0
Libraries/LibVT/TerminalWidget.h

@@ -169,6 +169,7 @@ private:
     RefPtr<GUI::Action> m_paste_action;
 
     RefPtr<GUI::Menu> m_context_menu;
+    RefPtr<GUI::Menu> m_context_menu_for_hyperlink;
 
     Core::ElapsedTimer m_triple_click_timer;
 };