diff options
author | Tom Parker <palfrey@tevp.net> | 2007-01-25 09:37:16 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2007-01-25 09:37:16 (GMT) |
commit | bec5242aa2645d9a62d5971556de1348b02b535d (patch) | |
tree | 95ad801597e0adc68f2b4878b9d355314ce9bbdc | |
parent | 235b9896d5ea87eab157b46b4f00120c25949c00 (diff) |
Correctly handle impress document errors. Fixes nautilus crash in property
2007-01-25 Tom Parker <palfrey@tevp.net>
* backend/impress/impress-document.c: (impress_document_load),
(impress_document_finalize), (impress_document_init):
* properties/ev-properties-main.c: (ev_properties_get_pages):
Correctly handle impress document errors. Fixes nautilus
crash in property page #370491.
svn path=/trunk/; revision=2250
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | backend/impress/impress-document.c | 37 | ||||
-rw-r--r-- | properties/ev-properties-main.c | 3 |
3 files changed, 39 insertions, 10 deletions
@@ -1,3 +1,12 @@ +2007-01-25 Tom Parker <palfrey@tevp.net> + + * backend/impress/impress-document.c: (impress_document_load), + (impress_document_finalize), (impress_document_init): + * properties/ev-properties-main.c: (ev_properties_get_pages): + + Correctly handle impress document errors. Fixes nautilus + crash in property page #370491. + 2007-01-24 Carlos Garcia Campos <carlosgc@gnome.org> * shell/ev-job-queue.c: (handle_job), (search_for_jobs_unlocked), diff --git a/backend/impress/impress-document.c b/backend/impress/impress-document.c index 7459dab..9756a84 100644 --- a/backend/impress/impress-document.c +++ b/backend/impress/impress-document.c @@ -19,7 +19,9 @@ */ #include <gtk/gtk.h> +#include <glib/gi18n.h> #include <string.h> + #include "imposter.h" #include "impress-document.h" #include "ev-document-thumbnails.h" @@ -286,8 +288,10 @@ impress_document_load (EvDocument *document, filename = g_filename_from_uri (uri, NULL, error); if (!filename) { - //FIXME - //g_error_set (); + g_set_error (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("Remote files aren't supported")); return FALSE; } @@ -295,7 +299,10 @@ impress_document_load (EvDocument *document, if (!imp) { - //FIXME translate the err, set error + g_set_error (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("Invalid document")); g_free (filename); return FALSE; } @@ -400,13 +407,23 @@ impress_document_finalize (GObject *object) { ImpressDocument *impress_document = IMPRESS_DOCUMENT (object); - g_mutex_free (impress_document->mutex); + if (impress_document->mutex) + g_mutex_free (impress_document->mutex); + + if (impress_document->imp) + imp_close (impress_document->imp); + + if (impress_document->ctx) + imp_delete_context (impress_document->ctx); + + if (impress_document->pango_ctx) + g_object_unref (impress_document->pango_ctx); + + if (impress_document->pixmap) + g_object_unref (G_OBJECT (impress_document->pixmap)); - imp_close (impress_document->imp); - imp_delete_context (impress_document->ctx); - g_free (impress_document->pango_ctx); - g_object_unref (G_OBJECT (impress_document->pixmap)); - g_object_unref (impress_document->gc); + if (impress_document->gc) + g_object_unref (impress_document->gc); G_OBJECT_CLASS (impress_document_parent_class)->finalize (object); } @@ -516,7 +533,7 @@ impress_document_init (ImpressDocument *impress_document) impress_document->pixmap = gdk_pixmap_new (window, PAGE_WIDTH, PAGE_HEIGHT, -1); impress_document->gc = gdk_gc_new (impress_document->pixmap); - impress_document->pango_ctx = gdk_pango_context_get (); + impress_document->pango_ctx = gdk_pango_context_get_for_screen (gdk_screen_get_default ()); } /* diff --git a/properties/ev-properties-main.c b/properties/ev-properties-main.c index 32677fc..10d1ec8 100644 --- a/properties/ev-properties-main.c +++ b/properties/ev-properties-main.c @@ -103,6 +103,9 @@ ev_properties_get_pages (NautilusPropertyPageProvider *provider, g_error_free (error); goto end; } + + if (!document) + goto end; label = gtk_label_new (_("Document")); page = ev_properties_view_new (); |