diff --git a/Applications/Browser/CMakeLists.txt b/Applications/Browser/CMakeLists.txt index d1132f8a6d..76c783e0d8 100644 --- a/Applications/Browser/CMakeLists.txt +++ b/Applications/Browser/CMakeLists.txt @@ -10,4 +10,4 @@ set(SOURCES ) serenity_bin(Browser) -target_link_libraries(Browser LibWeb LibProtocol LibGUI) +target_link_libraries(Browser LibWeb LibProtocol LibGUI LibDesktop) diff --git a/Applications/Browser/DownloadWidget.cpp b/Applications/Browser/DownloadWidget.cpp index 2aabd5242f..cea6ef7ede 100644 --- a/Applications/Browser/DownloadWidget.cpp +++ b/Applications/Browser/DownloadWidget.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -162,8 +163,14 @@ void DownloadWidget::did_finish(bool success, const ByteBuffer& payload, RefPtr< (void)payload_storage; (void)response_headers; dbg() << "did_finish, success=" << success; - m_cancel_button->set_enabled(false); + m_close_button->set_enabled(true); + m_cancel_button->set_text("Open in Folder"); + m_cancel_button->on_click = [this](auto) { + Desktop::Launcher::open(URL::create_with_file_protocol(Core::StandardPaths::downloads_directory())); + window()->close(); + }; + m_cancel_button->update(); if (!success) { GUI::MessageBox::show(String::format("Download failed for some reason"), "Download failed", GUI::MessageBox::Type::Error, GUI::MessageBox::InputType::OK, window()); diff --git a/Applications/Browser/main.cpp b/Applications/Browser/main.cpp index ab93e88c9a..fc2eebfa4e 100644 --- a/Applications/Browser/main.cpp +++ b/Applications/Browser/main.cpp @@ -64,7 +64,8 @@ int main(int argc, char** argv) // Connect to the ProtocolServer immediately so we can drop the "unix" pledge. Web::ResourceLoader::the(); - if (pledge("stdio shared_buffer accept cpath rpath wpath", nullptr) < 0) { + // FIXME: Once there is a standalone Download Manager, we can drop the "unix" pledge. + if (pledge("stdio shared_buffer accept unix cpath rpath wpath", nullptr) < 0) { perror("pledge"); return 1; } @@ -84,6 +85,12 @@ int main(int argc, char** argv) return 1; } + // FIXME: Once there is a standalone Download Manager, we don't need to unveil this + if (unveil("/tmp/portal/launch", "rw") < 0) { + perror("unveil"); + return 1; + } + unveil(nullptr, nullptr); auto m_config = Core::ConfigFile::get_for_app("Browser");