<!-- ##### SECTION Title ##### -->
GtkPrintOperation

<!-- ##### SECTION Short_Description ##### -->
High-level Printing API

<!-- ##### SECTION Long_Description ##### -->
<para>
GtkPrintOperation is the high-level, portable printing API. It looks 
a bit different than other GTK+ dialogs such as the #GtkFileChooser, 
since some platforms don't expose enough infrastructure to implement
a good print dialog. On such platforms, GtkPrintOperation uses the 
native print dialog. On platforms which do not provide a native 
print dialog, GTK+ uses its own, see #GtkPrintUnixDialog.
</para>

<para>
The typical way to use the high-level printing API is to create a 
#GtkPrintOperation object with gtk_print_operation_new() when the user 
selects to print. Then you set some properties on it, e.g. the page size, 
any #GtkPrintSettings from previous print operations, the number of pages, 
the current page, etc. 
</para>
<para>
Then you start the print operation by calling gtk_print_operation_run().
It will then show a dialog, let the user select a printer and options. 
When the user finished the dialog various signals will be emitted on the 
#GtkPrintOperation, the main one being ::draw-page, which you are supposed 
to catch and render the page on the provided #GtkPrintContext using Cairo.
</para>

<example>
<title>The high-level printing API</title>
<programlisting>
static GtkPrintSettings *settings = NULL;

static void
do_print (void)
{
  GtkPrintOperation *print;
  GtkPrintOperationResult res;

  print = gtk_print_operation_new (<!-- -->);

  if (settings != NULL) 
    gtk_print_operation_set_print_settings (print, settings);

  g_signal_connect (print, "begin_print", G_CALLBACK (begin_print), NULL);
  g_signal_connect (print, "draw_page", G_CALLBACK (draw_page), NULL);

  res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
                                 GTK_WINDOW (main_window), NULL);

  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));
    }

  g_object_unref (print);
}

</programlisting>
</example>

<para>
By default GtkPrintOperation uses an external application to do
print preview. To implement a custom print preview, an application 
must connect to the preview signal. The functions 
gtk_print_operation_print_preview_render_page(), 
gtk_print_operation_preview_end_preview() and 
gtk_print_operation_preview_is_selected() are useful 
when implementing a print preview.
</para>

<para>
Printing support was added in GTK+ 2.10.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
#GtkPrintContext, #GtkPrintUnixDialog
</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### STRUCT GtkPrintOperation ##### -->
<para>

</para>


<!-- ##### SIGNAL GtkPrintOperation::begin-print ##### -->
<para>

</para>

@printoperation: 
@context: 

<!-- ##### SIGNAL GtkPrintOperation::create-custom-widget ##### -->
<para>

</para>

@printoperation: 
@Returns: 

<!-- ##### SIGNAL GtkPrintOperation::custom-widget-apply ##### -->
<para>

</para>

@printoperation: 
@widget: 

<!-- ##### SIGNAL GtkPrintOperation::done ##### -->
<para>

</para>

@printoperation: the object which received the signal.
@arg1: 

<!-- ##### SIGNAL GtkPrintOperation::draw-page ##### -->
<para>

</para>

@printoperation: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### SIGNAL GtkPrintOperation::end-print ##### -->
<para>

</para>

@printoperation: the object which received the signal.
@arg1: 

<!-- ##### SIGNAL GtkPrintOperation::paginate ##### -->
<para>

</para>

@printoperation: the object which received the signal.
@arg1: 
@Returns: 

<!-- ##### SIGNAL GtkPrintOperation::preview ##### -->
<para>

</para>

@printoperation: the object which received the signal.
@arg1: 
@arg2: 
@arg3: 
@Returns: 

<!-- ##### SIGNAL GtkPrintOperation::request-page-setup ##### -->
<para>

</para>

@printoperation: the object which received the signal.
@arg1: 
@arg2: 
@arg3: 

<!-- ##### SIGNAL GtkPrintOperation::status-changed ##### -->
<para>

</para>

@printoperation: the object which received the signal.

