diff options
Diffstat (limited to 'Userland/Libraries/LibGUI/Menu.cpp')
-rw-r--r-- | Userland/Libraries/LibGUI/Menu.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Userland/Libraries/LibGUI/Menu.cpp b/Userland/Libraries/LibGUI/Menu.cpp index d57141a68c..3a5869264e 100644 --- a/Userland/Libraries/LibGUI/Menu.cpp +++ b/Userland/Libraries/LibGUI/Menu.cpp @@ -9,6 +9,7 @@ #include <AK/IDAllocator.h> #include <LibGUI/Action.h> #include <LibGUI/ActionGroup.h> +#include <LibGUI/Application.h> #include <LibGUI/ConnectionToWindowServer.h> #include <LibGUI/Menu.h> #include <LibGUI/MenuItem.h> @@ -217,4 +218,28 @@ void Menu::realize_menu_item(MenuItem& item, int item_id) } } +ErrorOr<void> Menu::add_recent_files_list(Function<void(Action&)> callback) +{ + m_recent_files_callback = move(callback); + + Vector<NonnullRefPtr<GUI::Action>> recent_file_actions; + + for (size_t i = 0; i < GUI::Application::max_recently_open_files(); ++i) { + recent_file_actions.append(GUI::Action::create("", [&](auto& action) { m_recent_files_callback(action); })); + } + + recent_file_actions.append(GUI::Action::create("(No recently open files)", nullptr)); + recent_file_actions.last()->set_enabled(false); + + auto* app = GUI::Application::the(); + app->register_recent_file_actions({}, recent_file_actions); + + for (auto& action : recent_file_actions) { + TRY(try_add_action(action)); + } + + TRY(try_add_separator()); + return {}; +} + } |