diff options
author | Carlos 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) |
commit | 31a1e800e5d6b24d8833ba28746b7ff6f2fbe6a9 (patch) | |
tree | 3ac4adda52e613740fb1b2c31b56d5d60d8f86f6 /shell/ev-window.c | |
parent | 17f37a4bdb3e37586121edebd9e48cb24340b677 (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/ev-window.c')
-rw-r--r-- | shell/ev-window.c | 35 |
1 files changed, 30 insertions, 5 deletions
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); |