X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-print-operation.c;h=3723bd81183356d898ea43bb8ed3e186b97f2065;hb=7d10821fa9ae7cde776bcefb9278ac0371212045;hp=af9cb677654a83d3fe38ae8ad2809688849e250f;hpb=5c07c67fba670090d1110c80745881f92c3f12a9;p=evince.git diff --git a/shell/ev-print-operation.c b/shell/ev-print-operation.c index af9cb677..3723bd81 100644 --- a/shell/ev-print-operation.c +++ b/shell/ev-print-operation.c @@ -341,6 +341,7 @@ GType ev_print_operation_export_get_type (void) G_GNUC_CONST; 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; @@ -840,6 +841,12 @@ export_job_finished (EvJobExport *job, static void export_job_cancelled (EvJobExport *job, EvPrintOperationExport *export) +{ + export_cancel (export); +} + +static void +export_cancel (EvPrintOperationExport *export) { EvPrintOperation *op = EV_PRINT_OPERATION (export); @@ -847,15 +854,17 @@ export_job_cancelled (EvJobExport *job, 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; @@ -864,7 +873,7 @@ export_job_cancelled (EvJobExport *job, 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); } @@ -918,10 +927,10 @@ export_print_page (EvPrintOperationExport *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); } @@ -938,6 +947,9 @@ static void 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); @@ -1088,7 +1100,7 @@ ev_print_operation_export_print_dialog_response_cb (GtkDialog *dial 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); @@ -1139,7 +1151,7 @@ ev_print_operation_export_run (EvPrintOperation *op, 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); @@ -1151,13 +1163,11 @@ ev_print_operation_export_cancel (EvPrintOperation *op) { 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); } }