]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Enable print to a PDF. Fixes bug #332121.
[evince.git] / shell / ev-window.c
index 414d320b4af574be633fedc4195cda29b26519d3..dcf687e9e35c7cac430be2558b3ef74426064f7d 100644 (file)
@@ -900,7 +900,7 @@ password_dialog_response (GtkWidget *password_dialog,
                ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_DOCUMENT);
                ev_job_queue_add_job (ev_window->priv->xfer_job, EV_JOB_PRIORITY_HIGH);
                
-               gtk_widget_destroy (password_dialog);
+               gtk_widget_destroy (password_dialog);
                        
                return;
        }
@@ -1122,7 +1122,9 @@ file_open_dialog_response_cb (GtkWidget *chooser,
 
                uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (chooser));
 
-               ev_application_open_uri_list (EV_APP, uris, GDK_CURRENT_TIME);
+               ev_application_open_uri_list (EV_APP, uris,
+                                             gtk_window_get_screen (GTK_WINDOW (ev_window)),
+                                             GDK_CURRENT_TIME);
        
                g_slist_foreach (uris, (GFunc)g_free, NULL);    
                g_slist_free (uris);
@@ -1167,14 +1169,20 @@ ev_window_cmd_file_open (GtkAction *action, EvWindow *window)
 #ifdef HAVE_GTK_RECENT
 static void
 ev_window_cmd_recent_file_activate (GtkAction     *action,
-                                   GtkRecentInfo *info)
+                                   EvWindow      *window)
 {
-       const gchar *uri;
+       GtkRecentInfo *info;
+       const gchar   *uri;
 
+       info = g_object_get_data (G_OBJECT (action), "gtk-recent-info");
+       g_assert (info != NULL);
+       
        uri = gtk_recent_info_get_uri (info);
        
-       ev_application_open_uri (EV_APP, uri, NULL,
-                                GDK_CURRENT_TIME, NULL);
+       ev_application_open_uri_at_dest (EV_APP, uri,
+                                        gtk_window_get_screen (GTK_WINDOW (window)),
+                                        NULL, 0,
+                                        GDK_CURRENT_TIME);
 }
 #else
 static void
@@ -1326,12 +1334,14 @@ ev_window_setup_recent (EvWindow *ev_window)
                                       "label", label,
                                       NULL);
 
-               g_object_weak_ref (G_OBJECT (action),
-                                  (GWeakNotify) gtk_recent_info_unref,
-                                  gtk_recent_info_ref (info));
+               g_object_set_data_full (G_OBJECT (action),
+                                       "gtk-recent-info",
+                                       gtk_recent_info_ref (info),
+                                       (GDestroyNotify) gtk_recent_info_unref);
+               
                g_signal_connect (G_OBJECT (action), "activate",
                                  G_CALLBACK (ev_window_cmd_recent_file_activate),
-                                 (gpointer) info);
+                                 (gpointer) ev_window);
 
                gtk_action_group_add_action (ev_window->priv->recent_action_group,
                                             action);
@@ -1519,17 +1529,18 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog,
                                    gint       response,
                                    EvWindow  *window)
 {
-       EvPrintRange *ranges = NULL;
-       EvPageCache  *page_cache;
-       gint          n_ranges = 0;
-       gint          copies;
-       gboolean      collate;
-       gboolean      reverse;
-       gdouble       scale;
-       gint          current_page;
-       gint          width;
-       gint          height;
-       GtkPrintPages print_pages;
+       EvPrintRange  *ranges = NULL;
+       EvPrintPageSet page_set;
+       EvPageCache   *page_cache;
+       gint           n_ranges = 0;
+       gint           copies;
+       gboolean       collate;
+       gboolean       reverse;
+       gdouble        scale;
+       gint           current_page;
+       gint           width;
+       gint           height;
+       GtkPrintPages  print_pages;
        
        if (response != GTK_RESPONSE_OK) {
                gtk_widget_destroy (GTK_WIDGET (dialog));
@@ -1594,6 +1605,8 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog,
                break;
        }
 
+       page_set = (EvPrintPageSet)gtk_print_settings_get_page_set (window->priv->print_settings);
+
        scale = gtk_print_settings_get_scale (window->priv->print_settings) * 0.01;
        page_cache = ev_page_cache_get (window->priv->document);
        ev_page_cache_get_size (page_cache,
@@ -1609,7 +1622,9 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog,
                                                    (gdouble)width,
                                                    (gdouble)height,
                                                    ranges, n_ranges,
-                                                   copies, collate, reverse);
+                                                   page_set,
+                                                   copies, collate,
+                                                   reverse);
        
        g_signal_connect (window->priv->print_job, "finished",
                          G_CALLBACK (ev_window_print_job_cb),
@@ -1667,7 +1682,8 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page)
                                                       GTK_PRINT_CAPABILITY_COLLATE |
                                                       GTK_PRINT_CAPABILITY_REVERSE |
                                                       GTK_PRINT_CAPABILITY_SCALE |
-                                                      GTK_PRINT_CAPABILITY_GENERATE_PS);
+                                                      GTK_PRINT_CAPABILITY_GENERATE_PS |
+                                                      GTK_PRINT_CAPABILITY_GENERATE_PDF);
        gtk_print_unix_dialog_set_current_page (GTK_PRINT_UNIX_DIALOG (dialog),
                                                current_page);
        
@@ -3600,7 +3616,9 @@ drag_data_received_cb (GtkWidget *widget, GdkDragContext *context,
 
                gnome_vfs_uri_list_free (uri_list);
                
-               ev_application_open_uri_list (EV_APP, uris, 0);
+               ev_application_open_uri_list (EV_APP, uris,
+                                             gtk_widget_get_screen (widget),
+                                             0);
                
                g_slist_free (uris);
        }
@@ -3873,6 +3891,7 @@ open_remote_link (EvWindow *window, EvLinkAction *action)
        g_free (dir);
 
        ev_application_open_uri_at_dest (EV_APP, uri,
+                                        gtk_window_get_screen (GTK_WINDOW (window)),
                                         ev_link_action_get_dest (action),
                                         0,
                                         GDK_CURRENT_TIME);