Browse Source

Userland: Add GUI::Window::add_menu() and use it everywhere

Applications previously had to create a GUI::Menubar object, add menus
to it, and then call GUI::Window::set_menubar().

This patch introduces GUI::Window::add_menu() which creates the menubar
automatically and adds items to it. Application code becomes slightly
simpler as a result. :^)
Andreas Kling 4 years ago
parent
commit
687a12d7fb
58 changed files with 187 additions and 311 deletions
  1. 3 5
      Userland/Applications/3DFileViewer/main.cpp
  2. 7 11
      Userland/Applications/Browser/BrowserWindow.cpp
  3. 3 6
      Userland/Applications/Calculator/main.cpp
  4. 3 5
      Userland/Applications/Calendar/main.cpp
  5. 5 9
      Userland/Applications/FileManager/main.cpp
  6. 6 6
      Userland/Applications/FontEditor/FontEditor.cpp
  7. 1 1
      Userland/Applications/FontEditor/FontEditor.h
  8. 1 3
      Userland/Applications/FontEditor/main.cpp
  9. 3 7
      Userland/Applications/Help/main.cpp
  10. 10 10
      Userland/Applications/HexEditor/HexEditorWidget.cpp
  11. 1 1
      Userland/Applications/HexEditor/HexEditorWidget.h
  12. 1 3
      Userland/Applications/HexEditor/main.cpp
  13. 4 7
      Userland/Applications/IRCClient/IRCAppWindow.cpp
  14. 5 9
      Userland/Applications/ImageViewer/main.cpp
  15. 2 6
      Userland/Applications/KeyboardMapper/main.cpp
  16. 2 4
      Userland/Applications/KeyboardSettings/main.cpp
  17. 3 5
      Userland/Applications/Magnifier/main.cpp
  18. 5 5
      Userland/Applications/PDFViewer/PDFViewerWidget.cpp
  19. 1 1
      Userland/Applications/PDFViewer/PDFViewerWidget.h
  20. 2 3
      Userland/Applications/PDFViewer/main.cpp
  21. 3 7
      Userland/Applications/Piano/main.cpp
  22. 7 10
      Userland/Applications/PixelPaint/main.cpp
  23. 5 9
      Userland/Applications/SoundPlayer/main.cpp
  24. 2 6
      Userland/Applications/SpaceAnalyzer/main.cpp
  25. 3 6
      Userland/Applications/Spreadsheet/main.cpp
  26. 3 6
      Userland/Applications/SystemMonitor/main.cpp
  27. 4 8
      Userland/Applications/Terminal/main.cpp
  28. 7 7
      Userland/Applications/TextEditor/MainWidget.cpp
  29. 1 1
      Userland/Applications/TextEditor/MainWidget.h
  30. 1 5
      Userland/Applications/TextEditor/main.cpp
  31. 2 4
      Userland/Applications/ThemeEditor/main.cpp
  32. 2 4
      Userland/Demos/Cube/Cube.cpp
  33. 2 4
      Userland/Demos/Eyes/main.cpp
  34. 1 3
      Userland/Demos/Fire/Fire.cpp
  35. 1 3
      Userland/Demos/LibGfxDemo/main.cpp
  36. 1 3
      Userland/Demos/LibGfxScaleDemo/main.cpp
  37. 1 3
      Userland/Demos/Mandelbrot/Mandelbrot.cpp
  38. 2 4
      Userland/Demos/Mouse/main.cpp
  39. 2 5
      Userland/Demos/WidgetGallery/main.cpp
  40. 20 20
      Userland/DevTools/HackStudio/HackStudioWidget.cpp
  41. 7 7
      Userland/DevTools/HackStudio/HackStudioWidget.h
  42. 1 3
      Userland/DevTools/HackStudio/main.cpp
  43. 2 5
      Userland/DevTools/Inspector/main.cpp
  44. 3 5
      Userland/DevTools/Playground/main.cpp
  45. 3 5
      Userland/DevTools/Profiler/main.cpp
  46. 2 6
      Userland/Games/2048/main.cpp
  47. 2 6
      Userland/Games/Breakout/main.cpp
  48. 4 7
      Userland/Games/Chess/main.cpp
  49. 2 5
      Userland/Games/FlappyBug/main.cpp
  50. 2 5
      Userland/Games/GameOfLife/main.cpp
  51. 2 4
      Userland/Games/Hearts/main.cpp
  52. 3 7
      Userland/Games/Minesweeper/main.cpp
  53. 2 6
      Userland/Games/Pong/main.cpp
  54. 2 6
      Userland/Games/Snake/main.cpp
  55. 2 4
      Userland/Games/Solitaire/main.cpp
  56. 2 5
      Userland/Games/Spider/main.cpp
  57. 7 0
      Userland/Libraries/LibGUI/Window.cpp
  58. 1 0
      Userland/Libraries/LibGUI/Window.h

+ 3 - 5
Userland/Applications/3DFileViewer/main.cpp

@@ -206,8 +206,7 @@ int main(int argc, char** argv)
     window->set_double_buffering_enabled(true);
     auto& widget = window->set_main_widget<GLContextWidget>();
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
 
     auto load_model = [&](StringView const& filename) {
         if (widget.load(filename)) {
@@ -229,7 +228,7 @@ int main(int argc, char** argv)
         app->quit();
     }));
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
     view_menu.add_action(GUI::CommonActions::make_fullscreen_action([&](auto&) {
         window->set_fullscreen(!window->is_fullscreen());
     }));
