[gtk.types.PrintOperationResult.Apply] indicates that the printing was completed successfully. In this case, it is a good idea to obtain the used print settings with [gtk.print_operation.PrintOperation.getPrintSettings] and store them for reuse with the next print operation. A value of [gtk.types.PrintOperationResult.InProgress] means the operation is running asynchronously, and will emit the [gtk.print_operation.PrintOperation.done] signal when done.
PrintOperation.run
gtk.types.PrintOperationResult run(gtk.types.PrintOperationAction action, gtk.window.Window parent = null)Runs the print operation.
Normally that this function does not return until the rendering of all pages is complete. You can connect to the signalGtk.PrintOperation::status-changed signal on op to obtain some information about the progress of the print operation.
Furthermore, it may use a recursive mainloop to show the print dialog.
If you set the [Gtk.PrintOperation:allow-async] property, the operation will run asynchronously if this is supported on the platform. The [gtk.print_operation.PrintOperation.done] signal will be emitted with the result of the operation when the it is done (i.e. when the dialog is canceled, or when the print succeeds or fails).
if (settings != NULL)
gtk_print_operation_set_print_settings (print, settings);
if (page_setup != NULL)
gtk_print_operation_set_default_page_setup (print, page_setup);
g_signal_connect (print, "begin-print",
G_CALLBACK (begin_print), &data);
g_signal_connect (print, "draw-page",
G_CALLBACK (draw_page), &data);
res = gtk_print_operation_run (print,
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
parent,
&error);
if (res == GTK_PRINT_OPERATION_RESULT_ERROR)
{
error_dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Error printing file:\n%s",
error->message);
g_signal_connect (error_dialog, "response",
G_CALLBACK (gtk_window_destroy), NULL);
gtk_window_present (GTK_WINDOW (error_dialog));
g_error_free (error);
}
else if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
{
if (settings != NULL)
g_object_unref (settings);
settings = g_object_ref (gtk_print_operation_get_print_settings (print));
}Note that [gtk.print_operation.PrintOperation.run] can only be called once on a given [gtk.print_operation.PrintOperation].
Parameters
action | the action to start |
parent | Transient parent of the dialog |