From 3fe3051453cad77a2964c96b53caf4e5a432b2fe Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Sun, 03 May 2009 11:35:39 +0000 Subject: [document] Fixes handling of broken documents Instead of aborting on assertion, we gracefully report that document is broken. Fixes GNOME bug #580886. --- (limited to 'shell') diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c index 08be12b..d86e6a5 100644 --- a/shell/ev-sidebar-thumbnails.c +++ b/shell/ev-sidebar-thumbnails.c @@ -662,9 +662,14 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage *sidebar_page, EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv; - g_return_if_fail (EV_IS_DOCUMENT_THUMBNAILS (document)); - priv->page_cache = ev_page_cache_get (document); + + if (!EV_IS_DOCUMENT_THUMBNAILS (document) || + ev_page_cache_get_n_pages (priv->page_cache) <= 0 || + ev_page_cache_check_dimensions (priv->page_cache)) { + return; + } + priv->document = document; priv->n_pages = ev_page_cache_get_n_pages (priv->page_cache); priv->loading_icons = g_hash_table_new_full (g_str_hash, diff --git a/shell/ev-window.c b/shell/ev-window.c index 5d99f66..bc7d151 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -992,10 +992,12 @@ setup_document_from_metadata (EvWindow *window) request_width = MIN (request_width, gdk_screen_get_width (screen)); request_height = MIN (request_width, gdk_screen_get_height (screen)); } - - gtk_window_resize (GTK_WINDOW (window), - request_width, - request_height); + + if (request_width > 0 && request_height > 0) { + gtk_window_resize (GTK_WINDOW (window), + request_width, + request_height); + } g_value_unset (&width_ratio); g_value_unset (&height_ratio); } @@ -1157,7 +1159,8 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window, int rotation) EvDocument *document = ev_window->priv->document; if (!EV_IS_DOCUMENT_THUMBNAILS (document) || - ev_page_cache_get_n_pages (ev_window->priv->page_cache) <= 0) { + ev_page_cache_get_n_pages (ev_window->priv->page_cache) <= 0 || + ev_page_cache_check_dimensions (ev_window->priv->page_cache)) { return; } @@ -1244,15 +1247,19 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) ev_window->priv->dest = NULL; } - if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) > 0) { - ev_view_set_document (view, document); - } else { + if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) <= 0) { ev_window_warning_message (ev_window, "%s", _("The document contains no pages")); + } else if (ev_page_cache_check_dimensions (ev_window->priv->page_cache)) { + ev_window_warning_message (ev_window, "%s", + _("The document contains only empty pages")); + } else { + ev_view_set_document (view, document); } if (ev_window->priv->setup_document_idle > 0) g_source_remove (ev_window->priv->setup_document_idle); + ev_window->priv->setup_document_idle = g_idle_add ((GSourceFunc)ev_window_setup_document, ev_window); } -- cgit v0.9.1