LibWebView+UI: Generate the entire Inspect menu

Now that all the actions in the Inspect menu are generated, we can
generate the menu itself.
This commit is contained in:
Timothy Flynn 2025-09-17 10:22:23 -04:00 committed by Tim Flynn
parent 14d49d5a3a
commit 8b2187bf92
4 changed files with 30 additions and 27 deletions

View File

@ -679,20 +679,9 @@ void Application::initialize_actions()
m_open_about_page_action = Action::create("About Ladybird"sv, ActionID::OpenAboutPage, [this]() {
open_url_in_new_tab(URL::about_version(), Web::HTML::ActivateTab::Yes);
});
m_open_processes_page_action = Action::create("Open Task Manager"sv, ActionID::OpenProcessesPage, [this]() {
open_url_in_new_tab(URL::about_processes(), Web::HTML::ActivateTab::Yes);
});
m_open_settings_page_action = Action::create("Settings"sv, ActionID::OpenSettingsPage, [this]() {
open_url_in_new_tab(URL::about_settings(), Web::HTML::ActivateTab::Yes);
});
m_toggle_devtools_action = Action::create("Enable DevTools"sv, ActionID::ToggleDevTools, [this]() {
if (auto result = toggle_devtools_enabled(); result.is_error())
display_error_dialog(MUST(String::formatted("Unable to start DevTools: {}", result.error())));
});
m_view_source_action = Action::create("View Source"sv, ActionID::ViewSource, [this]() {
if (auto view = active_web_view(); view.has_value())
view->get_source();
});
m_zoom_menu = Menu::create_group("Zoom"sv);
m_zoom_menu->add_action(Action::create("Zoom In"sv, ActionID::ZoomIn, [this]() {
@ -762,8 +751,25 @@ void Application::initialize_actions()
m_motion_menu->add_action(Action::create_checkable("No Preference"sv, ActionID::PreferredMotion, set_motion(Web::CSS::PreferredMotion::NoPreference)));
m_motion_menu->items().first().get<NonnullRefPtr<Action>>()->set_checked(true);
m_debug_menu = Menu::create("Debug"sv);
m_inspect_menu = Menu::create("Inspect"sv);
m_view_source_action = Action::create("View Source"sv, ActionID::ViewSource, [this]() {
if (auto view = active_web_view(); view.has_value())
view->get_source();
});
m_inspect_menu->add_action(*m_view_source_action);
m_inspect_menu->add_action(Action::create("Open Task Manager"sv, ActionID::OpenProcessesPage, [this]() {
open_url_in_new_tab(URL::about_processes(), Web::HTML::ActivateTab::Yes);
}));
m_toggle_devtools_action = Action::create("Enable DevTools"sv, ActionID::ToggleDevTools, [this]() {
if (auto result = toggle_devtools_enabled(); result.is_error())
display_error_dialog(MUST(String::formatted("Unable to start DevTools: {}", result.error())));
});
m_inspect_menu->add_action(*m_toggle_devtools_action);
m_debug_menu = Menu::create("Debug"sv);
m_debug_menu->add_action(Action::create("Dump Session History Tree"sv, ActionID::DumpSessionHistoryTree, debug_request("dump-session-history"sv)));
m_debug_menu->add_action(Action::create("Dump DOM Tree"sv, ActionID::DumpDOMTree, debug_request("dump-dom-tree"sv)));
m_debug_menu->add_action(Action::create("Dump Layout Tree"sv, ActionID::DumpLayoutTree, debug_request("dump-layout-tree"sv)));

View File

@ -81,10 +81,7 @@ public:
Action& select_all_action() { return *m_select_all_action; }
Action& open_about_page_action() { return *m_open_about_page_action; }
Action& open_processes_page_action() { return *m_open_processes_page_action; }
Action& open_settings_page_action() { return *m_open_settings_page_action; }
Action& toggle_devtools_action() { return *m_toggle_devtools_action; }
Action& view_source_action() { return *m_view_source_action; }
Menu& zoom_menu() { return *m_zoom_menu; }
Action& reset_zoom_action() { return *m_reset_zoom_action; }
@ -92,6 +89,10 @@ public:
Menu& color_scheme_menu() { return *m_color_scheme_menu; }
Menu& contrast_menu() { return *m_contrast_menu; }
Menu& motion_menu() { return *m_motion_menu; }
Menu& inspect_menu() { return *m_inspect_menu; }
Action& view_source_action() { return *m_view_source_action; }
Menu& debug_menu() { return *m_debug_menu; }
void apply_view_options(Badge<ViewImplementation>, ViewImplementation&);
@ -187,10 +188,7 @@ private:
RefPtr<Action> m_select_all_action;
RefPtr<Action> m_open_about_page_action;
RefPtr<Action> m_open_processes_page_action;
RefPtr<Action> m_open_settings_page_action;
RefPtr<Action> m_toggle_devtools_action;
RefPtr<Action> m_view_source_action;
RefPtr<Menu> m_zoom_menu;
RefPtr<Action> m_reset_zoom_action;
@ -204,6 +202,10 @@ private:
RefPtr<Menu> m_motion_menu;
Web::CSS::PreferredMotion m_motion { Web::CSS::PreferredMotion::Auto };
RefPtr<Menu> m_inspect_menu;
RefPtr<Action> m_view_source_action;
RefPtr<Action> m_toggle_devtools_action;
RefPtr<Menu> m_debug_menu;
RefPtr<Action> m_show_line_box_borders_action;
RefPtr<Action> m_enable_scripting_action;

View File

@ -356,13 +356,10 @@
- (NSMenuItem*)createInspectMenu
{
auto* menu = [[NSMenuItem alloc] init];
auto* submenu = [[NSMenu alloc] initWithTitle:@"Inspect"];
[submenu addItem:Ladybird::create_application_menu_item(WebView::Application::the().view_source_action())];
[submenu addItem:Ladybird::create_application_menu_item(WebView::Application::the().toggle_devtools_action())];
[submenu addItem:Ladybird::create_application_menu_item(WebView::Application::the().open_processes_page_action())];
auto* submenu = Ladybird::create_application_menu(WebView::Application::the().inspect_menu());
[menu setSubmenu:submenu];
return menu;
}

View File

@ -199,10 +199,8 @@ BrowserWindow::BrowserWindow(Vector<URL::URL> const& initial_urls, IsPopupWindow
Settings::the()->set_show_menubar(checked);
});
auto* inspect_menu = m_hamburger_menu->addMenu("&Inspect");
inspect_menu->addAction(create_application_action(*inspect_menu, Application::the().view_source_action()));
inspect_menu->addAction(create_application_action(*inspect_menu, Application::the().toggle_devtools_action()));
inspect_menu->addAction(create_application_action(*inspect_menu, Application::the().open_processes_page_action()));
auto* inspect_menu = create_application_menu(*m_hamburger_menu, Application::the().inspect_menu());
m_hamburger_menu->addMenu(inspect_menu);
menuBar()->addMenu(inspect_menu);
auto* debug_menu = create_application_menu(*m_hamburger_menu, Application::the().debug_menu());