2006-05-19 Matthias Clasen <mclasen@redhat.com>
+ * gtk/gtk.symbols:
+ * gtk/gtkprintoperation.h:
+ * gtk/gtkprintoperation.c (gtk_print_operation_cancel): New function
+ to cancel a running print operation.
+
+ * gtk/gtkprintoperation-private.h (struct _GtkPrintOperationPrivate):
+ Add a cancelled flag, use g types, use bitfields.
+
+ * gtk/gtkprintoperation.c (print_pages): Clean up after the idle
+ in the synchronous case.
+
* gtk/gtknotebook.c (gtk_notebook_pages_allocate): Fix a
boundary case in scrolling where a tab was not shown. (#168105,
Hiroyuki Ikezoe, patch by Kouhei Sutou)
2006-05-19 Matthias Clasen <mclasen@redhat.com>
+ * gtk/gtk.symbols:
+ * gtk/gtkprintoperation.h:
+ * gtk/gtkprintoperation.c (gtk_print_operation_cancel): New function
+ to cancel a running print operation.
+
+ * gtk/gtkprintoperation-private.h (struct _GtkPrintOperationPrivate):
+ Add a cancelled flag, use g types, use bitfields.
+
+ * gtk/gtkprintoperation.c (print_pages): Clean up after the idle
+ in the synchronous case.
+
* gtk/gtknotebook.c (gtk_notebook_pages_allocate): Fix a
boundary case in scrolling where a tab was not shown. (#168105,
Hiroyuki Ikezoe, patch by Kouhei Sutou)
+2006-05-19 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtk-sections.txt: Additions
+
2006-05-18 Matthias Clasen <mclasen@redhat.com>
* gtk/tmpl/gtkenums.sgml: Updates
gtk_print_operation_set_unit
gtk_print_operation_set_show_dialog
gtk_print_operation_set_pdf_target
-gtk_print_operation_run
gtk_print_operation_run_async
+gtk_print_operation_cancel
gtk_print_operation_get_status
gtk_print_operation_get_status_string
gtk_print_operation_is_finished
gtk_print_operation_get_status
gtk_print_operation_get_status_string
gtk_print_operation_is_finished
+gtk_print_operation_cancel
#endif
#endif
struct _GtkPrintOperationPrivate
{
GtkPrintStatus status;
- char *status_string;
+ gchar *status_string;
GtkPageSetup *default_page_setup;
GtkPrintSettings *print_settings;
- char *job_name;
- int nr_of_pages;
- int current_page;
- gboolean use_full_page;
+ gchar *job_name;
+ gint nr_of_pages;
+ gint current_page;
GtkUnit unit;
- gboolean show_dialog;
- gboolean track_print_status;
- char *pdf_target;
+ gchar *pdf_target;
+ guint use_full_page : 1;
+ guint show_dialog : 1;
+ guint track_print_status : 1;
+ guint cancelled : 1;
guint print_pages_idle_id;
/* Data for the print job: */
cairo_surface_t *surface;
- double dpi_x, dpi_y;
+ gdouble dpi_x, dpi_y;
GtkPrintPages print_pages;
GtkPageRange *page_ranges;
- int num_page_ranges;
+ gint num_page_ranges;
- int manual_num_copies;
- gboolean manual_collation;
- gboolean manual_reverse;
- gboolean manual_orientation;
+ gint manual_num_copies;
+ guint manual_collation : 1;
+ guint manual_reverse : 1;
+ guint manual_orientation : 1;
double manual_scale;
GtkPageSet manual_page_set;
- void *platform_data;
+ gpointer platform_data;
+ GDestroyNotify free_platform_data;
void (*start_page) (GtkPrintOperation *operation,
- GtkPrintContext *print_context,
- GtkPageSetup *page_setup);
- void (*end_page) (GtkPrintOperation *operation,
- GtkPrintContext *print_context);
- void (*end_run) (GtkPrintOperation *operation,
- gboolean wait);
- GDestroyNotify free_platform_data;
+ GtkPrintContext *print_context,
+ GtkPageSetup *page_setup);
+ void (*end_page) (GtkPrintOperation *operation,
+ GtkPrintContext *print_context);
+ void (*end_run) (GtkPrintOperation *operation,
+ gboolean wait);
};
GtkPrintOperationResult _gtk_print_operation_platform_backend_run_dialog (GtkPrintOperation *operation,
GError **error);
typedef void (* GtkPrintOperationPrintFunc) (GtkPrintOperation *op,
- gboolean wait);
+ gboolean wait);
void _gtk_print_operation_platform_backend_run_dialog_async (GtkPrintOperation *op,
GtkWindow *parent,
GtkPrintOperationPrintFunc print_cb);
void _gtk_print_operation_set_status (GtkPrintOperation *op,
- GtkPrintStatus status,
- const char *string);
+ GtkPrintStatus status,
+ const gchar *string);
/* GtkPrintContext private functions: */
print_pages_idle_done (gpointer user_data)
{
PrintPagesData *data;
- GtkPrintOperationPrivate *priv;
data = (PrintPagesData*)user_data;
- priv = data->op->priv;
+ data->op->priv->print_pages_idle_id = 0;
g_object_unref (data->print_context);
g_object_unref (data->initial_page_setup);
g_object_unref (data->op);
g_free (data);
-
- priv->print_pages_idle_id = 0;
}
static gboolean
out:
+ if (priv->cancelled)
+ {
+ g_signal_emit (data->op, signals[END_PRINT], 0, data->print_context);
+
+ cairo_surface_finish (data->op->priv->surface);
+
+ _gtk_print_operation_set_status (data->op, GTK_PRINT_STATUS_FINISHED_ABORTED, NULL);
+
+ done = TRUE;
+ }
+
GDK_THREADS_LEAVE ();
return !done;
while (gtk_events_pending ())
gtk_main_iteration ();
}
+ print_pages_idle_done (data);
}
else
priv->print_pages_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
print_pages_idle,
data,
- print_pages_idle_done);
-}
+ print_pages_idle_done);}
/**
* gtk_print_operation_run:
}
+/**
+ * gtk_print_operation_cancel:
+ * @op: a #GtkPrintOperation
+ *
+ * Cancels a running print operation. This function may
+ * be called from a begin-print, paginate or draw-page
+ * signal handler to stop the currently running print
+ * operation.
+ *
+ * Since: 2.10
+ */
+void
+gtk_print_operation_cancel (GtkPrintOperation *op)
+{
+ g_return_if_fail (GTK_IS_PRINT_OPERATION (op));
+
+ op->priv->cancelled = TRUE;
+}
+
+
+
#define __GTK_PRINT_OPERATION_C__
#include "gtkaliasdef.c"
GtkPrintStatus gtk_print_operation_get_status (GtkPrintOperation *op);
G_CONST_RETURN gchar * gtk_print_operation_get_status_string (GtkPrintOperation *op);
gboolean gtk_print_operation_is_finished (GtkPrintOperation *op);
+void gtk_print_operation_cancel (GtkPrintOperation *op);
GtkPageSetup *gtk_print_run_page_setup_dialog (GtkWindow *parent,
GtkPageSetup *page_setup,