Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-rw-r--r--shell/Makefile.am2
-rw-r--r--shell/ev-application.c10
-rw-r--r--shell/ev-window.c43
3 files changed, 51 insertions, 4 deletions
diff --git a/shell/Makefile.am b/shell/Makefile.am
index d51abd1..a36511a 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -5,6 +5,7 @@ INCLUDES= \
-I$(top_srcdir)/lib \
-I$(top_srcdir)/backend \
-I$(top_srcdir)/pdf/xpdf \
+ -I$(top_srcdir)/pixbuf \
-I$(top_srcdir)/ps \
-DGNOMELOCALEDIR=\"$(datadir)/locale\" \
-DGNOMEICONDIR=\""$(datadir)/pixmaps"\" \
@@ -41,6 +42,7 @@ evince_LDADD= \
$(SHELL_LIBS) \
$(top_builddir)/backend/libevbackend.la \
$(top_builddir)/pdf/xpdf/libpdfdocument.la \
+ $(top_builddir)/pixbuf/libpixbufdocument.la \
$(top_builddir)/ps/libgtkgs.la \
$(NULL)
diff --git a/shell/ev-application.c b/shell/ev-application.c
index 541b87e..4f006cc 100644
--- a/shell/ev-application.c
+++ b/shell/ev-application.c
@@ -115,8 +115,7 @@ ev_application_open (EvApplication *application, GError *err)
{
EvWindow *ev_window;
GtkWidget *chooser;
- GtkFileFilter *both_filter, *pdf_filter, *ps_filter, *all_filter;
-
+ GtkFileFilter *both_filter, *pdf_filter, *ps_filter, *pixbuf_filter, *all_filter;
ev_window = ev_application_get_empty_window (application);
@@ -145,11 +144,16 @@ ev_application_open (EvApplication *application, GError *err)
gtk_file_filter_add_mime_type (pdf_filter, "application/pdf");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), pdf_filter);
+ pixbuf_filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (pixbuf_filter, _("Images"));
+ gtk_file_filter_add_pixbuf_formats (pixbuf_filter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), pixbuf_filter);
+
all_filter = gtk_file_filter_new ();
gtk_file_filter_set_name (all_filter, _("All Files"));
gtk_file_filter_add_pattern (all_filter, "*");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all_filter);
-
+
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), both_filter);
if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_OK) {
diff --git a/shell/ev-window.c b/shell/ev-window.c
index b23a1a6..19a0c52 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -36,6 +36,7 @@
#include "eggfindbar.h"
#include "pdf-document.h"
+#include "pixbuf-document.h"
#include "gtkgs.h"
#include <glib/gi18n.h>
@@ -205,6 +206,44 @@ unable_to_load (EvWindow *ev_window,
gtk_widget_destroy (dialog);
}
+/* Would be nice to have this in gdk-pixbuf */
+static gboolean
+mime_type_supported_by_gdk_pixbuf (const gchar *mime_type)
+{
+ GSList *formats, *list;
+ gboolean retval = FALSE;
+
+ formats = gdk_pixbuf_get_formats ();
+
+ list = formats;
+ while (list) {
+ GdkPixbufFormat *format = list->data;
+ int i;
+ gchar **mime_types;
+
+ if (gdk_pixbuf_format_is_disabled (format))
+ continue;
+
+ mime_types = gdk_pixbuf_format_get_mime_types (format);
+
+ for (i = 0; mime_types[i] != NULL; i++) {
+ if (strcmp (mime_types[i], mime_type) == 0) {
+ retval = TRUE;
+ break;
+ }
+ }
+
+ if (retval)
+ break;
+
+ list = list->next;
+ }
+
+ g_slist_free (formats);
+
+ return retval;
+}
+
void
ev_window_open (EvWindow *ev_window, const char *uri)
{
@@ -217,7 +256,9 @@ ev_window_open (EvWindow *ev_window, const char *uri)
document = g_object_new (PDF_TYPE_DOCUMENT, NULL);
else if (!strcmp (mime_type, "application/postscript"))
document = g_object_new (GTK_GS_TYPE, NULL);
-
+ else if (mime_type_supported_by_gdk_pixbuf (mime_type))
+ document = g_object_new (PIXBUF_TYPE_DOCUMENT, NULL);
+
if (document) {
GError *error = NULL;