1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 08:37:45 +00:00

Browser: Pop up a context menu when requested on a bookmark button

This right click context menu currently allows for the removal of
bookmarks as well as opening them in a new tab.
This commit is contained in:
FalseHonesty 2020-05-18 21:31:12 -04:00 committed by Andreas Kling
parent 28f74df2e6
commit 5431e81bc3
3 changed files with 20 additions and 3 deletions

View file

@ -70,6 +70,15 @@ BookmarksBarWidget::BookmarksBarWidget(const String& bookmarks_file, bool enable
m_separator = GUI::Widget::construct();
m_context_menu = GUI::Menu::construct();
m_context_menu->add_action(GUI::Action::create("Delete", [this](auto&) {
remove_bookmark(m_context_menu_url);
}));
m_context_menu->add_action(GUI::Action::create("Open in new tab", [this](auto&) {
if (on_bookmark_click)
on_bookmark_click(m_context_menu_url, Mod_Ctrl);
}));
Vector<GUI::JsonArrayModel::FieldSpec> fields;
fields.empend("title", "Title", Gfx::TextAlignment::CenterLeft);
fields.empend("url", "Url", Gfx::TextAlignment::CenterRight);
@ -125,7 +134,12 @@ void BookmarksBarWidget::did_update_model()
button.on_click = [title, url, this](auto modifiers) {
if (on_bookmark_click)
on_bookmark_click(title, url, modifiers);
on_bookmark_click(url, modifiers);
};
button.on_context_menu_request = [this, url](auto& context_menu_event) {
m_context_menu_url = url;
m_context_menu->popup(context_menu_event.screen_position());
};
width += rect.width();

View file

@ -42,7 +42,7 @@ public:
GUI::Model* model() { return m_model.ptr(); }
const GUI::Model* model() const { return m_model.ptr(); }
Function<void(const String&, const String&, unsigned modifiers)> on_bookmark_click;
Function<void(const String& url, unsigned modifiers)> on_bookmark_click;
Function<void(const String&, const String&)> on_bookmark_hover;
bool contains_bookmark(const String& url);
@ -62,6 +62,9 @@ private:
RefPtr<GUI::Widget> m_separator;
RefPtr<GUI::Menu> m_additional_menu;
RefPtr<GUI::Menu> m_context_menu;
String m_context_menu_url;
NonnullRefPtrVector<GUI::Button> m_bookmarks;
int m_last_visible_index { -1 };

View file

@ -356,7 +356,7 @@ void Tab::did_become_active()
m_statusbar->set_text(String::format("Loading (%d pending resources...)", Web::ResourceLoader::the().pending_loads()));
};
BookmarksBarWidget::the().on_bookmark_click = [this](auto&, auto& url, unsigned modifiers) {
BookmarksBarWidget::the().on_bookmark_click = [this](auto& url, unsigned modifiers) {
if (modifiers & Mod_Ctrl)
on_tab_open_request(url);
else