<!-- ##### ARG GtkPrintOperation:allow-async ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:current-page ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:custom-tab-label ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:default-page-setup ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:export-filename ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:job-name ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:n-pages ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:print-settings ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:show-progress ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:status ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:status-string ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:track-print-status ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:unit ##### -->
<para>

</para>

<!-- ##### ARG GtkPrintOperation:use-full-page ##### -->
<para>

</para>

<!-- ##### ENUM GtkPrintStatus ##### -->
<para>
The status gives a rough indication of the completion
of a running print operation.
</para>

@GTK_PRINT_STATUS_INITIAL: The printing has not started yet; this
  status is set initially, and while the print dialog is shown.
@GTK_PRINT_STATUS_PREPARING: This status is set while the begin-print 
  signal is emitted and during pagination.
@GTK_PRINT_STATUS_GENERATING_DATA: This status is set while the
  pages are being rendered.
@GTK_PRINT_STATUS_SENDING_DATA: The print job is being sent off to the 
  printer.
@GTK_PRINT_STATUS_PENDING: The print job has been sent to the printer,
  but is not printed for some reason, e.g. the printer may be stopped.
@GTK_PRINT_STATUS_PENDING_ISSUE: Some problem has occurred during 
  printing, e.g. a paper jam.
@GTK_PRINT_STATUS_PRINTING: The printer is processing the print job.
@GTK_PRINT_STATUS_FINISHED: The printing has been completed successfully.
@GTK_PRINT_STATUS_FINISHED_ABORTED: The printing has been aborted.

<!-- ##### ENUM GtkPrintOperationAction ##### -->
<para>
The @action parameter to gtk_print_operation_run()
determines what action the print operation should perform.
</para>

@GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG: Show the print dialog.
@GTK_PRINT_OPERATION_ACTION_PRINT: Start to print without showing
   the print dialog, based on the current print settings.
@GTK_PRINT_OPERATION_ACTION_PREVIEW: Show the print preview.
@GTK_PRINT_OPERATION_ACTION_EXPORT: Export to a file. This requires
  the export-filename property to be set.

<!-- ##### ENUM GtkPrintOperationResult ##### -->
<para>
A value of this type is returned by gtk_print_operation_run().
</para>

@GTK_PRINT_OPERATION_RESULT_ERROR: An error has occured.
@GTK_PRINT_OPERATION_RESULT_APPLY: The print settings should be stored.
@GTK_PRINT_OPERATION_RESULT_CANCEL: The print operation has been canceled,
  the print settings should not be stored.
@GTK_PRINT_OPERATION_RESULT_IN_PROGRESS: The print operation is not complete
  yet. This value will only be returned when running asynchronously.

<!-- ##### ENUM GtkPrintError ##### -->
<para>
Error codes that identify various errors that can occur while
using the GTK+ printing support.
</para>

@GTK_PRINT_ERROR_GENERAL: An unspecified error occurred.
@GTK_PRINT_ERROR_INTERNAL_ERROR: An internal error occurred.
@GTK_PRINT_ERROR_NOMEM: A memory allocation failed.
@GTK_PRINT_ERROR_INVALID_FILE: An error occurred while loading a page setup
    or paper size from a key file.

<!-- ##### MACRO GTK_PRINT_ERROR ##### -->
<para>
The #GQuark used for #GtkPrintError errors.
</para>



<!-- ##### FUNCTION gtk_print_operation_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION gtk_print_operation_set_allow_async ##### -->
<para>

</para>

@op: 
@allow_async: 


<!-- ##### FUNCTION gtk_print_operation_get_error ##### -->
<para>

</para>

@op: 
@error: 


<!-- ##### FUNCTION gtk_print_operation_set_default_page_setup ##### -->
<para>

</para>

@op: 
@default_page_setup: 


<!-- ##### FUNCTION gtk_print_operation_get_default_page_setup ##### -->
<para>

</para>

@op: 
@Returns: 


<!-- ##### FUNCTION gtk_print_operation_set_print_settings ##### -->
<para>

