summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2023-02-06 18:44:11 +0100
committerAndreas Kling <kling@serenityos.org>2023-02-28 14:39:32 +0100
commit5f2351579623572913c7bfc5243890f718519f14 (patch)
tree2c0c161bec70ed119179e000f4fc930a2fb9d93b
parent544366ff2a1d8a0f91965cf67009b3ebc43215d6 (diff)
downloadserenity-5f2351579623572913c7bfc5243890f718519f14.zip
TextEditor: Add list of recently open files to the File menu :^)
-rw-r--r--Userland/Applications/TextEditor/MainWidget.cpp20
-rw-r--r--Userland/Applications/TextEditor/main.cpp2
2 files changed, 22 insertions, 0 deletions
diff --git a/Userland/Applications/TextEditor/MainWidget.cpp b/Userland/Applications/TextEditor/MainWidget.cpp
index a95a47bad6..5b5334a812 100644
--- a/Userland/Applications/TextEditor/MainWidget.cpp
+++ b/Userland/Applications/TextEditor/MainWidget.cpp
@@ -295,6 +295,7 @@ MainWidget::MainWidget()
}
set_path(file.filename());
+ GUI::Application::the()->set_most_recently_open_file(file.filename());
dbgln("Wrote document to {}", file.filename());
});
@@ -374,6 +375,24 @@ void MainWidget::initialize_menubar(GUI::Window& window)
file_menu.add_separator();
file_menu.add_action(*m_open_folder_action);
file_menu.add_separator();
+
+ // FIXME: Propagate errors.
+ (void)file_menu.add_recent_files_list([&](auto& action) {
+ if (editor().document().is_modified()) {
+ auto save_document_first_result = GUI::MessageBox::ask_about_unsaved_changes(&window, m_path, editor().document().undo_stack().last_unmodified_timestamp());
+ if (save_document_first_result == GUI::Dialog::ExecResult::Yes)
+ m_save_action->activate();
+ if (save_document_first_result != GUI::Dialog::ExecResult::No && editor().document().is_modified())
+ return;
+ }
+
+ auto response = FileSystemAccessClient::Client::the().request_file(&window, action.text(), Core::File::OpenMode::Read);
+ if (response.is_error())
+ return;
+
+ if (auto result = read_file(response.value().filename(), response.value().stream()); result.is_error())
+ GUI::MessageBox::show(&window, "Unable to open file.\n"sv, "Error"sv, GUI::MessageBox::Type::Error);
+ });
file_menu.add_action(GUI::CommonActions::make_quit_action([this](auto&) {
if (!request_close())
return;
@@ -750,6 +769,7 @@ ErrorOr<void> MainWidget::read_file(String const& filename, Core::File& file)
{
m_editor->set_text(TRY(file.read_until_eof()));
set_path(filename);
+ GUI::Application::the()->set_most_recently_open_file(filename);
m_editor->set_focus(true);
return {};
}
diff --git a/Userland/Applications/TextEditor/main.cpp b/Userland/Applications/TextEditor/main.cpp
index 211917b652..9fb5fb3fd9 100644
--- a/Userland/Applications/TextEditor/main.cpp
+++ b/Userland/Applications/TextEditor/main.cpp
@@ -24,6 +24,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
Config::pledge_domain("TextEditor");
+ app->set_config_domain(TRY(String::from_utf8("TextEditor"sv)));
+
auto preview_mode = "auto"sv;
char const* file_to_edit = nullptr;
Core::ArgsParser parser;