mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:57:35 +00:00
Userland: Filter out unsupported file types in open dialogs in more apps
This commit is contained in:
parent
27011cf55d
commit
8bd68198d6
10 changed files with 69 additions and 16 deletions
|
@ -378,7 +378,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
auto& file_menu = window->add_menu("&File"_short_string);
|
auto& file_menu = window->add_menu("&File"_short_string);
|
||||||
|
|
||||||
file_menu.add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
file_menu.add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(window);
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = { { GUI::FileTypeFilter { "Object Files", { { "obj" } } }, GUI::FileTypeFilter::all_files() } },
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(window, options);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -92,15 +92,17 @@ ErrorOr<size_t> CertificateStoreModel::add(Vector<Certificate> const& certificat
|
||||||
|
|
||||||
ErrorOr<void> CertificateStoreWidget::import_pem()
|
ErrorOr<void> CertificateStoreWidget::import_pem()
|
||||||
{
|
{
|
||||||
auto fsac_result = FileSystemAccessClient::Client::the().open_file(window(), { .window_title = "Import"sv });
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.window_title = "Import"sv,
|
||||||
|
.allowed_file_types = Vector {
|
||||||
|
GUI::FileTypeFilter { "Certificate Files", { { "pem", "crt" } } },
|
||||||
|
},
|
||||||
|
};
|
||||||
|
auto fsac_result = FileSystemAccessClient::Client::the().open_file(window(), options);
|
||||||
if (fsac_result.is_error())
|
if (fsac_result.is_error())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
auto fsac_file = fsac_result.release_value();
|
auto fsac_file = fsac_result.release_value();
|
||||||
auto filename = fsac_file.filename();
|
|
||||||
if (!(filename.ends_with_bytes(".pem"sv) || filename.ends_with_bytes(".crt"sv)))
|
|
||||||
return Error::from_string_view("File is not a .pem or .crt file."sv);
|
|
||||||
|
|
||||||
auto data = TRY(fsac_file.release_stream()->read_until_eof());
|
auto data = TRY(fsac_file.release_stream()->read_until_eof());
|
||||||
auto count = TRY(m_root_ca_model->add(TRY(DefaultRootCACertificates::parse_pem_root_certificate_authorities(data))));
|
auto count = TRY(m_root_ca_model->add(TRY(DefaultRootCACertificates::parse_pem_root_certificate_authorities(data))));
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,11 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
// Actions
|
// Actions
|
||||||
auto open_action = GUI::CommonActions::make_open_action(
|
auto open_action = GUI::CommonActions::make_open_action(
|
||||||
[&](auto&) {
|
[&](auto&) {
|
||||||
auto result = FileSystemAccessClient::Client::the().open_file(window, { .window_title = "Open Image"sv });
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.window_title = "Open Image"sv,
|
||||||
|
.allowed_file_types = Vector { GUI::FileTypeFilter::image_files(), GUI::FileTypeFilter::all_files() },
|
||||||
|
};
|
||||||
|
auto result = FileSystemAccessClient::Client::the().open_file(window, options);
|
||||||
if (result.is_error())
|
if (result.is_error())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,13 @@ ErrorOr<void> PDFViewerWidget::initialize_menubar(GUI::Window& window)
|
||||||
{
|
{
|
||||||
auto file_menu = TRY(window.try_add_menu("&File"_short_string));
|
auto file_menu = TRY(window.try_add_menu("&File"_short_string));
|
||||||
TRY(file_menu->try_add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
TRY(file_menu->try_add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(&window);
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = Vector {
|
||||||
|
GUI::FileTypeFilter { "PDF Files", { { "pdf" } } },
|
||||||
|
GUI::FileTypeFilter::all_files(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(&window, options);
|
||||||
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());
|
||||||
})));
|
})));
|
||||||
|
|
|
@ -192,7 +192,9 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
});
|
});
|
||||||
|
|
||||||
m_open_image_action = GUI::CommonActions::make_open_action([&](auto&) {
|
m_open_image_action = GUI::CommonActions::make_open_action([&](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(&window);
|
auto image_files = GUI::FileTypeFilter::image_files();
|
||||||
|
image_files.extensions->append("pp");
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(&window, { .allowed_file_types = Vector { image_files, GUI::FileTypeFilter::all_files() } });
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
open_image(response.release_value());
|
open_image(response.release_value());
|
||||||
|
@ -455,7 +457,14 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
})));
|
})));
|
||||||
TRY(m_edit_menu->try_add_action(GUI::Action::create(
|
TRY(m_edit_menu->try_add_action(GUI::Action::create(
|
||||||
"&Load Color Palette...", g_icon_bag.load_color_palette, [&](auto&) {
|
"&Load Color Palette...", g_icon_bag.load_color_palette, [&](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(&window, { .window_title = "Load Color Palette"sv });
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.window_title = "Load Color Palette"sv,
|
||||||
|
.allowed_file_types = Vector {
|
||||||
|
{ "Palette Files", { { "palette" } } },
|
||||||
|
GUI::FileTypeFilter::all_files(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(&window, options);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,10 @@ ErrorOr<void> PresenterWidget::initialize_menubar()
|
||||||
// Set up the menu bar.
|
// Set up the menu bar.
|
||||||
auto file_menu = TRY(window->try_add_menu("&File"_short_string));
|
auto file_menu = TRY(window->try_add_menu("&File"_short_string));
|
||||||
auto open_action = GUI::CommonActions::make_open_action([this](auto&) {
|
auto open_action = GUI::CommonActions::make_open_action([this](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(this->window());
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = { { GUI::FileTypeFilter { "Presentation Files", { { "presenter" } } }, GUI::FileTypeFilter::all_files() } },
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(this->window(), options);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
this->set_file(response.value().filename());
|
this->set_file(response.value().filename());
|
||||||
|
|
|
@ -128,14 +128,26 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, Vector<NonnullR
|
||||||
if (!request_close())
|
if (!request_close())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(window());
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = Vector {
|
||||||
|
{ "Spreadsheets", { { "sheets", "csv" } } },
|
||||||
|
GUI::FileTypeFilter::all_files(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(window(), options);
|
||||||
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());
|
||||||
});
|
});
|
||||||
|
|
||||||
m_import_action = GUI::Action::create("Import Sheets...", [&](auto&) {
|
m_import_action = GUI::Action::create("Import Sheets...", [&](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(window());
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = Vector {
|
||||||
|
{ "Spreadsheets", { { "sheets", "csv" } } },
|
||||||
|
GUI::FileTypeFilter::all_files(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(window(), options);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -242,7 +242,12 @@ ErrorOr<void> MainWidget::initialize_menubar(GUI::Window& window)
|
||||||
TRY(file_menu->try_add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
TRY(file_menu->try_add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
||||||
if (request_close() == GUI::Window::CloseRequestDecision::StayOpen)
|
if (request_close() == GUI::Window::CloseRequestDecision::StayOpen)
|
||||||
return;
|
return;
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(&window, { .window_title = "Select Theme"sv, .path = "/res/themes"sv });
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.window_title = "Select Theme"sv,
|
||||||
|
.path = "/res/themes"sv,
|
||||||
|
.allowed_file_types = Vector { { "Theme Files", { { "ini" } } }, GUI::FileTypeFilter::all_files() },
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(&window, options);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
auto load_from_file_result = load_from_file(response.value().filename(), response.value().release_stream());
|
auto load_from_file_result = load_from_file(response.value().filename(), response.value().release_stream());
|
||||||
|
|
|
@ -384,7 +384,10 @@ ErrorOr<void> VideoPlayerWidget::initialize_menubar(GUI::Window& window)
|
||||||
// File menu
|
// File menu
|
||||||
auto file_menu = TRY(window.try_add_menu("&File"_short_string));
|
auto file_menu = TRY(window.try_add_menu("&File"_short_string));
|
||||||
TRY(file_menu->try_add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
TRY(file_menu->try_add_action(GUI::CommonActions::make_open_action([&](auto&) {
|
||||||
auto response = FileSystemAccessClient::Client::the().open_file(&window);
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = { { GUI::FileTypeFilter { "Video Files", { { "mkv", "webm" } } }, GUI::FileTypeFilter::all_files() } },
|
||||||
|
};
|
||||||
|
auto response = FileSystemAccessClient::Client::the().open_file(&window, options);
|
||||||
if (response.is_error())
|
if (response.is_error())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,13 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
TRY(game_menu->try_add_separator());
|
TRY(game_menu->try_add_separator());
|
||||||
|
|
||||||
TRY(game_menu->try_add_action(GUI::Action::create("&Import PGN...", { Mod_Ctrl, Key_O }, [&](auto&) {
|
TRY(game_menu->try_add_action(GUI::Action::create("&Import PGN...", { Mod_Ctrl, Key_O }, [&](auto&) {
|
||||||
auto result = FileSystemAccessClient::Client::the().open_file(window);
|
FileSystemAccessClient::OpenFileOptions options {
|
||||||
|
.allowed_file_types = Vector {
|
||||||
|
GUI::FileTypeFilter { "PGN Files", { { "pgn" } } },
|
||||||
|
GUI::FileTypeFilter::all_files(),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
auto result = FileSystemAccessClient::Client::the().open_file(window, options);
|
||||||
if (result.is_error())
|
if (result.is_error())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue