mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 20:27:35 +00:00
LibGUI: Make Menu::add_recent_files_list() infallible
This commit is contained in:
parent
f2faf2767f
commit
676ef0cc3d
11 changed files with 20 additions and 21 deletions
|
@ -739,7 +739,7 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
file_menu->add_action(*m_save_action);
|
file_menu->add_action(*m_save_action);
|
||||||
file_menu->add_action(*m_save_as_action);
|
file_menu->add_action(*m_save_as_action);
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
TRY(file_menu->add_recent_files_list([this](auto& action) {
|
file_menu->add_recent_files_list([this](auto& action) {
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(this->window(), action.text());
|
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(this->window(), action.text());
|
||||||
|
@ -748,7 +748,7 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
auto file = response.release_value();
|
auto file = response.release_value();
|
||||||
if (auto result = open_file(file.filename(), file.release_stream()); result.is_error())
|
if (auto result = open_file(file.filename(), file.release_stream()); result.is_error())
|
||||||
show_error(result.release_error(), "Opening"sv, file.filename());
|
show_error(result.release_error(), "Opening"sv, file.filename());
|
||||||
}));
|
});
|
||||||
file_menu->add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -418,7 +418,7 @@ ErrorOr<void> HexEditorWidget::initialize_menubar(GUI::Window& window)
|
||||||
file_menu->add_action(*m_save_action);
|
file_menu->add_action(*m_save_action);
|
||||||
file_menu->add_action(*m_save_as_action);
|
file_menu->add_action(*m_save_as_action);
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
auto path = action.text();
|
auto path = action.text();
|
||||||
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, path);
|
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, path);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
|
@ -426,7 +426,7 @@ ErrorOr<void> HexEditorWidget::initialize_menubar(GUI::Window& window)
|
||||||
|
|
||||||
auto file = response.release_value();
|
auto file = response.release_value();
|
||||||
open_file(file.filename(), file.release_stream());
|
open_file(file.filename(), file.release_stream());
|
||||||
}));
|
});
|
||||||
file_menu->add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -311,7 +311,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
file_menu->add_action(delete_action);
|
file_menu->add_action(delete_action);
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
|
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
auto path = action.text();
|
auto path = action.text();
|
||||||
auto result = FileSystemAccessClient::Client::the().request_file_read_only_approved(window, path);
|
auto result = FileSystemAccessClient::Client::the().request_file_read_only_approved(window, path);
|
||||||
if (result.is_error())
|
if (result.is_error())
|
||||||
|
@ -319,7 +319,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
|
|
||||||
auto value = result.release_value();
|
auto value = result.release_value();
|
||||||
widget->open_file(value.filename(), value.stream());
|
widget->open_file(value.filename(), value.stream());
|
||||||
}));
|
});
|
||||||
|
|
||||||
file_menu->add_action(quit_action);
|
file_menu->add_action(quit_action);
|
||||||
|
|
||||||
|
|
|
@ -221,11 +221,11 @@ ErrorOr<void> PDFViewerWidget::initialize_menubar(GUI::Window& window)
|
||||||
open_file(response.value().filename(), response.value().release_stream());
|
open_file(response.value().filename(), response.value().release_stream());
|
||||||
}));
|
}));
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, action.text());
|
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, action.text());
|
||||||
if (!response.is_error())
|
if (!response.is_error())
|
||||||
open_file(response.value().filename(), response.value().release_stream());
|
open_file(response.value().filename(), response.value().release_stream());
|
||||||
}));
|
});
|
||||||
file_menu->add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
||||||
GUI::Application::the()->quit();
|
GUI::Application::the()->quit();
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -271,13 +271,13 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
|
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
|
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
auto path = action.text();
|
auto path = action.text();
|
||||||
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, path);
|
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, path);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
open_image(response.release_value());
|
open_image(response.release_value());
|
||||||
}));
|
});
|
||||||
|
|
||||||
m_close_image_action = GUI::Action::create("&Close Image", { Mod_Ctrl, Key_W }, g_icon_bag.close_image, [&](auto&) {
|
m_close_image_action = GUI::Action::create("&Close Image", { Mod_Ctrl, Key_W }, g_icon_bag.close_image, [&](auto&) {
|
||||||
auto* active_widget = m_tab_widget->active_widget();
|
auto* active_widget = m_tab_widget->active_widget();
|
||||||
|
|
|
@ -726,7 +726,7 @@ ErrorOr<void> SpreadsheetWidget::initialize_menubar(GUI::Window& window)
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
file_menu->add_action(*m_import_action);
|
file_menu->add_action(*m_import_action);
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -734,7 +734,7 @@ ErrorOr<void> SpreadsheetWidget::initialize_menubar(GUI::Window& window)
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
load_file(response.value().filename(), response.value().stream());
|
load_file(response.value().filename(), response.value().stream());
|
||||||
}));
|
});
|
||||||
file_menu->add_action(*m_quit_action);
|
file_menu->add_action(*m_quit_action);
|
||||||
|
|
||||||
auto edit_menu = TRY(window.try_add_menu("&Edit"_string));
|
auto edit_menu = TRY(window.try_add_menu("&Edit"_string));
|
||||||
|
|
|
@ -374,7 +374,7 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
file_menu->add_action(*m_open_folder_action);
|
file_menu->add_action(*m_open_folder_action);
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
|
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
if (editor().document().is_modified()) {
|
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());
|
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)
|
if (save_document_first_result == GUI::Dialog::ExecResult::Yes)
|
||||||
|
@ -389,7 +389,7 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
|
|
||||||
if (auto result = read_file(response.value().filename(), response.value().stream()); result.is_error())
|
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);
|
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&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -287,7 +287,7 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
}));
|
}));
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
|
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
if (request_close() == GUI::Window::CloseRequestDecision::StayOpen)
|
if (request_close() == GUI::Window::CloseRequestDecision::StayOpen)
|
||||||
return;
|
return;
|
||||||
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, action.text());
|
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, action.text());
|
||||||
|
@ -298,7 +298,7 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Can't open file named {}: {}", response.value().filename(), load_from_file_result.error()));
|
GUI::MessageBox::show_error(&window, DeprecatedString::formatted("Can't open file named {}: {}", response.value().filename(), load_from_file_result.error()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}));
|
});
|
||||||
|
|
||||||
file_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) {
|
||||||
if (request_close() == GUI::Window::CloseRequestDecision::Close)
|
if (request_close() == GUI::Window::CloseRequestDecision::Close)
|
||||||
|
|
|
@ -192,14 +192,14 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
file_menu->add_action(*m_save_as_action);
|
file_menu->add_action(*m_save_as_action);
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
|
|
||||||
TRY(file_menu->add_recent_files_list([&](auto& action) {
|
file_menu->add_recent_files_list([&](auto& action) {
|
||||||
if (request_close() == GUI::Window::CloseRequestDecision::StayOpen)
|
if (request_close() == GUI::Window::CloseRequestDecision::StayOpen)
|
||||||
return;
|
return;
|
||||||
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, action.text());
|
auto response = FileSystemAccessClient::Client::the().request_file_read_only_approved(&window, action.text());
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
load_file(response.release_value());
|
load_file(response.release_value());
|
||||||
}));
|
});
|
||||||
|
|
||||||
file_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) {
|
||||||
if (window.on_close_request() == GUI::Window::CloseRequestDecision::Close)
|
if (window.on_close_request() == GUI::Window::CloseRequestDecision::Close)
|
||||||
|
|
|
@ -224,7 +224,7 @@ void Menu::realize_menu_item(MenuItem& item, int item_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> Menu::add_recent_files_list(Function<void(Action&)> callback)
|
void Menu::add_recent_files_list(Function<void(Action&)> callback)
|
||||||
{
|
{
|
||||||
m_recent_files_callback = move(callback);
|
m_recent_files_callback = move(callback);
|
||||||
|
|
||||||
|
@ -245,7 +245,6 @@ ErrorOr<void> Menu::add_recent_files_list(Function<void(Action&)> callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
add_separator();
|
add_separator();
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ public:
|
||||||
[[nodiscard]] NonnullRefPtr<Menu> add_submenu(String name);
|
[[nodiscard]] NonnullRefPtr<Menu> add_submenu(String name);
|
||||||
void remove_all_actions();
|
void remove_all_actions();
|
||||||
|
|
||||||
ErrorOr<void> add_recent_files_list(Function<void(Action&)>);
|
void add_recent_files_list(Function<void(Action&)>);
|
||||||
|
|
||||||
void popup(Gfx::IntPoint screen_position, RefPtr<Action> const& default_action = nullptr, Gfx::IntRect const& button_rect = {});
|
void popup(Gfx::IntPoint screen_position, RefPtr<Action> const& default_action = nullptr, Gfx::IntRect const& button_rect = {});
|
||||||
void dismiss();
|
void dismiss();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue