static void ev_print_operation_export_begin (EvPrintOperationExport *export);
static gboolean export_print_page (EvPrintOperationExport *export);
+static void export_cancel (EvPrintOperationExport *export);
struct _EvPrintOperationExport {
EvPrintOperation parent;
static void
export_job_cancelled (EvJobExport *job,
EvPrintOperationExport *export)
+{
+ export_cancel (export);
+}
+
+static void
+export_cancel (EvPrintOperationExport *export)
{
EvPrintOperation *op = EV_PRINT_OPERATION (export);
g_source_remove (export->idle_id);
export->idle_id = 0;
- g_signal_handlers_disconnect_by_func (export->job_export,
- export_job_finished,
- export);
- g_signal_handlers_disconnect_by_func (export->job_export,
- export_job_cancelled,
- export);
- g_object_unref (export->job_export);
- export->job_export = NULL;
-
+ if (export->job_export) {
+ g_signal_handlers_disconnect_by_func (export->job_export,
+ export_job_finished,
+ export);
+ g_signal_handlers_disconnect_by_func (export->job_export,
+ export_job_cancelled,
+ export);
+ g_object_unref (export->job_export);
+ export->job_export = NULL;
+ }
+
if (export->fd != -1) {
close (export->fd);
export->fd = -1;
ev_print_operation_export_clear_temp_file (export);
g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_CANCEL);
-
+
ev_print_operation_export_run_next (export);
}
if (!export->job_export) {
export->job_export = ev_job_export_new (op->document);
- g_signal_connect (G_OBJECT (export->job_export), "finished",
+ g_signal_connect (export->job_export, "finished",
G_CALLBACK (export_job_finished),
(gpointer)export);
- g_signal_connect (G_OBJECT (export->job_export), "cancelled",
+ g_signal_connect (export->job_export, "cancelled",
G_CALLBACK (export_job_cancelled),
(gpointer)export);
}
ev_print_operation_export_begin (EvPrintOperationExport *export)
{
EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (!export->temp_file)
+ return; /* cancelled */
ev_document_doc_mutex_lock ();
ev_file_exporter_begin (EV_FILE_EXPORTER (op->document), &export->fc);
if (!gtk_printer_accepts_ps (export->printer)) {
gtk_widget_destroy (GTK_WIDGET (dialog));
- g_set_error (&export->error,
- GTK_PRINT_ERROR,
- GTK_PRINT_ERROR_GENERAL,
- "%s", _("Printing is not supported on this printer."));
+ g_set_error_literal (&export->error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ _("Printing is not supported on this printer."));
g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR);
return;
height *= scale;
}
- export->pages_per_sheet = gtk_print_settings_get_number_up (print_settings);
+ export->pages_per_sheet = MAX (1, gtk_print_settings_get_number_up (print_settings));
export->copies = gtk_print_settings_get_n_copies (print_settings);
export->collate = gtk_print_settings_get_collate (print_settings);
get_first_and_last_page (export, &first_page, &last_page);
- export->fc.format = g_ascii_strcasecmp (file_format, "pdf") == 0 ?
+ export->fc.format = file_format && g_ascii_strcasecmp (file_format, "pdf") == 0 ?
EV_FILE_FORMAT_PDF : EV_FILE_FORMAT_PS;
export->fc.filename = export->temp_file;
export->fc.first_page = MIN (first_page, last_page);
export->fc.paper_width = width;
export->fc.paper_height = height;
export->fc.duplex = FALSE;
- export->fc.pages_per_sheet = MAX (1, export->pages_per_sheet);
+ export->fc.pages_per_sheet = export->pages_per_sheet;
if (ev_print_queue_is_empty (op->document))
ev_print_operation_export_begin (export);
gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (dialog),
export->page_setup);
- g_signal_connect (G_OBJECT (dialog), "response",
+ g_signal_connect (dialog, "response",
G_CALLBACK (ev_print_operation_export_print_dialog_response_cb),
export);
{
EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
- if (export->job_export) {
- if (!ev_job_is_finished (export->job_export)) {
- ev_job_cancel (export->job_export);
- } else {
- export_job_cancelled (EV_JOB_EXPORT (export->job_export),
- export);
- }
+ if (export->job_export &&
+ !ev_job_is_finished (export->job_export)) {
+ ev_job_cancel (export->job_export);
+ } else {
+ export_cancel (export);
}
}