-static gboolean
-ev_window_enumerate_printer_cb (GtkPrinter *printer,
- EvWindow *window)
-{
- EvWindowPrivate *priv = window->priv;
- const gchar *printer_name;
-
- printer_name = gtk_print_settings_get_printer (priv->print_settings);
- if ((printer_name
- && strcmp (printer_name, gtk_printer_get_name (printer)) == 0) ||
- (!printer_name && gtk_printer_is_default (printer))) {
- if (priv->printer)
- g_object_unref (priv->printer);
- priv->printer = g_object_ref (printer);
-
- /* Now that we have the printer, we'll start the print */
- ev_window_do_preview_print (window);
-
- return TRUE; /* we're done */
- }
-
- return FALSE; /* continue the enumeration */
-}
-
-static void
-ev_window_preview_print_finished (GtkPrintJob *print_job,
- EvWindow *window,
- GError *error)
-{
- if (error) {
- ev_window_error_message (window, error,
- "%s", _("Failed to print document"));
- }
-
- g_object_unref (print_job);
- gtk_widget_destroy (GTK_WIDGET (window));
-}
-
-static void
-ev_window_do_preview_print (EvWindow *window)
-{
- EvWindowPrivate *priv = window->priv;
- GtkPrintJob *job;
- gchar *filename;
- GError *error = NULL;
-
- g_assert (priv->print_settings != NULL);
- g_assert (priv->printer != NULL);
-
- job = gtk_print_job_new (gtk_window_get_title (GTK_WINDOW (window)),
- priv->printer,
- priv->print_settings,
- priv->print_page_setup);
-
- g_object_unref (priv->print_settings);
- priv->print_settings = NULL;
- g_object_unref (priv->print_page_setup);
- priv->print_page_setup = NULL;
- g_object_unref (priv->printer);
- priv->printer = NULL;
-
- filename = g_filename_from_uri (priv->local_uri ?
- priv->local_uri : priv->uri,
- NULL, NULL);
-
- if (gtk_print_job_set_source_file (job, filename, &error)) {
- gtk_print_job_send (job,
- (GtkPrintJobCompleteFunc)ev_window_preview_print_finished,
- window, NULL);
- } else {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
-
- g_free (filename);
-
- gtk_widget_hide (GTK_WIDGET (window));
-}
-
-static void
-ev_window_cmd_preview_print (GtkAction *action, EvWindow *window)
-{
- EvWindowPrivate *priv = window->priv;
- GtkPrintSettings *print_settings;
- GtkPageSetup *page_setup;
- const gchar *print_settings_file = priv->print_settings_file;
-
- if (print_settings_file && g_file_test (print_settings_file, G_FILE_TEST_IS_REGULAR)) {
- GKeyFile *key_file;
- GError *error = NULL;
-
- key_file = g_key_file_new ();
- g_key_file_load_from_file (key_file,
- print_settings_file,
- G_KEY_FILE_KEEP_COMMENTS |
- G_KEY_FILE_KEEP_TRANSLATIONS,
- &error);
- if (!error) {
- print_settings =
- gtk_print_settings_new_from_key_file (key_file,
- "Print Settings",
- NULL);
- print_settings = print_settings ? print_settings : gtk_print_settings_new ();
-
- page_setup = gtk_page_setup_new_from_key_file (key_file,
- "Page Setup",
- NULL);
- page_setup = page_setup ? page_setup : gtk_page_setup_new ();
- } else {
- print_settings = gtk_print_settings_new ();
- page_setup = gtk_page_setup_new ();
- g_error_free (error);
- }
-
- g_key_file_free (key_file);
- } else {
- print_settings = gtk_print_settings_new ();
- page_setup = gtk_page_setup_new ();
- }
-
- if (priv->print_settings)
- g_object_unref (priv->print_settings);
- priv->print_settings = print_settings;
- if (priv->print_page_setup)
- g_object_unref (priv->print_page_setup);
- priv->print_page_setup = page_setup;
-
- gtk_enumerate_printers ((GtkPrinterFunc) ev_window_enumerate_printer_cb,
- window, NULL, FALSE);
-}
-