summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGUI/Menu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibGUI/Menu.cpp')
-rw-r--r--Userland/Libraries/LibGUI/Menu.cpp25
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 {};
+}
+
}