Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2008-06-16 17:52:59 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2008-06-16 17:52:59 (GMT)
commit31a1e800e5d6b24d8833ba28746b7ff6f2fbe6a9 (patch)
tree3ac4adda52e613740fb1b2c31b56d5d60d8f86f6 /shell
parent17f37a4bdb3e37586121edebd9e48cb24340b677 (diff)
Do not crash opening documents with no pages and show a warning message in
2008-06-16 Carlos Garcia Campos <carlosgc@gnome.org> * backend/pdf/ev-poppler.cc: (pdf_document_get_info): * shell/ev-sidebar-thumbnails.c: (ev_sidebar_thumbnails_set_loading_icon), (ev_sidebar_thumbnails_refresh): * shell/ev-window.c: (ev_window_error_message), (ev_window_warning_message), (ev_window_refresh_window_thumbnail), (ev_window_set_document): Do not crash opening documents with no pages and show a warning message in the message area. Fixes bugs #537574 and #171588. svn path=/trunk/; revision=3052
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-sidebar-thumbnails.c6
-rw-r--r--shell/ev-window.c35
2 files changed, 34 insertions, 7 deletions
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
index 25b1b83..74b4ab7 100644
--- a/shell/ev-sidebar-thumbnails.c
+++ b/shell/ev-sidebar-thumbnails.c
@@ -403,7 +403,8 @@ ev_sidebar_thumbnails_set_loading_icon (EvSidebarThumbnails *sidebar_thumbnails)
if (sidebar_thumbnails->priv->loading_icon)
g_object_unref (sidebar_thumbnails->priv->loading_icon);
- if (sidebar_thumbnails->priv->document) {
+ if (sidebar_thumbnails->priv->document &&
+ sidebar_thumbnails->priv->n_pages > 0) {
gint width, height;
/* We get the dimensions of the first page so that we can make a blank
@@ -434,7 +435,8 @@ ev_sidebar_thumbnails_refresh (EvSidebarThumbnails *sidebar_thumbnails,
sidebar_thumbnails->priv->rotation = rotation;
ev_sidebar_thumbnails_set_loading_icon (sidebar_thumbnails);
- if (sidebar_thumbnails->priv->document == NULL)
+ if (sidebar_thumbnails->priv->document == NULL ||
+ sidebar_thumbnails->priv->n_pages <= 0)
return;
ev_sidebar_thumbnails_clear_model (sidebar_thumbnails);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index dd2947f..81efe3d 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -631,9 +631,9 @@ ev_window_set_message_area (EvWindow *window,
}
static void
-ev_window_error_message_response_cb (EvMessageArea *area,
- gint response_id,
- EvWindow *window)
+ev_window_message_area_response_cb (EvMessageArea *area,
+ gint response_id,
+ EvWindow *window)
{
ev_window_set_message_area (window, NULL);
}
@@ -654,7 +654,28 @@ ev_window_error_message (GtkWindow *window, const gchar *msg, GError *error)
if (error)
ev_message_area_set_secondary_text (EV_MESSAGE_AREA (area), error->message);
g_signal_connect (area, "response",
- G_CALLBACK (ev_window_error_message_response_cb),
+ G_CALLBACK (ev_window_message_area_response_cb),
+ window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (EV_WINDOW (window), area);
+}
+
+static void
+ev_window_warning_message (GtkWindow *window, const gchar *msg)
+{
+ GtkWidget *area;
+
+ if (EV_WINDOW (window)->priv->message_area)
+ return;
+
+ area = ev_message_area_new (GTK_MESSAGE_WARNING,
+ msg,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CANCEL,
+ NULL);
+
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_message_area_response_cb),
window);
gtk_widget_show (area);
ev_window_set_message_area (EV_WINDOW (window), area);
@@ -1085,7 +1106,8 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window, int rotation)
gdouble scale;
EvDocument *document = ev_window->priv->document;
- if (!EV_IS_DOCUMENT_THUMBNAILS (document)) {
+ if (!EV_IS_DOCUMENT_THUMBNAILS (document) ||
+ ev_page_cache_get_n_pages (ev_window->priv->page_cache) <= 0) {
return;
}
@@ -1170,6 +1192,9 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document)
if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) > 0) {
ev_view_set_document (view, document);
+ } else {
+ ev_window_warning_message (GTK_WINDOW (ev_window),
+ _("The document contains no pages"));
}
g_idle_add ((GSourceFunc)ev_window_setup_document, ev_window);