printdialog: Search for printers

This makes it possible to set print settings
manually, and then call gtk_print_dialog_print_file
without getting a dialog.
diff --git a/gtk/gtkprintdialog.c b/gtk/gtkprintdialog.c
index 61f2106..ad626e9 100644
--- a/gtk/gtkprintdialog.c
+++ b/gtk/gtkprintdialog.c
@@ -812,6 +812,12 @@
 
   dialog = GTK_PRINT_UNIX_DIALOG (gtk_print_unix_dialog_new (self->title, parent));
 
+  if (self->print_settings)
+    gtk_print_unix_dialog_set_settings (dialog, self->print_settings);
+
+  if (self->default_page_setup)
+    gtk_print_unix_dialog_set_page_setup (dialog, self->default_page_setup);
+
   return dialog;
 }
 
@@ -924,6 +930,22 @@
   gtk_window_destroy (GTK_WINDOW (window));
 }
 
+static void
+try_to_find_printer (GtkPrintDialog *self)
+{
+  const char *name;
+  GtkPrinter *printer;
+
+  if (self->printer)
+    return;
+
+  if (!self->print_settings)
+    return;
+
+  name = gtk_print_settings_get (self->print_settings, GTK_PRINT_SETTINGS_PRINTER);
+  self->printer = gtk_printer_find (name);
+}
+
 /* }}} */
 /* {{{ Async API */
 
@@ -1059,6 +1081,8 @@
 
   if (!ensure_portal_proxy (self, &error))
     {
+      try_to_find_printer (self);
+
       if (!self->printer)
         {
           GtkPrintUnixDialog *window;
@@ -1164,6 +1188,8 @@
 
   if (!ensure_portal_proxy (self, &error))
     {
+      try_to_find_printer (self);
+
       if (!self->printer)
         {
           GtkPrintUnixDialog *window;