mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
Browser: Add a special context menu for images
Now, right-clicking on an image allows you to open that image in this tab or a new tab. You can also copy the image URL, and even copy the image itself to the clipboard! :^) Copying to the clipboard will not work in a multi-process context yet, since we need to send the image bitmap across the IPC boundary and this patch does not do that.
This commit is contained in:
parent
91b49dd9d0
commit
44f9637e20
Notes:
sideshowbarker
2024-07-19 02:05:46 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/44f9637e20c
2 changed files with 31 additions and 0 deletions
|
@ -187,6 +187,32 @@ Tab::Tab(Type type)
|
|||
m_link_context_menu->popup(screen_position, m_link_context_menu_default_action);
|
||||
};
|
||||
|
||||
m_image_context_menu = GUI::Menu::construct();
|
||||
m_image_context_menu->add_action(GUI::Action::create("Open image", [this](auto&) {
|
||||
hooks().on_link_click(m_image_context_menu_url, "", 0);
|
||||
}));
|
||||
m_image_context_menu->add_action(GUI::Action::create("Open image in new tab", [this](auto&) {
|
||||
hooks().on_link_click(m_image_context_menu_url, "_blank", 0);
|
||||
}));
|
||||
m_image_context_menu->add_separator();
|
||||
m_image_context_menu->add_action(GUI::Action::create("Copy image", [this](auto&) {
|
||||
if (m_image_context_menu_bitmap.is_valid())
|
||||
GUI::Clipboard::the().set_bitmap(*m_image_context_menu_bitmap.bitmap());
|
||||
}));
|
||||
m_image_context_menu->add_action(GUI::Action::create("Copy image URL", [this](auto&) {
|
||||
GUI::Clipboard::the().set_plain_text(m_image_context_menu_url.to_string());
|
||||
}));
|
||||
m_image_context_menu->add_separator();
|
||||
m_image_context_menu->add_action(GUI::Action::create("Download", [this](auto&) {
|
||||
start_download(m_image_context_menu_url);
|
||||
}));
|
||||
|
||||
hooks().on_image_context_menu_request = [this](auto& image_url, auto& screen_position, const Gfx::ShareableBitmap& shareable_bitmap) {
|
||||
m_image_context_menu_url = image_url;
|
||||
m_image_context_menu_bitmap = shareable_bitmap;
|
||||
m_image_context_menu->popup(screen_position);
|
||||
};
|
||||
|
||||
hooks().on_link_middle_click = [this](auto& href, auto&, auto) {
|
||||
hooks().on_link_click(href, "_blank", 0);
|
||||
};
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "History.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibGUI/Widget.h>
|
||||
#include <LibGfx/ShareableBitmap.h>
|
||||
#include <LibHTTP/HttpJob.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
||||
|
@ -104,6 +105,10 @@ private:
|
|||
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
||||
URL m_link_context_menu_url;
|
||||
|
||||
RefPtr<GUI::Menu> m_image_context_menu;
|
||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
||||
URL m_image_context_menu_url;
|
||||
|
||||
RefPtr<GUI::Menu> m_tab_context_menu;
|
||||
RefPtr<GUI::Menu> m_page_context_menu;
|
||||
|
||||
|
|
Loading…
Reference in a new issue