]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-application.c
Fix for bug 308402 - provide templates in Save dialog
[evince.git] / shell / ev-application.c
index 2a89eaa151a719b0ed6999690bceae87bcb8ff0d..ef478e002feb069c009c3f4ecd4f09d1b39375d6 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include "ev-application.h"
+#include "ev-utils.h"
+#include "ev-document-types.h"
 
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtkfilechooserdialog.h>
 #include <gtk/gtkstock.h>
 #include <gtk/gtkwidget.h>
-#include <bonobo/bonobo-main.h>
-
-#include <ev-macros.h>
-#include <ev-window.h>
+#include <gtk/gtkmain.h>
 
 struct _EvApplicationPrivate {
        GList *windows;
@@ -67,7 +70,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 *
@@ -98,7 +101,7 @@ is_window_empty (const EvWindow *ev_window, gconstpointer dummy)
                : -1;
 }
 
-static EvWindow *
+EvWindow *
 ev_application_get_empty_window (EvApplication *application)
 {
        GList *node;
@@ -116,8 +119,7 @@ ev_application_open (EvApplication *application, GError *err)
 {
        EvWindow *ev_window;
        GtkWidget *chooser;
-       GtkFileFilter *both_filter, *pdf_filter, *ps_filter, *all_filter;
-
+       static char *folder = NULL;
 
        ev_window = ev_application_get_empty_window (application);
 
@@ -129,60 +131,42 @@ ev_application_open (EvApplication *application, GError *err)
                                               GTK_STOCK_OPEN, GTK_RESPONSE_OK,
                                               NULL);
 
-       both_filter = gtk_file_filter_new ();
-       gtk_file_filter_set_name (both_filter,
-                                 _("PostScript and PDF Documents"));
-       gtk_file_filter_add_mime_type (both_filter, "application/postscript");
-       gtk_file_filter_add_mime_type (both_filter, "application/pdf");
-       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), both_filter);
+       if (folder) {
+               gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (chooser),
+                                                        folder);
+       }
 
-       ps_filter = gtk_file_filter_new ();
-       gtk_file_filter_set_name (ps_filter, _("PostScript Documents"));
-       gtk_file_filter_add_mime_type (ps_filter, "application/postscript");
-       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), ps_filter);
+       ev_document_types_add_filters (chooser);
+       gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), TRUE);
+       gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE);
 
-       pdf_filter = gtk_file_filter_new ();
-       gtk_file_filter_set_name (pdf_filter, _("PDF Documents"));
-       gtk_file_filter_add_mime_type (pdf_filter, "application/pdf");
-       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), pdf_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);
+       if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_OK) {
+               GSList *uris;
 
-       gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), both_filter);
+               uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (chooser));
 
-       if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_OK) {
-               char *uri;
+               if (folder != NULL)
+                       g_free (folder);
+                               
+               folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (chooser));
 
-               uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser));
-               ev_window_open (ev_window, uri);
-               gtk_widget_show (GTK_WIDGET (ev_window));
-               g_free (uri);
+               ev_window_open_uri_list (ev_window, uris);
+               
+               g_slist_free (uris);
+       } else {
+               if (!GTK_WIDGET_VISIBLE (ev_window))
+                       gtk_widget_destroy (GTK_WIDGET (ev_window));
        }
 
        gtk_widget_destroy (GTK_WIDGET (chooser));
 }
 
-static void
-ev_application_finalize (GObject *object)
-{
-       g_return_if_fail (object != NULL && EV_IS_APPLICATION (object));
-
-       EV_APPLICATION (object)->priv = NULL;
-
-       EV_CALL_VIRTUAL (
-               G_OBJECT_CLASS (ev_application_parent_class), finalize, (object));
-}
-
 static void
 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));