@@ -281,10 +280,9 @@ int main(int argc, char** argv)
 
     normal_rotation_action->set_checked(true);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("3D File Viewer", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
 
     auto filename = argc > 1 ? argv[1] : "/home/anon/Documents/3D Models/teapot.obj";

+ 7 - 11
Userland/Applications/Browser/BrowserWindow.cpp

@@ -123,9 +123,7 @@ BrowserWindow::~BrowserWindow()
 
 void BrowserWindow::build_menus()
 {
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = add_menu("&File");
     file_menu.add_action(WindowActions::the().create_new_tab_action());
 
     auto close_tab_action = GUI::Action::create(
@@ -141,7 +139,7 @@ void BrowserWindow::build_menus()
         GUI::Application::the()->quit();
     }));
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = add_menu("&View");
     view_menu.add_action(WindowActions::the().show_bookmarks_bar_action());
     view_menu.add_separator();
     view_menu.add_action(GUI::CommonActions::make_fullscreen_action(
@@ -169,7 +167,7 @@ void BrowserWindow::build_menus()
     m_reload_action = GUI::CommonActions::make_reload_action([this](auto&) { active_tab().reload(); }, this);
     m_reload_action->set_status_tip("Reload current page");
 
-    auto& go_menu = menubar->add_menu("&Go");
+    auto& go_menu = add_menu("&Go");
     go_menu.add_action(*m_go_back_action);
     go_menu.add_action(*m_go_forward_action);
     go_menu.add_action(*m_go_home_action);
@@ -235,7 +233,7 @@ void BrowserWindow::build_menus()
         this);
     m_inspect_dom_tree_action->set_status_tip("Open DOM inspector window for this page");
 
-    auto& inspect_menu = menubar->add_menu("&Inspect");
+    auto& inspect_menu = add_menu("&Inspect");
     inspect_menu.add_action(*m_view_source_action);
     inspect_menu.add_action(*m_inspect_dom_tree_action);
 
@@ -276,7 +274,7 @@ void BrowserWindow::build_menus()
     js_console_action->set_status_tip("Open JavaScript console for this page");
     inspect_menu.add_action(js_console_action);
 
-    auto& settings_menu = menubar->add_menu("&Settings");
+    auto& settings_menu = add_menu("&Settings");
 
     m_change_homepage_action = GUI::Action::create(
         "Set Homepage URL", [this](auto&) {
@@ -362,7 +360,7 @@ void BrowserWindow::build_menus()
         custom_search_engine_action->set_status_tip(g_search_engine);
     }
 
-    auto& debug_menu = menubar->add_menu("&Debug");
+    auto& debug_menu = add_menu("&Debug");
     debug_menu.add_action(GUI::Action::create(
         "Dump &DOM Tree", [this](auto&) {
             auto& tab = active_tab();
@@ -490,10 +488,8 @@ void BrowserWindow::build_menus()
     spoof_user_agent_menu.add_action(custom_user_agent);
     m_user_agent_spoof_actions.add_action(custom_user_agent);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = add_menu("&Help");
     help_menu.add_action(WindowActions::the().about_action());
-
-    set_menubar(move(menubar));
 }
 
 GUI::TabWidget& BrowserWindow::tab_widget()

+ 3 - 6
Userland/Applications/Calculator/main.cpp

@@ -49,14 +49,12 @@ int main(int argc, char** argv)
     window->show();
     window->set_icon(app_icon.bitmap_for_size(16));
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
     edit_menu.add_action(GUI::CommonActions::make_copy_action([&](auto&) {
         GUI::Clipboard::the().set_plain_text(widget.get_entry());
     }));
@@ -70,8 +68,7 @@ int main(int argc, char** argv)
         }
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Calculator", app_icon, window));
-    window->set_menubar(move(menubar));
     return app->exec();
 }

+ 3 - 5
Userland/Applications/Calendar/main.cpp

@@ -126,8 +126,7 @@ int main(int argc, char** argv)
         view_month_action->set_checked(true);
     };
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::Action::create("&Add Event", { Mod_Ctrl | Mod_Shift, Key_E }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/add-event.png"),
         [&](const GUI::Action&) {
             AddEventDialog::show(calendar->selected_date(), window);
@@ -139,14 +138,13 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
     view_menu.add_action(*view_month_action);
     view_menu.add_action(*view_year_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Calendar", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
     app->exec();
 }

+ 5 - 9
Userland/Applications/FileManager/main.cpp

@@ -842,9 +842,7 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
         refresh_tree_view();
     });
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(mkdir_action);
     file_menu.add_action(touch_action);
     file_menu.add_action(focus_dependent_delete_action);
@@ -856,7 +854,7 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
     edit_menu.add_action(cut_action);
     edit_menu.add_action(copy_action);
     edit_menu.add_action(paste_action);
@@ -874,7 +872,7 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
     directory_view.set_should_show_dotfiles(show_dotfiles);
     action_show_dotfiles->set_checked(show_dotfiles);
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
     auto& layout_menu = view_menu.add_submenu("&Layout");
     layout_menu.add_action(*layout_toolbar_action);
     layout_menu.add_action(*layout_location_action);
@@ -897,7 +895,7 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
         location_textbox.set_focus(true);
     });
 
-    auto& go_menu = menubar->add_menu("&Go");
+    auto& go_menu = window->add_menu("&Go");
     go_menu.add_action(go_back_action);
     go_menu.add_action(go_forward_action);
     go_menu.add_action(open_parent_directory_action);
@@ -906,11 +904,9 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
     go_menu.add_separator();
     go_menu.add_action(directory_view.open_terminal_action());
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("File Manager", GUI::Icon::default_icon("app-file-manager"), window));
 
-    window->set_menubar(menubar);
-
     main_toolbar.add_action(go_back_action);
     main_toolbar.add_action(go_forward_action);
     main_toolbar.add_action(open_parent_directory_action);

+ 6 - 6
Userland/Applications/FontEditor/FontEditor.cpp

@@ -533,9 +533,9 @@ void FontEditorWidget::initialize(const String& path, RefPtr<Gfx::BitmapFont>&&
         on_initialize();
 }
 
-void FontEditorWidget::initialize_menubar(GUI::Menubar& menubar)
+void FontEditorWidget::initialize_menubar(GUI::Window& window)
 {
-    auto& file_menu = menubar.add_menu("&File");
+    auto& file_menu = window.add_menu("&File");
     file_menu.add_action(*m_new_action);
     file_menu.add_action(*m_open_action);
     file_menu.add_action(*m_save_action);
@@ -547,7 +547,7 @@ void FontEditorWidget::initialize_menubar(GUI::Menubar& menubar)
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar.add_menu("&Edit");
+    auto& edit_menu = window.add_menu("&Edit");
     edit_menu.add_action(*m_undo_action);
     edit_menu.add_action(*m_redo_action);
     edit_menu.add_separator();
@@ -556,7 +556,7 @@ void FontEditorWidget::initialize_menubar(GUI::Menubar& menubar)
     edit_menu.add_action(*m_paste_action);
     edit_menu.add_action(*m_delete_action);
 
-    auto& view_menu = menubar.add_menu("&View");
+    auto& view_menu = window.add_menu("&View");
     view_menu.add_action(*m_open_preview_action);
     view_menu.add_separator();
     view_menu.add_action(*m_show_metadata_action);
@@ -566,11 +566,11 @@ void FontEditorWidget::initialize_menubar(GUI::Menubar& menubar)
     scale_menu.add_action(*m_scale_ten_action);
     scale_menu.add_action(*m_scale_fifteen_action);
 
-    auto& help_menu = menubar.add_menu("&Help");
+    auto& help_menu = window.add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/FontEditor.md"), "/bin/Help");
     }));
-    help_menu.add_action(GUI::CommonActions::make_about_action("Font Editor", GUI::Icon::default_icon("app-font-editor"), window()));
+    help_menu.add_action(GUI::CommonActions::make_about_action("Font Editor", GUI::Icon::default_icon("app-font-editor"), &window));
 }
 
 bool FontEditorWidget::save_as(const String& path)

+ 1 - 1
Userland/Applications/FontEditor/FontEditor.h

@@ -27,7 +27,7 @@ public:
     const String& path() { return m_path; }
     const Gfx::BitmapFont& edited_font() { return *m_edited_font; }
     void initialize(const String& path, RefPtr<Gfx::BitmapFont>&&);
-    void initialize_menubar(GUI::Menubar&);
+    void initialize_menubar(GUI::Window&);
 
     bool is_showing_font_metadata() { return m_font_metadata; }
     void set_show_font_metadata(bool b);

+ 1 - 3
Userland/Applications/FontEditor/main.cpp

@@ -78,9 +78,7 @@ int main(int argc, char** argv)
     auto& font_editor = window->set_main_widget<FontEditorWidget>(path, move(edited_font));
     font_editor.update_title();
 
-    auto menubar = GUI::Menubar::construct();
-    font_editor.initialize_menubar(menubar);
-    window->set_menubar(move(menubar));
+    font_editor.initialize_menubar(*window);
 
     window->on_close_request = [&]() -> GUI::Window::CloseRequestDecision {
         if (font_editor.request_close())

+ 3 - 7
Userland/Applications/Help/main.cpp

@@ -261,23 +261,19 @@ int main(int argc, char* argv[])
     toolbar.add_action(*go_forward_action);
     toolbar.add_action(*go_home_action);
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
         GUI::Application::the()->quit();
     }));
 
