static GList * ev_properties_get_pages (NautilusPropertyPageProvider *provider, GList *files) { GError *error = NULL; EvDocument *document = NULL; GList *pages = NULL; NautilusFileInfo *file; gchar *uri = NULL; gchar *mime_type = NULL; GtkWidget *page, *label; NautilusPropertyPage *property_page; /* only add properties page if a single file is selected */ if (files == NULL || files->next != NULL) goto end; file = files->data; /* okay, make the page */ uri = nautilus_file_info_get_uri (file); mime_type = nautilus_file_info_get_mime_type (file); document = ev_backends_manager_get_document (mime_type); if (!document) goto end; ev_document_load (document, uri, &error); if (error) { g_error_free (error); goto end; } label = gtk_label_new (_("Document")); page = ev_properties_view_new (uri); ev_properties_view_set_info (EV_PROPERTIES_VIEW (page), ev_document_get_info (document)); gtk_widget_show (page); property_page = nautilus_property_page_new ("document-properties", label, page); pages = g_list_prepend (pages, property_page); end: g_free (uri); g_free (mime_type); if (document != NULL) g_object_unref (document); return pages; }
/* * get_document_from_uri: * @uri: the document URI * @fast: whether to use fast MIME type detection * @compression: a location to store the document's compression type * @error: a #GError location to store an error, or %NULL * * Creates a #EvDocument instance for the document at @uri, using either * fast or slow MIME type detection. If a document could be created, * @compression is filled in with the document's compression type. * On error, %NULL is returned and @error filled in. * * Returns: a new #EvDocument instance, or %NULL on error with @error filled in */ static EvDocument * get_document_from_uri (const char *uri, gboolean fast, EvCompressionType *compression, GError **error) { EvDocument *document = NULL; gchar *mime_type = NULL; GError *err = NULL; *compression = EV_COMPRESSION_NONE; mime_type = ev_file_get_mime_type (uri, fast, &err); if (mime_type == NULL) { g_free (mime_type); if (err == NULL) { g_set_error_literal (error, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_INVALID, _("Unknown MIME Type")); } else { g_propagate_error (error, err); } return NULL; } document = ev_backends_manager_get_document (mime_type); #ifdef ENABLE_PIXBUF if (!document && mime_type_supported_by_gdk_pixbuf (mime_type)) document = ev_backends_manager_get_document ("image/*"); #endif /* ENABLE_PIXBUF */ if (document == NULL) { gchar *content_type, *mime_desc = NULL; content_type = g_content_type_from_mime_type (mime_type); if (content_type) mime_desc = g_content_type_get_description (content_type); g_set_error (error, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_INVALID, _("File type %s (%s) is not supported"), mime_desc ? mime_desc : "-", mime_type); g_free (mime_desc); g_free (content_type); g_free (mime_type); return NULL; } *compression = get_compression_from_mime_type (mime_type); g_free (mime_type); return document; }