### Method

# Gtk PrintOperation run

#### Declaration [src]

    GtkPrintOperationResult
    gtk_print_operation_run (
      GtkPrintOperation* op,
      GtkPrintOperationAction action,
      GtkWindow* parent,
      GError** error
    )

#### Description [src]

Runs the print operation.

Normally that this function does not return until the rendering of all pages is complete. You can connect to the `GtkPrintOperation::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 `GtkPrintOperation::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_run()` can only be called once on a given `GtkPrintOperation`.

#### Parameters

`action`

  Type: `GtkPrintOperationAction`

  The action to start.

`parent`

  Type: `GtkWindow`

  Transient parent of the dialog.

  The argument can be `NULL`.
  The data is owned by the caller of the method.

`error`

  Type: `GError **`

  The return location for a recoverable error.

  The argument can be `NULL`.
  If the return location is not `NULL`, then you must initialize it to a `NULL` `GError*`.
  The argument will be left initialized to `NULL` by the method if there are no errors.
  In case of error, the argument will be set to a newly allocated `GError`; the caller will take ownership of the data, and be responsible for freeing it.

#### Return value

Type: `GtkPrintOperationResult`

The result of the print operation. A return value of `GTK_PRINT_OPERATION_RESULT_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_get_print_settings()` and store them for reuse with the next print operation. A value of `GTK_PRINT_OPERATION_RESULT_IN_PROGRESS` means the operation is running asynchronously, and will emit the `GtkPrintOperation::done` signal when done.