-    auto& go_menu = menubar->add_menu("&Go");
+    auto& go_menu = window->add_menu("&Go");
     go_menu.add_action(*go_back_action);
     go_menu.add_action(*go_forward_action);
     go_menu.add_action(*go_home_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Help", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     auto context_menu = GUI::Menu::construct();
     context_menu->add_action(*go_back_action);
     context_menu->add_action(*go_forward_action);

+ 10 - 10
Userland/Applications/HexEditor/HexEditorWidget.cpp

@@ -209,9 +209,9 @@ HexEditorWidget::~HexEditorWidget()
 {
 }
 
-void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
+void HexEditorWidget::initialize_menubar(GUI::Window& window)
 {
-    auto& file_menu = menubar.add_menu("&File");
+    auto& file_menu = window.add_menu("&File");
     file_menu.add_action(*m_new_action);
     file_menu.add_action(*m_open_action);
     file_menu.add_action(*m_save_action);
@@ -223,14 +223,14 @@ void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar.add_menu("&Edit");
+    auto& edit_menu = window.add_menu("&Edit");
     edit_menu.add_action(GUI::CommonActions::make_select_all_action([this](auto&) {
         m_editor->select_all();
         m_editor->update();
     }));
     edit_menu.add_action(GUI::Action::create("Fill &Selection...", { Mod_Ctrl, Key_B }, [&](const GUI::Action&) {
         String value;
-        if (GUI::InputBox::show(window(), value, "Fill byte (hex):", "Fill Selection") == GUI::InputBox::ExecOK && !value.is_empty()) {
+        if (GUI::InputBox::show(&window, value, "Fill byte (hex):", "Fill Selection") == GUI::InputBox::ExecOK && !value.is_empty()) {
             auto fill_byte = strtol(value.characters(), nullptr, 16);
             m_editor->fill_selection(fill_byte);
         }
@@ -249,13 +249,13 @@ void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
     edit_menu.add_action(*m_find_action);
     edit_menu.add_action(GUI::Action::create("Find &Next", { Mod_None, Key_F3 }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find-next.png"), [&](const GUI::Action&) {
         if (m_search_text.is_empty() || m_search_buffer.is_empty()) {
-            GUI::MessageBox::show(window(), "Nothing to search for", "Not found", GUI::MessageBox::Type::Warning);
+            GUI::MessageBox::show(&window, "Nothing to search for", "Not found", GUI::MessageBox::Type::Warning);
             return;
         }
 
         auto result = m_editor->find_and_highlight(m_search_buffer, last_found_index());
         if (!result) {
-            GUI::MessageBox::show(window(), String::formatted("No more matches for \"{}\" found in this file", m_search_text), "Not found", GUI::MessageBox::Type::Warning);
+            GUI::MessageBox::show(&window, String::formatted("No more matches for \"{}\" found in this file", m_search_text), "Not found", GUI::MessageBox::Type::Warning);
             return;
         }
         m_editor->update();
@@ -269,7 +269,7 @@ void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
         m_search_results->update();
 
         if (matches.is_empty()) {
-            GUI::MessageBox::show(window(), "No strings found in this file", "Not found", GUI::MessageBox::Type::Warning);
+            GUI::MessageBox::show(&window, "No strings found in this file", "Not found", GUI::MessageBox::Type::Warning);
             return;
         }
 
@@ -279,7 +279,7 @@ void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
     edit_menu.add_separator();
     edit_menu.add_action(*m_goto_offset_action);
 
-    auto& view_menu = menubar.add_menu("&View");
+    auto& view_menu = window.add_menu("&View");
 
     auto show_toolbar = m_config->read_bool_entry("Layout", "ShowToolbar", true);
     m_layout_toolbar_action->set_checked(show_toolbar);
@@ -307,8 +307,8 @@ void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
             action->set_checked(true);
     }
 
-    auto& help_menu = menubar.add_menu("&Help");
-    help_menu.add_action(GUI::CommonActions::make_about_action("Hex Editor", GUI::Icon::default_icon("app-hex-editor"), window()));
+    auto& help_menu = window.add_menu("&Help");
+    help_menu.add_action(GUI::CommonActions::make_about_action("Hex Editor", GUI::Icon::default_icon("app-hex-editor"), &window));
 }
 
 void HexEditorWidget::set_path(StringView const& path)

+ 1 - 1
Userland/Applications/HexEditor/HexEditorWidget.h

@@ -22,7 +22,7 @@ class HexEditorWidget final : public GUI::Widget {
 public:
     virtual ~HexEditorWidget() override;
     void open_file(const String& path);
-    void initialize_menubar(GUI::Menubar&);
+    void initialize_menubar(GUI::Window&);
     bool request_close();
 
 private:

+ 1 - 3
Userland/Applications/HexEditor/main.cpp

@@ -39,9 +39,7 @@ int main(int argc, char** argv)
         return GUI::Window::CloseRequestDecision::StayOpen;
     };
 
-    auto menubar = GUI::Menubar::construct();
-    hex_editor_widget.initialize_menubar(menubar);
-    window->set_menubar(menubar);
+    hex_editor_widget.initialize_menubar(*window);
     window->show();
     window->set_icon(app_icon.bitmap_for_size(16));
 

+ 4 - 7
Userland/Applications/IRCClient/IRCAppWindow.cpp

@@ -237,13 +237,12 @@ void IRCAppWindow::setup_actions()
 
 void IRCAppWindow::setup_menus()
 {
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
         GUI::Application::the()->quit();
     }));
 
-    auto& server_menu = menubar->add_menu("&Server");
+    auto& server_menu = add_menu("&Server");
     server_menu.add_action(*m_change_nick_action);
     server_menu.add_separator();
     server_menu.add_action(*m_join_action);
@@ -253,7 +252,7 @@ void IRCAppWindow::setup_menus()
     server_menu.add_action(*m_open_query_action);
     server_menu.add_action(*m_close_query_action);
 
-    auto& channel_menu = menubar->add_menu("&Channel");
+    auto& channel_menu = add_menu("&Channel");
     channel_menu.add_action(*m_change_topic_action);
     channel_menu.add_action(*m_invite_user_action);
     channel_menu.add_action(*m_banlist_action);
@@ -272,10 +271,8 @@ void IRCAppWindow::setup_menus()
     channel_menu.add_action(*m_cycle_channel_action);
     channel_menu.add_action(*m_part_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("IRC Client", GUI::Icon::default_icon("app-irc-client"), this));
-
-    set_menubar(move(menubar));
 }
 
 void IRCAppWindow::setup_widgets()

+ 5 - 9
Userland/Applications/ImageViewer/main.cpp

@@ -264,15 +264,13 @@ int main(int argc, char** argv)
     main_toolbar.add_action(reset_zoom_action);
     main_toolbar.add_action(zoom_out_action);
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(open_action);
     file_menu.add_action(delete_action);
     file_menu.add_separator();
     file_menu.add_action(quit_action);
 
-    auto& image_menu = menubar->add_menu("&Image");
+    auto& image_menu = window->add_menu("&Image");
     image_menu.add_action(rotate_left_action);
     image_menu.add_action(rotate_right_action);
     image_menu.add_action(vertical_flip_action);
@@ -280,13 +278,13 @@ int main(int argc, char** argv)
     image_menu.add_separator();
     image_menu.add_action(desktop_wallpaper_action);
 
-    auto& navigate_menu = menubar->add_menu("&Navigate");
+    auto& navigate_menu = window->add_menu("&Navigate");
     navigate_menu.add_action(go_first_action);
     navigate_menu.add_action(go_back_action);
     navigate_menu.add_action(go_forward_action);
     navigate_menu.add_action(go_last_action);
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
     view_menu.add_action(full_screen_action);
     view_menu.add_separator();
     view_menu.add_action(zoom_in_action);
@@ -295,14 +293,12 @@ int main(int argc, char** argv)
     view_menu.add_separator();
     view_menu.add_action(hide_show_toolbar_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/ImageViewer.md"), "/bin/Help");
     }));
     help_menu.add_action(GUI::CommonActions::make_about_action("Image Viewer", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     if (path != nullptr) {
         widget.load_from_file(path);
     } else {

+ 2 - 6
Userland/Applications/KeyboardMapper/main.cpp

@@ -82,19 +82,15 @@ int main(int argc, char** argv)
             app->quit();
         });
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(open_action);
     file_menu.add_action(save_action);
     file_menu.add_action(save_as_action);
     file_menu.add_separator();
     file_menu.add_action(quit_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Keyboard Mapper", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     return app->exec();
 }

+ 2 - 4
Userland/Applications/KeyboardSettings/main.cpp

@@ -183,14 +183,12 @@ int main(int argc, char** argv)
 
     auto menubar = GUI::Menubar::construct();
 
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(quit_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Keyboard Settings", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
 
     return app->exec();

+ 3 - 5
Userland/Applications/Magnifier/main.cpp

@@ -48,8 +48,7 @@ int main(int argc, char** argv)
     window->set_icon(app_icon.bitmap_for_size(16));
     auto& magnifier = window->set_main_widget<MagnifierWidget>();
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) {
         app->quit();
     }));
