From e782d03f96afe96654b1d76c1207e2e77248422b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= Date: Thu, 27 Oct 2022 19:49:16 +0200 Subject: [PATCH] PDFViewer: Invalidate document when a page fails to load This fixes an issue where we would show an error message on every subsequent paint event, making it impossible to close or use the application further. Some more architectural work is needed if we want to invalidate the sidebar entries as well. --- Userland/Applications/PDFViewer/PDFViewer.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Userland/Applications/PDFViewer/PDFViewer.cpp b/Userland/Applications/PDFViewer/PDFViewer.cpp index 1125c2bf48..f69383a7cf 100644 --- a/Userland/Applications/PDFViewer/PDFViewer.cpp +++ b/Userland/Applications/PDFViewer/PDFViewer.cpp @@ -88,19 +88,17 @@ void PDFViewer::paint_event(GUI::PaintEvent& event) if (!m_document) return; - auto handle_error = [&](PDF::PDFErrorOr maybe_error) { - if (maybe_error.is_error()) { - auto error = maybe_error.release_error(); - GUI::MessageBox::show_error(nullptr, String::formatted("Error rendering page:\n{}", error.message())); - return true; - } - return false; + auto handle_error = [&](PDF::Error& error) { + GUI::MessageBox::show_error(nullptr, String::formatted("Failed to render page:\n{}", error.message())); + m_document.clear(); }; if (m_page_view_mode == PageViewMode::Single) { auto maybe_page = get_rendered_page(m_current_page_index); - if (handle_error(maybe_page)) + if (maybe_page.is_error()) { + handle_error(maybe_page.error()); return; + } auto page = maybe_page.release_value(); set_content_size(page->size()); @@ -137,8 +135,10 @@ void PDFViewer::paint_event(GUI::PaintEvent& event) for (size_t page_index = first_page_index; page_index <= last_page_index; page_index++) { auto maybe_page = get_rendered_page(page_index); - if (handle_error(maybe_page)) + if (maybe_page.is_error()) { + handle_error(maybe_page.error()); return; + } auto page = maybe_page.release_value();