1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:38:12 +00:00

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.
This commit is contained in:
Julian Offenhäuser 2022-10-27 19:49:16 +02:00 committed by Andreas Kling
parent ef30073127
commit e782d03f96

View file

@ -88,19 +88,17 @@ void PDFViewer::paint_event(GUI::PaintEvent& event)
if (!m_document)
return;
auto handle_error = [&]<typename T>(PDF::PDFErrorOr<T> 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();