@@ -70,15 +69,14 @@ int main(int argc, char** argv)
     size_action_group->add_action(four_x_action);
     size_action_group->set_exclusive(true);
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
     view_menu.add_action(two_x_action);
     view_menu.add_action(four_x_action);
     two_x_action->set_checked(true);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Magnifier", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
 
     magnifier.track_cursor_globally();

+ 5 - 5
Userland/Applications/PDFViewer/PDFViewerWidget.cpp

@@ -35,11 +35,11 @@ PDFViewerWidget::PDFViewerWidget()
     };
 }
 
-void PDFViewerWidget::initialize_menubar(GUI::Menubar& menubar)
+void PDFViewerWidget::initialize_menubar(GUI::Window& window)
 {
-    auto& file_menu = menubar.add_menu("&File");
+    auto& file_menu = window.add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_open_action([&](auto&) {
-        Optional<String> open_path = GUI::FilePicker::get_open_filepath(window());
+        Optional<String> open_path = GUI::FilePicker::get_open_filepath(&window);
         if (open_path.has_value())
             open_file(open_path.value());
     }));
@@ -48,8 +48,8 @@ void PDFViewerWidget::initialize_menubar(GUI::Menubar& menubar)
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar.add_menu("&Help");
-    help_menu.add_action(GUI::CommonActions::make_about_action("PDF Viewer", GUI::Icon::default_icon("app-pdf-viewer"), window()));
+    auto& help_menu = window.add_menu("&Help");
+    help_menu.add_action(GUI::CommonActions::make_about_action("PDF Viewer", GUI::Icon::default_icon("app-pdf-viewer"), &window));
 }
 
 void PDFViewerWidget::create_toolbar()

+ 1 - 1
Userland/Applications/PDFViewer/PDFViewerWidget.h

@@ -21,7 +21,7 @@ class PDFViewerWidget final : public GUI::Widget {
 public:
     ~PDFViewerWidget() override = default;
 
-    void initialize_menubar(GUI::Menubar&);
+    void initialize_menubar(GUI::Window&);
     void create_toolbar();
     void open_file(const String& path);
 

+ 2 - 3
Userland/Applications/PDFViewer/main.cpp

@@ -21,9 +21,8 @@ int main(int argc, char** argv)
 
     auto& pdf_viewer_widget = window->set_main_widget<PDFViewerWidget>();
 
-    auto menubar = GUI::Menubar::construct();
-    pdf_viewer_widget.initialize_menubar(menubar);
-    window->set_menubar(menubar);
+    pdf_viewer_widget.initialize_menubar(*window);
+
     window->show();
     window->set_icon(app_icon.bitmap_for_size(16));
 

+ 3 - 7
Userland/Applications/Piano/main.cpp

@@ -60,9 +60,7 @@ int main(int argc, char** argv)
     });
     main_widget_updater->start();
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::Action::create("Export", { Mod_Ctrl, Key_E }, [&](const GUI::Action&) {
         save_path = GUI::FilePicker::get_save_filepath(window, "Untitled", "wav");
         if (!save_path.has_value())
@@ -81,13 +79,11 @@ int main(int argc, char** argv)
         return;
     }));
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
     main_widget.add_actions(edit_menu);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Piano", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     return app->exec();
 }

+ 7 - 10
Userland/Applications/PixelPaint/main.cpp

@@ -141,8 +141,7 @@ int main(int argc, char** argv)
         editor->image().set_path(save_path.value());
     });
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
 
     file_menu.add_action(new_image_action);
     file_menu.add_action(open_image_action);
@@ -182,7 +181,7 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
 
     auto copy_action = GUI::CommonActions::make_copy_action([&](auto&) {
         auto* editor = current_image_editor();
@@ -294,7 +293,7 @@ int main(int argc, char** argv)
         },
         window));
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
 
     auto zoom_in_action = GUI::CommonActions::make_zoom_in_action(
         [&](auto&) {
@@ -321,14 +320,14 @@ int main(int argc, char** argv)
     view_menu.add_action(zoom_out_action);
     view_menu.add_action(reset_zoom_action);
 
-    auto& tool_menu = menubar->add_menu("&Tool");
+    auto& tool_menu = window->add_menu("&Tool");
     toolbox.for_each_tool([&](auto& tool) {
         if (tool.action())
             tool_menu.add_action(*tool.action());
         return IterationDecision::Continue;
     });
 
-    auto& layer_menu = menubar->add_menu("&Layer");
+    auto& layer_menu = window->add_menu("&Layer");
     layer_menu.add_action(GUI::Action::create(
         "New &Layer...", { Mod_Ctrl | Mod_Shift, Key_N }, [&](auto&) {
             auto* editor = current_image_editor();
@@ -438,7 +437,7 @@ int main(int argc, char** argv)
         },
         window));
 
-    auto& filter_menu = menubar->add_menu("&Filter");
+    auto& filter_menu = window->add_menu("&Filter");
     auto& spatial_filters_menu = filter_menu.add_submenu("&Spatial");
 
     auto& edge_detect_submenu = spatial_filters_menu.add_submenu("&Edge Detect");
@@ -542,11 +541,9 @@ int main(int argc, char** argv)
         }
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Pixel Paint", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     auto& toolbar = *main_widget.find_descendant_of_type_named<GUI::Toolbar>("toolbar");
     toolbar.add_action(new_image_action);
     toolbar.add_action(open_image_action);

+ 5 - 9
Userland/Applications/SoundPlayer/main.cpp

@@ -51,11 +51,9 @@ int main(int argc, char** argv)
     window->set_title("Sound Player");
     window->set_icon(app_icon.bitmap_for_size(16));
 
-    auto menubar = GUI::Menubar::construct();
+    auto& file_menu = window->add_menu("&File");
 
-    auto& file_menu = menubar->add_menu("&File");
-
-    auto& playlist_menu = menubar->add_menu("Play&list");
+    auto& playlist_menu = window->add_menu("Play&list");
 
     String path = argv[1];
     // start in advanced view by default
@@ -94,7 +92,7 @@ int main(int argc, char** argv)
         app->quit();
     }));
 
