From bec5242aa2645d9a62d5971556de1348b02b535d Mon Sep 17 00:00:00 2001 From: Tom Parker Date: Thu, 25 Jan 2007 09:37:16 +0000 Subject: Correctly handle impress document errors. Fixes nautilus crash in property 2007-01-25 Tom Parker * 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 --- diff --git a/ChangeLog b/ChangeLog index 961a68f..2180c31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-01-25 Tom Parker + + * 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 * 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 +#include #include + #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 (); -- cgit v0.9.1