</para>

@op: 
@print_settings: 


<!-- ##### FUNCTION gtk_print_operation_get_print_settings ##### -->
<para>

</para>

@op: 
@Returns: 


<!-- ##### FUNCTION gtk_print_operation_set_job_name ##### -->
<para>

</para>

@op: 
@job_name: 


<!-- ##### FUNCTION gtk_print_operation_set_n_pages ##### -->
<para>

</para>

@op: 
@n_pages: 


<!-- ##### FUNCTION gtk_print_operation_set_current_page ##### -->
<para>

</para>

@op: 
@current_page: 


<!-- ##### FUNCTION gtk_print_operation_set_use_full_page ##### -->
<para>

</para>

@op: 
@full_page: 


<!-- ##### FUNCTION gtk_print_operation_set_unit ##### -->
<para>

</para>

@op: 
@unit: 


<!-- ##### FUNCTION gtk_print_operation_set_export_filename ##### -->
<para>

</para>

@op: 
@filename: 


<!-- ##### FUNCTION gtk_print_operation_set_show_progress ##### -->
<para>

</para>

@op: 
@show_progress: 


<!-- ##### FUNCTION gtk_print_operation_set_track_print_status ##### -->
<para>

</para>

@op: 
@track_status: 


<!-- ##### FUNCTION gtk_print_operation_set_custom_tab_label ##### -->
<para>

</para>

@op: 
@label: 


<!-- ##### FUNCTION gtk_print_operation_run ##### -->
<para>

</para>

@op: 
@action: 
@parent: 
@error: 
@Returns: 


<!-- ##### FUNCTION gtk_print_operation_cancel ##### -->
<para>

</para>

@op: 


<!-- ##### FUNCTION gtk_print_operation_draw_page_finish ##### -->
<para>

</para>

@op: 


<!-- ##### FUNCTION gtk_print_operation_set_defer_drawing ##### -->
<para>

</para>

@op: 


<!-- ##### FUNCTION gtk_print_operation_get_status ##### -->
<para>

</para>

@op: 
@Returns: 


<!-- ##### FUNCTION gtk_print_operation_get_status_string ##### -->
<para>

</para>

@op: 
@Returns: 


<!-- ##### FUNCTION gtk_print_operation_is_finished ##### -->
<para>

</para>

@op: 
@Returns: 


<!-- ##### FUNCTION gtk_print_run_page_setup_dialog ##### -->
<para>

</para>

@parent: 
@page_setup: 
@settings: 
@Returns: 


<!-- ##### USER_FUNCTION GtkPageSetupDoneFunc ##### -->
<para>
The type of function that is passed to gtk_print_run_page_setup_dialog_async().
This function will be called when the page setup dialog is dismissed, and
also serves as destroy notify for @data.
</para>

@page_setup: the #GtkPageSetup that has been
@data: user data that has been passed to 
       gtk_print_run_page_setup_dialog_async().


<!-- ##### FUNCTION gtk_print_run_page_setup_dialog_async ##### -->
<para>

</para>

@parent: 
@page_setup: 
@settings: 
@done_cb: 
@data: 


<!-- ##### STRUCT GtkPrintOperationPreview ##### -->
<para>

</para>


<!-- ##### SIGNAL GtkPrintOperationPreview::got-page-size ##### -->
<para>

</para>

@printoperationpreview: the object which received the signal.
@arg1: 
@arg2: 

<!-- ##### SIGNAL GtkPrintOperationPreview::ready ##### -->
<para>

</para>

@printoperationpreview: the object which received the signal.
@arg1: 

<!-- ##### FUNCTION gtk_print_operation_preview_end_preview ##### -->
<para>

</para>

@preview: 


<!-- ##### FUNCTION gtk_print_operation_preview_is_selected ##### -->
<para>

</para>

@preview: 
@page_nr: 
@Returns: 


<!-- ##### FUNCTION gtk_print_operation_preview_render_page ##### -->
<para>

</para>

@preview: 
@page_nr: 