-    auto& playback_menu = menubar->add_menu("&Playback");
+    auto& playback_menu = window->add_menu("&Playback");
 
     auto loop = GUI::Action::create_checkable("&Loop", { Mod_Ctrl, Key_R }, [&](auto& action) {
         player->set_looping_file(action.is_checked());
@@ -102,7 +100,7 @@ int main(int argc, char** argv)
 
     playback_menu.add_action(move(loop));
 
-    auto& visualization_menu = menubar->add_menu("&Visualization");
+    auto& visualization_menu = window->add_menu("&Visualization");
     Vector<NonnullRefPtr<GUI::Action>> visualization_checkmarks;
     GUI::Action* checked_vis = nullptr;
     auto uncheck_all_but = [&](GUI::Action& one) {for (auto& a : visualization_checkmarks) if (a != &one) a->set_checked(false); };
@@ -147,11 +145,9 @@ int main(int argc, char** argv)
     visualization_menu.add_action(none);
     visualization_checkmarks.append(none);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Sound Player", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
     return app->exec();
 }

+ 2 - 6
Userland/Applications/SpaceAnalyzer/main.cpp

@@ -271,9 +271,7 @@ int main(int argc, char* argv[])
     auto& treemapwidget = *mainwidget.find_descendant_of_type_named<SpaceAnalyzer::TreeMapWidget>("tree_map");
     auto& statusbar = *mainwidget.find_descendant_of_type_named<GUI::Statusbar>("statusbar");
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::Action::create("&Analyze", [&](auto&) {
         analyze(tree, treemapwidget, statusbar);
     }));
@@ -282,11 +280,9 @@ int main(int argc, char* argv[])
         app->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action(APP_NAME, app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     // Configure the nodes context menu.
     auto open_folder_action = GUI::Action::create("Open Folder", { Mod_Ctrl, Key_O }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/open.png"), [&](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol(get_absolute_path_to_selected_node(treemapwidget)));

+ 3 - 6
Userland/Applications/Spreadsheet/main.cpp

@@ -85,8 +85,7 @@ int main(int argc, char* argv[])
     if (filename)
         spreadsheet_widget.load(filename);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
 
     file_menu.add_action(GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"), [&](auto&) {
         spreadsheet_widget.add_sheet();
@@ -138,7 +137,7 @@ int main(int argc, char* argv[])
         return GUI::Window::CloseRequestDecision::StayOpen;
     };
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
 
     auto clipboard_action = [&](bool is_cut) {
         /// text/x-spreadsheet-data:
@@ -228,7 +227,7 @@ int main(int argc, char* argv[])
     },
         window));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
 
     help_menu.add_action(GUI::Action::create(
         "&Functions Help", [&](auto&) {
@@ -245,8 +244,6 @@ int main(int argc, char* argv[])
 
     help_menu.add_action(GUI::CommonActions::make_about_action("Spreadsheet", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
 
     return app->exec();

+ 3 - 6
Userland/Applications/SystemMonitor/main.cpp

@@ -309,8 +309,7 @@ int main(int argc, char** argv)
         },
         &process_table_view);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
         GUI::Application::the()->quit();
     }));
@@ -328,7 +327,7 @@ int main(int argc, char** argv)
             process_context_menu->popup(event.screen_position(), process_properties_action);
     };
 
-    auto& frequency_menu = menubar->add_menu("F&requency");
+    auto& frequency_menu = window->add_menu("F&requency");
     GUI::ActionGroup frequency_action_group;
     frequency_action_group.set_exclusive(true);
 
@@ -346,11 +345,9 @@ int main(int argc, char** argv)
     make_frequency_action(3, true);
     make_frequency_action(5);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("System Monitor", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     process_table_view.on_activation = [&](auto&) {
         if (process_properties_action->is_enabled())
             process_properties_action->activate();

+ 4 - 8
Userland/Applications/Terminal/main.cpp

@@ -377,9 +377,7 @@ int main(int argc, char** argv)
     terminal.context_menu().add_separator();
     terminal.context_menu().add_action(open_settings_action);
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::Action::create("Open New &Terminal", { Mod_Ctrl | Mod_Shift, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-terminal.png"), [&](auto&) {
         pid_t child;
         const char* argv[] = { "Terminal", nullptr };
@@ -398,7 +396,7 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
     edit_menu.add_action(terminal.copy_action());
     edit_menu.add_action(terminal.paste_action());
     edit_menu.add_separator();
@@ -410,7 +408,7 @@ int main(int argc, char** argv)
             find_window->move_to_front();
         }));
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
     view_menu.add_action(GUI::CommonActions::make_fullscreen_action([&](auto&) {
         window->set_fullscreen(!window->is_fullscreen());
     }));
@@ -418,14 +416,12 @@ int main(int argc, char** argv)
     view_menu.add_separator();
     view_menu.add_action(pick_font_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/Terminal.md"), "/bin/Help");
     }));
     help_menu.add_action(GUI::CommonActions::make_about_action("Terminal", app_icon, window));
 
-    window->set_menubar(menubar);
-
     window->on_close = [&]() {
         if (find_window)
             find_window->close();

+ 7 - 7
Userland/Applications/TextEditor/MainWidget.cpp

@@ -369,9 +369,9 @@ Web::OutOfProcessWebView& MainWidget::ensure_web_view()
     return *m_page_view;
 }
 
-void MainWidget::initialize_menubar(GUI::Menubar& menubar)
+void MainWidget::initialize_menubar(GUI::Window& window)
 {
-    auto& file_menu = menubar.add_menu("&File");
+    auto& file_menu = window.add_menu("&File");
     file_menu.add_action(*m_new_action);
     file_menu.add_action(*m_open_action);
     file_menu.add_action(*m_save_action);
@@ -383,7 +383,7 @@ void MainWidget::initialize_menubar(GUI::Menubar& menubar)
         GUI::Application::the()->quit();
     }));
 
-    auto& edit_menu = menubar.add_menu("&Edit");
+    auto& edit_menu = window.add_menu("&Edit");
     edit_menu.add_action(m_editor->undo_action());
     edit_menu.add_action(m_editor->redo_action());
     edit_menu.add_separator();
@@ -449,7 +449,7 @@ void MainWidget::initialize_menubar(GUI::Menubar& menubar)
     m_layout_ruler_action->set_checked(show_ruler);
     m_editor->set_ruler_visible(show_ruler);
 
-    auto& view_menu = menubar.add_menu("&View");
+    auto& view_menu = window.add_menu("&View");
     auto& layout_menu = view_menu.add_submenu("&Layout");
     layout_menu.add_action(*m_layout_toolbar_action);
     layout_menu.add_action(*m_layout_statusbar_action);
@@ -459,7 +459,7 @@ void MainWidget::initialize_menubar(GUI::Menubar& menubar)
 
     view_menu.add_action(GUI::Action::create("Editor &Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png"),
         [&](auto&) {
-            auto picker = GUI::FontPicker::construct(window(), &m_editor->font(), false);
+            auto picker = GUI::FontPicker::construct(&window, &m_editor->font(), false);
             if (picker->exec() == GUI::Dialog::ExecOK) {
                 dbgln("setting font {}", picker->font()->qualified_name());
                 m_editor->set_font(picker->font());
@@ -605,11 +605,11 @@ void MainWidget::initialize_menubar(GUI::Menubar& menubar)
     syntax_actions.add_action(*m_sql_highlight);
     syntax_menu.add_action(*m_sql_highlight);
 
-    auto& help_menu = menubar.add_menu("&Help");
+    auto& help_menu = window.add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/TextEditor.md"), "/bin/Help");
     }));
