From 1a99bdad29f0420b747c0d468eabedd4e48d9db1 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 10 Jun 2026 11:54:28 -0400 Subject: [PATCH] LibWebView+UI: Add a small history application menu This currently just contains a menu item to open about:history. But in the future, we can add a list of recently closed / recently visited pages as well. --- Libraries/LibWebView/Application.cpp | 5 +++++ Libraries/LibWebView/Application.h | 4 ++++ Libraries/LibWebView/Menu.h | 1 + UI/AppKit/Application/ApplicationDelegate.mm | 9 +-------- UI/AppKit/Interface/Menu.mm | 3 +++ UI/Qt/BrowserWindow.cpp | 4 ++++ UI/Qt/BrowserWindow.h | 1 + 7 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Libraries/LibWebView/Application.cpp b/Libraries/LibWebView/Application.cpp index 59f82c8db6..6abae3fddc 100644 --- a/Libraries/LibWebView/Application.cpp +++ b/Libraries/LibWebView/Application.cpp @@ -1510,6 +1510,11 @@ void Application::initialize_actions() m_bookmark_folder_context_menu->add_action(add_bookmark_action); m_bookmark_folder_context_menu->add_action(add_bookmark_folder_action); + m_history_menu = Menu::create("History"sv); + m_history_menu->add_action(Action::create("View History"sv, ActionID::ViewHistory, [this]() { + open_url_in_new_tab(URL::about_history(), Web::HTML::ActivateTab::Yes); + })); + m_inspect_menu = Menu::create("Inspect"sv); m_view_source_action = Action::create("View Source"sv, ActionID::ViewSource, [this]() { diff --git a/Libraries/LibWebView/Application.h b/Libraries/LibWebView/Application.h index 8d4047ab70..b85a62866a 100644 --- a/Libraries/LibWebView/Application.h +++ b/Libraries/LibWebView/Application.h @@ -188,6 +188,8 @@ public: Menu& bookmark_context_menu() { return *m_bookmark_context_menu; } Menu& bookmark_folder_context_menu() { return *m_bookmark_folder_context_menu; } + Menu& history_menu() { return *m_history_menu; } + Menu& inspect_menu() { return *m_inspect_menu; } Action& view_source_action() { return *m_view_source_action; } @@ -387,6 +389,8 @@ private: RefPtr m_bookmark_context_menu; RefPtr m_bookmark_folder_context_menu; + RefPtr m_history_menu; + RefPtr m_inspect_menu; RefPtr m_view_source_action; RefPtr m_toggle_devtools_action; diff --git a/Libraries/LibWebView/Menu.h b/Libraries/LibWebView/Menu.h index 6519910464..38c720c3c2 100644 --- a/Libraries/LibWebView/Menu.h +++ b/Libraries/LibWebView/Menu.h @@ -27,6 +27,7 @@ enum class ActionID { NavigateBack, NavigateForward, Reload, + ViewHistory, CopySelection, CutSelection, diff --git a/UI/AppKit/Application/ApplicationDelegate.mm b/UI/AppKit/Application/ApplicationDelegate.mm index 021b20ce31..693e6afb28 100644 --- a/UI/AppKit/Application/ApplicationDelegate.mm +++ b/UI/AppKit/Application/ApplicationDelegate.mm @@ -338,14 +338,7 @@ - (NSMenuItem*)createHistoryMenu { - auto* menu = [[NSMenuItem alloc] init]; - - auto* submenu = [[NSMenu alloc] initWithTitle:@"History"]; - [submenu setAutoenablesItems:NO]; - - [submenu addItem:Ladybird::create_application_menu_item(WebView::Application::the().reload_action())]; - [menu setSubmenu:submenu]; - return menu; + return Ladybird::create_application_menu_item(WebView::Application::the().history_menu()); } - (NSMenuItem*)createBookmarksMenu diff --git a/UI/AppKit/Interface/Menu.mm b/UI/AppKit/Interface/Menu.mm index 807c487b1e..44252732c0 100644 --- a/UI/AppKit/Interface/Menu.mm +++ b/UI/AppKit/Interface/Menu.mm @@ -225,6 +225,9 @@ static void initialize_native_icon(WebView::Action& action, id control) set_control_image(control, @"arrow.clockwise"); [control setKeyEquivalent:@"r"]; break; + case WebView::ActionID::ViewHistory: + set_control_image(control, @"clock"); + break; case WebView::ActionID::CopySelection: set_control_image(control, @"document.on.document"); diff --git a/UI/Qt/BrowserWindow.cpp b/UI/Qt/BrowserWindow.cpp index 0d6541f19f..485d0d112a 100644 --- a/UI/Qt/BrowserWindow.cpp +++ b/UI/Qt/BrowserWindow.cpp @@ -372,6 +372,10 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow m_hamburger_menu->addMenu(m_bookmarks_menu); menuBar()->addMenu(m_bookmarks_menu); + m_history_menu = create_application_menu(*this, application.history_menu()); + m_hamburger_menu->addMenu(m_history_menu); + menuBar()->addMenu(m_history_menu); + auto* inspect_menu = create_application_menu(*m_hamburger_menu, application.inspect_menu()); m_hamburger_menu->addMenu(inspect_menu); menuBar()->addMenu(inspect_menu); diff --git a/UI/Qt/BrowserWindow.h b/UI/Qt/BrowserWindow.h index a394a1e8a1..1b88b37be0 100644 --- a/UI/Qt/BrowserWindow.h +++ b/UI/Qt/BrowserWindow.h @@ -209,6 +209,7 @@ private: QMenu* m_hamburger_menu { nullptr }; QMenu* m_bookmarks_menu { nullptr }; + QMenu* m_history_menu { nullptr }; QWidget* m_menu_bar_window_controls { nullptr }; QToolButton* m_menu_bar_minimize_window_button { nullptr }; QToolButton* m_menu_bar_maximize_window_button { nullptr };