X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=eafdb292ac5c3cd37754474e8b31690174977780;hb=3768e2dd98d04cf0d216094c473e605faf39809d;hp=48d9b2a2b7b7ac37df06040b1d20af361b472b27;hpb=3588349bcec38d0915a8e1f0ea3949d683c4eb8c;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 48d9b2a2..eafdb292 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -192,6 +192,7 @@ struct _EvWindowPrivate { #ifdef WITH_GTK_PRINT EvJob *print_job; + gboolean print_preview; GtkPrintJob *gtk_print_job; GtkPrinter *printer; GtkPrintSettings *print_settings; @@ -711,6 +712,9 @@ ev_window_add_history (EvWindow *window, gint page, EvLink *link) EvLinkAction *action; EvLinkDest *dest; + if (window->priv->history == NULL) + return; + if (link) { action = g_object_ref (ev_link_get_action (link)); dest = ev_link_action_get_dest (action); @@ -2168,6 +2172,11 @@ ev_window_clear_print_job (EvWindow *window) g_object_unref (window->priv->print_job); window->priv->print_job = NULL; } + + if (window->priv->gtk_print_job) { + g_object_unref (window->priv->gtk_print_job); + window->priv->gtk_print_job = NULL; + } } static void @@ -2201,13 +2210,8 @@ static void ev_window_print_send (EvWindow *window, const gchar *filename) { - GtkPrintJob *job; GtkPrintSettings *settings; - GError *error = NULL; - if (window->priv->gtk_print_job) - g_object_unref (window->priv->gtk_print_job); - /* Some printers take into account some print settings, * and others don't. However we have exported the document * to a ps or pdf file according to such print settings. So, @@ -2222,25 +2226,54 @@ ev_window_print_send (EvWindow *window, gtk_print_settings_set_scale (settings, 1.0); gtk_print_settings_set_collate (settings, FALSE); gtk_print_settings_set_reverse (settings, FALSE); - - job = gtk_print_job_new ("evince-print", - window->priv->printer, - settings, - window->priv->print_page_setup); - g_object_unref (settings); - - window->priv->gtk_print_job = job; + if (window->priv->print_preview) { + gchar *uri; + gchar *print_settings_file = NULL; - if (gtk_print_job_set_source_file (job, filename, &error)) { - gtk_print_job_send (job, - (GtkPrintJobCompleteFunc)ev_window_print_finished, - window, NULL); + ev_application_set_print_settings (EV_APP, + window->priv->print_settings); + +#if GTK_CHECK_VERSION (2, 11, 0) + print_settings_file = ev_tmp_filename ("print-settings"); + gtk_print_settings_to_file (settings, print_settings_file, NULL); +#endif + uri = g_filename_to_uri (filename, NULL, NULL); + ev_application_open_uri_at_dest (EV_APP, + uri, + gtk_window_get_screen (GTK_WINDOW (window)), + NULL, + EV_WINDOW_MODE_PREVIEW, + TRUE, + print_settings_file, + GDK_CURRENT_TIME); + g_free (print_settings_file); + g_free (uri); } else { - ev_window_clear_print_job (window); - g_warning (error->message); - g_error_free (error); + GtkPrintJob *job; + GError *error = NULL; + + job = gtk_print_job_new ("evince-print", + window->priv->printer, + settings, + window->priv->print_page_setup); + + if (window->priv->gtk_print_job) + g_object_unref (window->priv->gtk_print_job); + window->priv->gtk_print_job = job; + + if (gtk_print_job_set_source_file (job, filename, &error)) { + gtk_print_job_send (job, + (GtkPrintJobCompleteFunc)ev_window_print_finished, + window, NULL); + } else { + ev_window_clear_print_job (window); + g_warning (error->message); + g_error_free (error); + } } + + g_object_unref (settings); } static void @@ -2276,13 +2309,15 @@ ev_window_print_dialog_response_cb (GtkDialog *dialog, GtkPrintPages print_pages; const gchar *file_format; - if (response != GTK_RESPONSE_OK) { + if (response == GTK_RESPONSE_CANCEL) { gtk_widget_destroy (GTK_WIDGET (dialog)); window->priv->print_dialog = NULL; return FALSE; } + window->priv->print_preview = (response == GTK_RESPONSE_APPLY); + if (window->priv->printer) g_object_unref (window->priv->printer); if (window->priv->print_settings) @@ -2427,7 +2462,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_PREVIEW; if (EV_IS_FILE_EXPORTER (ev_window->priv->document) && ev_file_exporter_format_supported (EV_FILE_EXPORTER (ev_window->priv->document), @@ -4473,7 +4509,7 @@ register_custom_actions (EvWindow *window, GtkActionGroup *group) action = g_object_new (EPHY_TYPE_ZOOM_ACTION, "name", ZOOM_CONTROL_ACTION, "label", _("Zoom"), - "stock_id", GTK_STOCK_ZOOM_IN, + "stock_id", EV_STOCK_ZOOM, "tooltip", _("Adjust the zoom level"), "zoom", 1.0, NULL);