-    help_menu.add_action(GUI::CommonActions::make_about_action("Text Editor", GUI::Icon::default_icon("app-text-editor"), window()));
+    help_menu.add_action(GUI::CommonActions::make_about_action("Text Editor", GUI::Icon::default_icon("app-text-editor"), &window));
 }
 
 void MainWidget::set_path(StringView const& path)

+ 1 - 1
Userland/Applications/TextEditor/MainWidget.h

@@ -39,7 +39,7 @@ public:
     void set_auto_detect_preview_mode(bool value) { m_auto_detect_preview_mode = value; }
 
     void update_title();
-    void initialize_menubar(GUI::Menubar&);
+    void initialize_menubar(GUI::Window&);
 
 private:
     MainWidget();

+ 1 - 5
Userland/Applications/TextEditor/main.cpp

@@ -102,9 +102,7 @@ int main(int argc, char** argv)
         return 1;
     }
 
-    auto menubar = GUI::Menubar::construct();
-    text_widget.initialize_menubar(menubar);
-    window->set_menubar(menubar);
+    text_widget.initialize_menubar(*window);
 
     if (file_to_edit) {
         // A file name was passed, parse any possible line and column numbers included.
@@ -126,7 +124,5 @@ int main(int argc, char** argv)
     window->show();
     window->set_icon(app_icon.bitmap_for_size(16));
 
-    window->set_menubar(menubar);
-
     return app->exec();
 }

+ 2 - 4
Userland/Applications/ThemeEditor/main.cpp

@@ -76,12 +76,11 @@ int main(int argc, char** argv)
     Gfx::Palette preview_palette = app->palette();
 
     auto window = GUI::Window::construct();
-    auto menubar = GUI::Menubar::construct();
 
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Theme Editor", app_icon, window));
 
     auto& main_widget = window->set_main_widget<GUI::Widget>();
@@ -120,7 +119,6 @@ int main(int argc, char** argv)
 
     window->resize(480, 385);
     window->set_resizable(false);
-    window->set_menubar(menubar);
     window->show();
     window->set_title("Theme Editor");
     window->set_icon(app_icon.bitmap_for_size(16));

+ 2 - 4
Userland/Demos/Cube/Cube.cpp

@@ -241,8 +241,7 @@ int main(int argc, char** argv)
     auto app_icon = GUI::Icon::default_icon("app-cube");
     window->set_icon(app_icon.bitmap_for_size(16));
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     auto show_window_frame_action = GUI::Action::create_checkable("Show Window &Frame", [&](auto& action) {
         cube.set_show_window_frame(action.is_checked());
     });
@@ -252,9 +251,8 @@ int main(int argc, char** argv)
     file_menu.add_action(move(show_window_frame_action));
     file_menu.add_separator();
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Cube Demo", app_icon, window));
-    window->set_menubar(move(menubar));
 
     cube.on_context_menu_request = [&](auto& event) {
         file_menu.popup(event.screen_position());

+ 2 - 4
Userland/Demos/Eyes/main.cpp

@@ -79,14 +79,12 @@ int main(int argc, char* argv[])
 
     auto& eyes = window->set_main_widget<EyesWidget>(num_eyes, full_rows, extra_columns);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Eyes Demo", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
     eyes.track_cursor_globally();
 

+ 1 - 3
Userland/Demos/Fire/Fire.cpp

@@ -221,10 +221,8 @@ int main(int argc, char** argv)
     window->set_resizable(false);
     window->resize(FIRE_WIDTH * 2 + 4, FIRE_HEIGHT * 2 + 4);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
-    window->set_menubar(move(menubar));
 
     auto& fire = window->set_main_widget<Fire>();
 

+ 1 - 3
Userland/Demos/LibGfxDemo/main.cpp

@@ -207,10 +207,8 @@ int main(int argc, char** argv)
     window->set_resizable(false);
     window->resize(WIDTH, HEIGHT);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
-    window->set_menubar(move(menubar));
 
     auto app_icon = GUI::Icon::default_icon("app-libgfx-demo");
     window->set_icon(app_icon.bitmap_for_size(16));

+ 1 - 3
Userland/Demos/LibGfxScaleDemo/main.cpp

@@ -126,10 +126,8 @@ int main(int argc, char** argv)
     window->set_resizable(false);
     window->resize(WIDTH * 2, HEIGHT * 3);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
-    window->set_menubar(move(menubar));
 
     auto app_icon = GUI::Icon::default_icon("app-libgfx-demo");
     window->set_icon(app_icon.bitmap_for_size(16));

+ 1 - 3
Userland/Demos/Mandelbrot/Mandelbrot.cpp

@@ -262,8 +262,7 @@ int main(int argc, char** argv)
     window->resize(window->minimum_size() * 2);
     auto& mandelbrot = window->set_main_widget<Mandelbrot>();
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::Action::create("&Export...", { Mod_Ctrl | Mod_Shift, Key_S }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/save.png"),
         [&](GUI::Action&) {
             Optional<String> export_path = GUI::FilePicker::get_save_filepath(window, "untitled", "png");
@@ -273,7 +272,6 @@ int main(int argc, char** argv)
         }));
     file_menu.add_separator();
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
-    window->set_menubar(move(menubar));
     window->show();
 
     auto app_icon = GUI::Icon::default_icon("app-mandelbrot");

+ 2 - 4
Userland/Demos/Mouse/main.cpp

@@ -177,14 +177,12 @@ int main(int argc, char** argv)
     auto& main_widget = window->set_main_widget<MainFrame>();
     main_widget.set_fill_with_background_color(true);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Mouse Demo", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->set_resizable(false);
     window->show();
     return app->exec();

+ 2 - 5
Userland/Demos/WidgetGallery/main.cpp

@@ -55,15 +55,12 @@ int main(int argc, char** argv)
     window->set_icon(app_icon.bitmap_for_size(16));
     window->set_main_widget<GalleryWidget>();
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Widget Gallery", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
 
     return app->exec();

+ 20 - 20
Userland/DevTools/HackStudio/HackStudioWidget.cpp

@@ -922,9 +922,9 @@ void HackStudioWidget::create_project_tab(GUI::Widget& parent)
     };
 }
 
-void HackStudioWidget::create_file_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::create_file_menu(GUI::Window& window)
 {
-    auto& file_menu = menubar.add_menu("&File");
+    auto& file_menu = window.add_menu("&File");
     file_menu.add_action(*m_new_project_action);
     file_menu.add_action(*m_open_action);
     file_menu.add_action(*m_save_action);
@@ -934,16 +934,16 @@ void HackStudioWidget::create_file_menubar(GUI::Menubar& menubar)
     }));
 }
 
-void HackStudioWidget::create_project_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::create_project_menu(GUI::Window& window)
 {
-    auto& project_menu = menubar.add_menu("&Project");
+    auto& project_menu = window.add_menu("&Project");
     project_menu.add_action(*m_new_file_action);
     project_menu.add_action(*m_new_directory_action);
 }
 
