[gtk+/gtk-3-2] Print preview: make cancel work



commit a6179ec639767835eb62ed58f543470598af003a
Author: Morten Welinder <terra gnome org>
Date:   Mon Nov 7 13:10:24 2011 -0500

    Print preview: make cancel work
    
    This makes cancels of a print preview work in the same way it
    works for non-previews, i.e., the operation stops at the next
    page boundary.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=662160

 gtk/gtkprintoperation.c |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkprintoperation.c b/gtk/gtkprintoperation.c
index ebc7ad4..1401d52 100644
--- a/gtk/gtkprintoperation.c
+++ b/gtk/gtkprintoperation.c
@@ -551,11 +551,19 @@ preview_print_idle_done (gpointer data)
   op = GTK_PRINT_OPERATION (pop->preview);
 
   cairo_surface_finish (pop->surface);
-  /* Surface is destroyed in launch_preview */
-  _gtk_print_operation_platform_backend_launch_preview (op,
-							pop->surface,
-							pop->parent,
-							pop->filename);
+
+  if (op->priv->status == GTK_PRINT_STATUS_FINISHED_ABORTED)
+    {
+      cairo_surface_destroy (pop->surface);
+    }
+  else
+    {
+      /* Surface is destroyed in launch_preview */
+      _gtk_print_operation_platform_backend_launch_preview (op,
+							    pop->surface,
+							    pop->parent,
+							    pop->filename);
+    }
 
   g_free (pop->filename);
 
@@ -581,10 +589,14 @@ preview_print_idle (gpointer data)
   op = GTK_PRINT_OPERATION (pop->preview);
   priv = op->priv;
 
-
   if (priv->page_drawing_state == GTK_PAGE_DRAWING_STATE_READY)
     {
-      if (!pop->pages_data->initialized)
+      if (priv->cancelled)
+	{
+	  done = TRUE;
+          _gtk_print_operation_set_status (op, GTK_PRINT_STATUS_FINISHED_ABORTED, NULL);
+	}
+      else if (!pop->pages_data->initialized)
         {
           pop->pages_data->initialized = TRUE;
           prepare_data (pop->pages_data);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]