From 5431e81bc38aac9bc8939fc42243248766335367 Mon Sep 17 00:00:00 2001 From: FalseHonesty Date: Mon, 18 May 2020 21:31:12 -0400 Subject: [PATCH] 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. --- Applications/Browser/BookmarksBarWidget.cpp | 16 +++++++++++++++- Applications/Browser/BookmarksBarWidget.h | 5 ++++- Applications/Browser/Tab.cpp | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Applications/Browser/BookmarksBarWidget.cpp b/Applications/Browser/BookmarksBarWidget.cpp index 4822645217..da78f178b8 100644 --- a/Applications/Browser/BookmarksBarWidget.cpp +++ b/Applications/Browser/BookmarksBarWidget.cpp @@ -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 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(); diff --git a/Applications/Browser/BookmarksBarWidget.h b/Applications/Browser/BookmarksBarWidget.h index f7d0437585..96e8313fcd 100644 --- a/Applications/Browser/BookmarksBarWidget.h +++ b/Applications/Browser/BookmarksBarWidget.h @@ -42,7 +42,7 @@ public: GUI::Model* model() { return m_model.ptr(); } const GUI::Model* model() const { return m_model.ptr(); } - Function on_bookmark_click; + Function on_bookmark_click; Function on_bookmark_hover; bool contains_bookmark(const String& url); @@ -62,6 +62,9 @@ private: RefPtr m_separator; RefPtr m_additional_menu; + RefPtr m_context_menu; + String m_context_menu_url; + NonnullRefPtrVector m_bookmarks; int m_last_visible_index { -1 }; diff --git a/Applications/Browser/Tab.cpp b/Applications/Browser/Tab.cpp index c5ba32f83d..e098ea19c4 100644 --- a/Applications/Browser/Tab.cpp +++ b/Applications/Browser/Tab.cpp @@ -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