-void HackStudioWidget::create_edit_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::create_edit_menu(GUI::Window& window)
 {
-    auto& edit_menu = menubar.add_menu("&Edit");
+    auto& edit_menu = window.add_menu("&Edit");
     edit_menu.add_action(GUI::Action::create("&Find in Files...", { Mod_Ctrl | Mod_Shift, Key_F }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png"), [this](auto&) {
         reveal_action_tab(*m_find_in_files_widget);
         m_find_in_files_widget->focus_textbox_and_select_all();
@@ -961,9 +961,9 @@ void HackStudioWidget::create_edit_menubar(GUI::Menubar& menubar)
     edit_menu.add_action(vim_emulation_setting_action);
 }
 
-void HackStudioWidget::create_build_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::create_build_menu(GUI::Window& window)
 {
-    auto& build_menu = menubar.add_menu("&Build");
+    auto& build_menu = window.add_menu("&Build");
     build_menu.add_action(*m_build_action);
     build_menu.add_separator();
     build_menu.add_action(*m_run_action);
@@ -972,7 +972,7 @@ void HackStudioWidget::create_build_menubar(GUI::Menubar& menubar)
     build_menu.add_action(*m_debug_action);
 }
 
-void HackStudioWidget::create_view_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::create_view_menu(GUI::Window& window)
 {
     auto hide_action_tabs_action = GUI::Action::create("&Hide Action Tabs", { Mod_Ctrl | Mod_Shift, Key_X }, [this](auto&) {
         hide_action_tabs();
@@ -981,7 +981,7 @@ void HackStudioWidget::create_view_menubar(GUI::Menubar& menubar)
         m_locator->open();
     });
 
-    auto& view_menu = menubar.add_menu("&View");
+    auto& view_menu = window.add_menu("&View");
     view_menu.add_action(hide_action_tabs_action);
     view_menu.add_action(open_locator_action);
     view_menu.add_separator();
@@ -1018,10 +1018,10 @@ void HackStudioWidget::create_view_menubar(GUI::Menubar& menubar)
     view_menu.add_action(*m_remove_current_terminal_action);
 }
 
-void HackStudioWidget::create_help_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::create_help_menu(GUI::Window& window)
 {
-    auto& help_menu = menubar.add_menu("&Help");
-    help_menu.add_action(GUI::CommonActions::make_about_action("Hack Studio", GUI::Icon::default_icon("app-hack-studio"), window()));
+    auto& help_menu = window.add_menu("&Help");
+    help_menu.add_action(GUI::CommonActions::make_about_action("Hack Studio", GUI::Icon::default_icon("app-hack-studio"), &window));
 }
 
 NonnullRefPtr<GUI::Action> HackStudioWidget::create_stop_action()
@@ -1039,14 +1039,14 @@ NonnullRefPtr<GUI::Action> HackStudioWidget::create_stop_action()
     return action;
 }
 
-void HackStudioWidget::initialize_menubar(GUI::Menubar& menubar)
+void HackStudioWidget::initialize_menubar(GUI::Window& window)
 {
-    create_file_menubar(menubar);
-    create_project_menubar(menubar);
-    create_edit_menubar(menubar);
-    create_build_menubar(menubar);
-    create_view_menubar(menubar);
-    create_help_menubar(menubar);
+    create_file_menu(window);
+    create_project_menu(window);
+    create_edit_menu(window);
+    create_build_menu(window);
+    create_view_menu(window);
+    create_help_menu(window);
 }
 
 void HackStudioWidget::update_statusbar()

+ 7 - 7
Userland/DevTools/HackStudio/HackStudioWidget.h

@@ -42,7 +42,7 @@ public:
     void set_current_editor_wrapper(RefPtr<EditorWrapper>);
 
     const String& active_file() const { return m_current_editor_wrapper->filename(); }
-    void initialize_menubar(GUI::Menubar&);
+    void initialize_menubar(GUI::Window&);
 
     Locator& locator()
     {
@@ -104,12 +104,12 @@ private:
     void create_open_files_view(GUI::Widget& parent);
     void create_toolbar(GUI::Widget& parent);
     void create_action_tab(GUI::Widget& parent);
-    void create_file_menubar(GUI::Menubar&);
-    void create_project_menubar(GUI::Menubar&);
-    void create_edit_menubar(GUI::Menubar&);
-    void create_build_menubar(GUI::Menubar&);
-    void create_view_menubar(GUI::Menubar&);
-    void create_help_menubar(GUI::Menubar&);
+    void create_file_menu(GUI::Window&);
+    void create_project_menu(GUI::Window&);
+    void create_edit_menu(GUI::Window&);
+    void create_build_menu(GUI::Window&);
+    void create_view_menu(GUI::Window&);
+    void create_help_menu(GUI::Window&);
     void create_project_tab(GUI::Widget& parent);
     void configure_project_tree_view();
 

+ 1 - 3
Userland/DevTools/HackStudio/main.cpp

@@ -66,9 +66,7 @@ int main(int argc, char** argv)
 
     s_window->set_title(String::formatted("{} - Hack Studio", s_hack_studio_widget->project().name()));
 
-    auto menubar = GUI::Menubar::construct();
-    s_hack_studio_widget->initialize_menubar(menubar);
-    s_window->set_menubar(menubar);
+    s_hack_studio_widget->initialize_menubar(*s_window);
 
     s_window->on_close_request = [&]() -> GUI::Window::CloseRequestDecision {
         s_hack_studio_widget->locator().close();

+ 2 - 5
Userland/DevTools/Inspector/main.cpp

@@ -113,12 +113,10 @@ int main(int argc, char** argv)
     window->resize(685, 500);
     window->set_icon(app_icon.bitmap_for_size(16));
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/Inspector.md"), "/bin/Help");
     }));
@@ -172,7 +170,6 @@ int main(int argc, char** argv)
         }
     };
 
-    window->set_menubar(move(menubar));
     window->show();
     remote_process.update();
 

+ 3 - 5
Userland/DevTools/Playground/main.cpp

@@ -156,8 +156,7 @@ int main(int argc, char** argv)
         update_title();
     };
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
 
     auto save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) {
         Optional<String> new_save_path = GUI::FilePicker::get_save_filepath(window, "Untitled", "gml");
@@ -223,7 +222,7 @@ int main(int argc, char** argv)
         app->quit();
     }));
 
