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;