]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-print-operation.c
Updated Swedish translation
[evince.git] / shell / ev-print-operation.c
index efb00a93292c751892af75f82d975785b42d1c21..a6f8d53aecfeb818d9ac1ed0ea11cd0a6f0fcd99 100644 (file)
@@ -1148,7 +1148,7 @@ ev_print_operation_export_print_dialog_response_cb (GtkDialog              *dial
 
        file_format = gtk_print_settings_get (print_settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT);
        
-       filename = g_strdup_printf ("evince_print.%s.XXXXXX", file_format);
+       filename = g_strdup_printf ("evince_print.%s.XXXXXX", file_format != NULL ? file_format : "");
        export->fd = g_file_open_tmp (filename, &export->temp_file, &error);
        g_free (filename);
        if (export->fd <= -1) {
@@ -1472,6 +1472,8 @@ struct _EvPrintOperationPrint {
        EvPrintOperation parent;
 
        GtkPrintOperation *op;
+       gint               n_pages_to_print;
+       gint               total;
        EvJob             *job_print;
        gchar             *job_name;
 };
@@ -1589,8 +1591,6 @@ ev_print_operation_print_begin_print (EvPrintOperationPrint *print,
 
        n_pages = ev_page_cache_get_n_pages (ev_page_cache_get (op->document));
        gtk_print_operation_set_n_pages (print->op, n_pages);
-
-       /* FIXME: gtk_print should provide the progress */
        ev_print_operation_update_status (op, -1, n_pages, 0);
 
        g_signal_emit (op, signals[BEGIN_PRINT], 0);
@@ -1602,17 +1602,36 @@ ev_print_operation_print_done (EvPrintOperationPrint  *print,
 {
        EvPrintOperation *op = EV_PRINT_OPERATION (print);
 
-       /* FIXME: gtk_print should provide the progress */
-       ev_print_operation_update_status (op, 0, 1, 1.0);
+       ev_print_operation_update_status (op, 0, print->n_pages_to_print, 1.0);
 
        g_signal_emit (op, signals[DONE], 0, result);
 }
 
+static void
+ev_print_operation_print_status_changed (EvPrintOperationPrint *print)
+{
+#ifdef HAVE_GTK_PRINT_OPERATION_GET_N_PAGES_TO_PRINT
+       GtkPrintStatus status;
+
+       status = gtk_print_operation_get_status (print->op);
+       if (status == GTK_PRINT_STATUS_GENERATING_DATA)
+               print->n_pages_to_print = gtk_print_operation_get_n_pages_to_print (print->op);
+#endif
+}
+
 static void
 print_job_finished (EvJobPrint            *job,
                    EvPrintOperationPrint *print)
 {
+       EvPrintOperation *op = EV_PRINT_OPERATION (print);
+
        gtk_print_operation_draw_page_finish (print->op);
+#ifdef HAVE_GTK_PRINT_OPERATION_GET_N_PAGES_TO_PRINT
+       print->total++;
+       ev_print_operation_update_status (op, print->total,
+                                         print->n_pages_to_print,
+                                         print->total / (gdouble)print->n_pages_to_print);
+#endif
        ev_job_print_set_cairo (job, NULL);
 }
 
@@ -1703,6 +1722,9 @@ ev_print_operation_print_init (EvPrintOperationPrint *print)
        g_signal_connect_swapped (print->op, "draw_page",
                                  G_CALLBACK (ev_print_operation_print_draw_page),
                                  print);
+       g_signal_connect_swapped (print->op, "status_changed",
+                                 G_CALLBACK (ev_print_operation_print_status_changed),
+                                 print);
        gtk_print_operation_set_allow_async (print->op, TRUE);
 }