+ document = get_document_from_uri (uri, TRUE, mime_type, error);
+
+ return document;
+}
+
+static void
+file_filter_add_mime_list_and_free (GtkFileFilter *filter, GList *mime_types)
+{
+ GList *l;
+
+ for (l = mime_types; l != NULL; l = l->next) {
+ gtk_file_filter_add_mime_type (filter, l->data);
+ }
+
+ g_list_foreach (mime_types, (GFunc)g_free, NULL);
+ g_list_free (mime_types);
+}
+
+void
+ev_document_types_add_filters (GtkWidget *chooser, EvDocument *document)
+{
+ EvBackend backend = 0;
+ GList *mime_types;
+ GtkFileFilter *filter;
+ GtkFileFilter *default_filter;
+ GtkFileFilter *document_filter;
+
+ if (document != NULL) {
+ backend = ev_document_factory_get_backend (document);
+ }
+
+ default_filter = document_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("All Documents"));
+ mime_types = ev_document_factory_get_all_mime_types ();
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+#ifdef ENABLE_PS
+ if (document == NULL || backend == EV_BACKEND_PS) {
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("PostScript Documents"));
+ mime_types = ev_document_factory_get_mime_types (EV_BACKEND_PS);
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+#endif
+
+ if (document == NULL || backend == EV_BACKEND_PDF) {
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("PDF Documents"));
+ mime_types = ev_document_factory_get_mime_types (EV_BACKEND_PDF);
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+
+#ifdef ENABLE_PIXBUF
+ if (document == NULL || backend == EV_BACKEND_PIXBUF) {
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("Images"));
+ mime_types = ev_document_factory_get_mime_types (EV_BACKEND_PIXBUF);
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+#endif
+
+#ifdef ENABLE_DVI
+ if (document == NULL || backend == EV_BACKEND_DVI) {
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("DVI Documents"));
+ mime_types = ev_document_factory_get_mime_types (EV_BACKEND_DVI);
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+#endif
+
+#ifdef ENABLE_DJVU
+ if (document == NULL || backend == EV_BACKEND_DJVU) {
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("Djvu Documents"));
+ mime_types = ev_document_factory_get_mime_types (EV_BACKEND_DJVU);
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+#endif
+
+#ifdef ENABLE_COMICS
+ if (document == NULL || backend == EV_BACKEND_COMICS) {
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("Comic Books"));
+ mime_types = ev_document_factory_get_mime_types (EV_BACKEND_COMICS);
+ file_filter_add_mime_list_and_free (filter, mime_types);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+#endif
+
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("All Files"));
+ gtk_file_filter_add_pattern (filter, "*");
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);