-    auto& edit_menu = menubar->add_menu("&Edit");
+    auto& edit_menu = window->add_menu("&Edit");
     edit_menu.add_action(GUI::Action::create("&Format GML", { Mod_Ctrl | Mod_Shift, Key_I }, [&](auto&) {
         auto source = editor.text();
         GUI::GMLLexer lexer(source);
@@ -252,13 +251,12 @@ int main(int argc, char** argv)
         }
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/Playground.md"), "/bin/Help");
     }));
     help_menu.add_action(GUI::CommonActions::make_about_action("GML Playground", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->on_close_request = [&] {
         if (!window->is_modified())
             return GUI::Window::CloseRequestDecision::Close;

+ 3 - 5
Userland/DevTools/Profiler/main.cpp

@@ -191,11 +191,10 @@ int main(int argc, char** argv)
         statusbar.set_text(builder.to_string());
     };
 
-    auto menubar = GUI::Menubar::construct();
-    auto& file_menu = menubar->add_menu("&File");
+    auto& file_menu = window->add_menu("&File");
     file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& view_menu = menubar->add_menu("&View");
+    auto& view_menu = window->add_menu("&View");
 
     auto invert_action = GUI::Action::create_checkable("&Invert Tree", { Mod_Ctrl, Key_I }, [&](auto& action) {
         profile->set_inverted(action.is_checked());
@@ -219,13 +218,12 @@ int main(int argc, char** argv)
 
     view_menu.add_action(disassembly_action);
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_help_action([](auto&) {
         Desktop::Launcher::open(URL::create_with_file_protocol("/usr/share/man/man1/Profiler.md"), "/bin/Help");
     }));
     help_menu.add_action(GUI::CommonActions::make_about_action("Profiler", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
     return app->exec();
 }

+ 2 - 6
Userland/Games/2048/main.cpp

@@ -181,9 +181,7 @@ int main(int argc, char** argv)
         }
     };
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
         start_a_new_game();
@@ -212,11 +210,9 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("2048", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
 
     window->set_icon(app_icon.bitmap_for_size(16));

+ 2 - 6
Userland/Games/Breakout/main.cpp

@@ -47,9 +47,7 @@ int main(int argc, char** argv)
     auto& game = window->set_main_widget<Breakout::Game>();
     window->show();
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
     game_menu.add_action(GUI::Action::create_checkable("&Pause", { {}, Key_P }, [&](auto& action) {
         game.set_paused(action.is_checked());
     }));
@@ -60,10 +58,8 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Breakout", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     return app->exec();
 }

+ 4 - 7
Userland/Games/Chess/main.cpp

@@ -76,8 +76,7 @@ int main(int argc, char** argv)
     widget.set_coordinates(config->read_bool_entry("Style", "Coordinates", true));
     widget.set_show_available_moves(config->read_bool_entry("Style", "ShowAvailableMoves", true));
 
-    auto menubar = GUI::Menubar::construct();
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(GUI::Action::create("&Resign", { Mod_None, Key_F3 }, [&](auto&) {
         widget.resign();
@@ -131,7 +130,7 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& style_menu = menubar->add_menu("&Style");
+    auto& style_menu = window->add_menu("&Style");
     GUI::ActionGroup piece_set_action_group;
     piece_set_action_group.set_exclusive(true);
     auto& piece_set_menu = style_menu.add_submenu("&Piece Set");
@@ -189,7 +188,7 @@ int main(int argc, char** argv)
     show_available_moves_action->set_checked(widget.show_available_moves());
     style_menu.add_action(show_available_moves_action);
 
-    auto& engine_menu = menubar->add_menu("&Engine");
+    auto& engine_menu = window->add_menu("&Engine");
 
     GUI::ActionGroup engines_action_group;
     engines_action_group.set_exclusive(true);
@@ -210,11 +209,9 @@ int main(int argc, char** argv)
         engine_submenu.add_action(*action);
     }
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Chess", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
     widget.reset();
 

+ 2 - 5
Userland/Games/FlappyBug/main.cpp

@@ -68,17 +68,14 @@ int main(int argc, char** argv)
         return high_score;
     };
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
     game_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Flappy Bug", app_icon, window));
 
-    window->set_menubar(move(menubar));
     window->show();
 
     return app->exec();

+ 2 - 5
Userland/Games/GameOfLife/main.cpp

@@ -110,8 +110,7 @@ int main(int argc, char** argv)
     });
     main_toolbar.add_action(rotate_pattern_action);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(clear_board_action);
     game_menu.add_action(randomize_cells_action);
@@ -123,11 +122,9 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Game Of Life", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     board_widget.on_running_state_change = [&]() {
         if (board_widget.is_running()) {
             statusbar.set_text("Running...");

+ 2 - 4
Userland/Games/Hearts/main.cpp

@@ -94,8 +94,7 @@ int main(int argc, char** argv)
         GUI::MessageBox::show(window, "Settings have been successfully saved and will take effect in the next game.", "Settings Changed Successfully", GUI::MessageBox::Type::Information);
     };
 
-    auto menubar = GUI::Menubar::construct();
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
         game.setup(player_name);
@@ -107,12 +106,11 @@ int main(int argc, char** argv)
     game_menu.add_separator();
     game_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Hearts", app_icon, window));
 
     window->set_resizable(false);
     window->resize(Hearts::Game::width, Hearts::Game::height + statusbar.max_height());
-    window->set_menubar(move(menubar));
     window->set_icon(app_icon.bitmap_for_size(16));
     window->show();
     game.setup(player_name);

+ 3 - 7
Userland/Games/Minesweeper/main.cpp

@@ -103,9 +103,7 @@ int main(int argc, char** argv)
         window->resize(size);
     });
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
         field.reset();
@@ -125,7 +123,7 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& difficulty_menu = menubar->add_menu("&Difficulty");
+    auto& difficulty_menu = window->add_menu("&Difficulty");
     difficulty_menu.add_action(GUI::Action::create("&Beginner", { Mod_Ctrl, Key_B }, [&](auto&) {
         field.set_field_size(9, 9, 10);
     }));
@@ -139,11 +137,9 @@ int main(int argc, char** argv)
         field.set_field_size(32, 60, 350);
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Minesweeper", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
 
     window->set_icon(app_icon.bitmap_for_size(16));

+ 2 - 6
Userland/Games/Pong/main.cpp

@@ -55,17 +55,13 @@ int main(int argc, char** argv)
     window->set_resizable(false);
     window->show();
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
     game_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Pong", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     return app->exec();
 }

+ 2 - 6
Userland/Games/Snake/main.cpp

@@ -58,9 +58,7 @@ int main(int argc, char** argv)
 
     auto& game = window->set_main_widget<SnakeGame>();
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
         game.reset();
@@ -70,11 +68,9 @@ int main(int argc, char** argv)
         GUI::Application::the()->quit();
     }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Snake", app_icon, window));
 
-    window->set_menubar(move(menubar));
-
     window->show();
 
     window->set_icon(app_icon.bitmap_for_size(16));

+ 2 - 4
Userland/Games/Solitaire/main.cpp

@@ -171,8 +171,7 @@ int main(int argc, char** argv)
     three_card_draw_action->set_status_tip("Draw three cards at a time");
     draw_setting_actions.add_action(three_card_draw_action);
 
-    auto menubar = GUI::Menubar::construct();
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
 
     game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
         game.setup(mode);
@@ -189,12 +188,11 @@ int main(int argc, char** argv)
     game_menu.add_separator();
     game_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Solitaire", app_icon, window));
 
     window->set_resizable(false);
     window->resize(Solitaire::Game::width, Solitaire::Game::height + statusbar.max_height());
-    window->set_menubar(move(menubar));
     window->set_icon(app_icon.bitmap_for_size(16));
     window->show();
 

+ 2 - 5
Userland/Games/Spider/main.cpp

@@ -163,9 +163,7 @@ int main(int argc, char** argv)
     two_suit_action->set_checked(mode == Spider::Mode::TwoSuit);
     suit_actions.add_action(two_suit_action);
 
-    auto menubar = GUI::Menubar::construct();
-
-    auto& game_menu = menubar->add_menu("&Game");
+    auto& game_menu = window->add_menu("&Game");
     game_menu.add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, [&](auto&) {
         game.setup(mode);
     }));
@@ -175,12 +173,11 @@ int main(int argc, char** argv)
     game_menu.add_separator();
     game_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }));
 
-    auto& help_menu = menubar->add_menu("&Help");
+    auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Spider", app_icon, window));
 
     window->set_resizable(false);
     window->resize(Spider::Game::width, Spider::Game::height + statusbar.max_height());
-    window->set_menubar(move(menubar));
     window->set_icon(app_icon.bitmap_for_size(16));
     window->show();
 

+ 7 - 0
Userland/Libraries/LibGUI/Window.cpp

@@ -1130,6 +1130,13 @@ Gfx::Bitmap* Window::back_bitmap()
     return m_back_store ? &m_back_store->bitmap() : nullptr;
 }
 
+Menu& Window::add_menu(String name)
+{
+    if (!m_menubar)
+        set_menubar(GUI::Menubar::construct());
+    return m_menubar->add_menu(move(name));
+}
+
 void Window::set_menubar(RefPtr<Menubar> menubar)
 {
     if (m_menubar == menubar)

+ 1 - 0
Userland/Libraries/LibGUI/Window.h

@@ -200,6 +200,7 @@ public:
 
     void did_disable_focused_widget(Badge<Widget>);
 
+    Menu& add_menu(String name);
     void set_menubar(RefPtr<Menubar>);
 
 protected: