]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-application.c
Fix several history bugs
[evince.git] / shell / ev-application.c
index 2a89eaa151a719b0ed6999690bceae87bcb8ff0d..05f86ce85bc8df5308d022d55ece7f33b6979e3a 100644 (file)
 #include <gtk/gtkfilechooserdialog.h>
 #include <gtk/gtkstock.h>
 #include <gtk/gtkwidget.h>
-#include <bonobo/bonobo-main.h>
+#include <gtk/gtkmain.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
 
-#include <ev-macros.h>
-#include <ev-window.h>
+#include "ev-window.h"
 
 struct _EvApplicationPrivate {
        GList *windows;
@@ -67,7 +67,7 @@ window_destroy_cb (GtkObject *object, gpointer user_data)
                g_list_remove (application->priv->windows, object);
 
        if (application->priv->windows == NULL)
-               bonobo_main_quit ();
+               gtk_main_quit ();
 }
 
 EvWindow *
@@ -116,8 +116,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);
 
@@ -146,11 +145,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) {
@@ -165,15 +169,28 @@ ev_application_open (EvApplication *application, GError *err)
        gtk_widget_destroy (GTK_WIDGET (chooser));
 }
 
-static void
-ev_application_finalize (GObject *object)
+void
+ev_application_open_link (EvApplication *application,
+                         EvWindow      *window,
+                         EvLink        *link,
+                         GError        *error)
 {
-       g_return_if_fail (object != NULL && EV_IS_APPLICATION (object));
-
-       EV_APPLICATION (object)->priv = NULL;
+       EvLinkType type;
+       const char *uri;
 
-       EV_CALL_VIRTUAL (
-               G_OBJECT_CLASS (ev_application_parent_class), finalize, (object));
+       type = ev_link_get_link_type (link);
+       
+       switch (type) {
+               case EV_LINK_TYPE_TITLE:
+                       break;
+               case EV_LINK_TYPE_PAGE:
+                       ev_window_open_link (window, link);
+                       break;
+               case EV_LINK_TYPE_EXTERNAL_URI:
+                       uri = ev_link_get_uri (link);
+                       gnome_vfs_url_show (uri);
+                       break;
+       }
 }
 
 static void
@@ -182,7 +199,6 @@ ev_application_class_init (EvApplicationClass *ev_application_class)
        GObjectClass *g_object_class;
 
        g_object_class = G_OBJECT_CLASS (ev_application_class);
-       g_object_class->finalize = ev_application_finalize;
 
        g_type_class_add_private (g_object_class,
                                  sizeof (EvApplicationPrivate));