diff --git a/Ladybird/Tab.cpp b/Ladybird/Tab.cpp index 7a16f0f25f..3cecf23373 100644 --- a/Ladybird/Tab.cpp +++ b/Ladybird/Tab.cpp @@ -403,6 +403,18 @@ Tab::Tab(BrowserWindow* window, StringView webdriver_content_ipc_path, WebView:: view().toggle_media_loop_state(); }); + auto* open_audio_action = new QAction("&Open Audio", this); + open_audio_action->setIcon(QIcon(QString("%1/res/icons/16x16/filetype-sound.png").arg(s_serenity_resource_root.characters()))); + QObject::connect(open_audio_action, &QAction::triggered, this, [this]() { + open_link(m_media_context_menu_url); + }); + + auto* open_audio_in_new_tab_action = new QAction("Open Audio in New &Tab", this); + open_audio_in_new_tab_action->setIcon(QIcon(QString("%1/res/icons/16x16/new-tab.png").arg(s_serenity_resource_root.characters()))); + QObject::connect(open_audio_in_new_tab_action, &QAction::triggered, this, [this]() { + open_link_in_new_tab(m_media_context_menu_url); + }); + auto* copy_audio_url_action = new QAction("Copy Audio &URL", this); copy_audio_url_action->setIcon(QIcon(QString("%1/res/icons/16x16/edit-copy.png").arg(s_serenity_resource_root.characters()))); QObject::connect(copy_audio_url_action, &QAction::triggered, this, [this]() { @@ -415,6 +427,9 @@ Tab::Tab(BrowserWindow* window, StringView webdriver_content_ipc_path, WebView:: m_audio_context_menu->addAction(m_media_context_menu_controls_action); m_audio_context_menu->addAction(m_media_context_menu_loop_action); m_audio_context_menu->addSeparator(); + m_audio_context_menu->addAction(open_audio_action); + m_audio_context_menu->addAction(open_audio_in_new_tab_action); + m_audio_context_menu->addSeparator(); m_audio_context_menu->addAction(copy_audio_url_action); m_audio_context_menu->addSeparator(); m_audio_context_menu->addAction(&m_window->inspect_dom_node_action()); diff --git a/Userland/Applications/Browser/IconBag.cpp b/Userland/Applications/Browser/IconBag.cpp index 1b35be3084..3e6fab1c86 100644 --- a/Userland/Applications/Browser/IconBag.cpp +++ b/Userland/Applications/Browser/IconBag.cpp @@ -14,6 +14,7 @@ ErrorOr IconBag::try_create() icon_bag.filetype_html = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-html.png"sv)); icon_bag.filetype_text = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-text.png"sv)); icon_bag.filetype_javascript = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-javascript.png"sv)); + icon_bag.filetype_audio = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-sound.png"sv)); icon_bag.filetype_image = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-image.png"sv)); icon_bag.filetype_video = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-video.png"sv)); icon_bag.bookmark_contour = TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/bookmark-contour.png"sv)); diff --git a/Userland/Applications/Browser/IconBag.h b/Userland/Applications/Browser/IconBag.h index c00d9499e9..1868671030 100644 --- a/Userland/Applications/Browser/IconBag.h +++ b/Userland/Applications/Browser/IconBag.h @@ -16,6 +16,7 @@ struct IconBag final { RefPtr filetype_html { nullptr }; RefPtr filetype_text { nullptr }; RefPtr filetype_javascript { nullptr }; + RefPtr filetype_audio { nullptr }; RefPtr filetype_image { nullptr }; RefPtr filetype_video { nullptr }; RefPtr bookmark_contour { nullptr }; diff --git a/Userland/Applications/Browser/Tab.cpp b/Userland/Applications/Browser/Tab.cpp index 9d714da91b..e4b2a98be8 100644 --- a/Userland/Applications/Browser/Tab.cpp +++ b/Userland/Applications/Browser/Tab.cpp @@ -393,6 +393,13 @@ Tab::Tab(BrowserWindow& window) m_audio_context_menu->add_action(*m_media_context_menu_controls_action); m_audio_context_menu->add_action(*m_media_context_menu_loop_action); m_audio_context_menu->add_separator(); + m_audio_context_menu->add_action(GUI::Action::create("&Open Audio", g_icon_bag.filetype_audio, [this](auto&) { + view().on_link_click(m_media_context_menu_url, "", 0); + })); + m_audio_context_menu->add_action(GUI::Action::create("Open Audio in New &Tab", g_icon_bag.new_tab, [this](auto&) { + view().on_link_click(m_media_context_menu_url, "_blank", 0); + })); + m_audio_context_menu->add_separator(); m_audio_context_menu->add_action(GUI::Action::create("Copy Audio &URL", g_icon_bag.copy, [this](auto&) { GUI::Clipboard::the().set_plain_text(m_media_context_menu_url.to_deprecated_string()); }));