evince r3052 - in trunk: . backend/pdf shell
- From: carlosgc svn gnome org
- To: svn-commits-list gnome org
- Subject: evince r3052 - in trunk: . backend/pdf shell
- Date: Mon, 16 Jun 2008 17:53:00 +0000 (UTC)
Author: carlosgc
Date: Mon Jun 16 17:52:59 2008
New Revision: 3052
URL: http://svn.gnome.org/viewvc/evince?rev=3052&view=rev
Log:
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.
Modified:
trunk/ChangeLog
trunk/backend/pdf/ev-poppler.cc
trunk/shell/ev-sidebar-thumbnails.c
trunk/shell/ev-window.c
Modified: trunk/backend/pdf/ev-poppler.cc
==============================================================================
--- trunk/backend/pdf/ev-poppler.cc (original)
+++ trunk/backend/pdf/ev-poppler.cc Mon Jun 16 17:52:59 2008
@@ -590,15 +590,20 @@
"linearized", &(info->linearized),
NULL);
- page = ev_document_get_page (document, 0);
- ev_document_get_page_size (document, page,
- &(info->paper_width),
- &(info->paper_height));
- g_object_unref (page);
+ info->n_pages = ev_document_get_n_pages (document);
- // Convert to mm.
- info->paper_width = info->paper_width / 72.0f * 25.4f;
- info->paper_height = info->paper_height / 72.0f * 25.4f;
+ if (info->n_pages > 0) {
+ page = ev_document_get_page (document, 0);
+ ev_document_get_page_size (document, page,
+ &(info->paper_width),
+ &(info->paper_height));
+ g_object_unref (page);
+
+
+ // Convert to mm.
+ info->paper_width = info->paper_width / 72.0f * 25.4f;
+ info->paper_height = info->paper_height / 72.0f * 25.4f;
+ }
switch (layout) {
case POPPLER_PAGE_LAYOUT_SINGLE_PAGE:
@@ -678,8 +683,6 @@
info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_ADD_NOTES;
}
- info->n_pages = ev_document_get_n_pages (document);
-
if (ev_document_security_has_document_security (EV_DOCUMENT_SECURITY (document))) {
/* translators: this is the document security state */
info->security = g_strdup (_("Yes"));
Modified: trunk/shell/ev-sidebar-thumbnails.c
==============================================================================
--- trunk/shell/ev-sidebar-thumbnails.c (original)
+++ trunk/shell/ev-sidebar-thumbnails.c Mon Jun 16 17:52:59 2008
@@ -403,7 +403,8 @@
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 @@
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);
Modified: trunk/shell/ev-window.c
==============================================================================
--- trunk/shell/ev-window.c (original)
+++ trunk/shell/ev-window.c Mon Jun 16 17:52:59 2008
@@ -631,9 +631,9 @@
}
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 @@
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 @@
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 @@
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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]