summaryrefslogtreecommitdiff
path: root/gtk/gtkprinter.c
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2006-06-25 08:24:34 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-06-25 08:24:34 +0000
commit5639c85057db4a171c5041bb2c625f7b7446f132 (patch)
treec38bf20655e3d8359287afc8dc93183892bf085b /gtk/gtkprinter.c
parent13f2e4fb1b1b76c547560a7b78a081829e0c78cd (diff)
downloadgtk+-5639c85057db4a171c5041bb2c625f7b7446f132.tar.gz
Fix printer enumeration
Diffstat (limited to 'gtk/gtkprinter.c')
-rw-r--r--gtk/gtkprinter.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/gtk/gtkprinter.c b/gtk/gtkprinter.c
index 3ebab87e5f..dc5d205948 100644
--- a/gtk/gtkprinter.c
+++ b/gtk/gtkprinter.c
@@ -834,27 +834,35 @@ stop_enumeration (PrinterList *printer_list)
backend = GTK_PRINT_BACKEND (list->data);
list_done_cb (backend, printer_list);
}
+}
+static void
+free_printer_list (PrinterList *printer_list)
+{
if (printer_list->destroy)
printer_list->destroy (printer_list->data);
if (printer_list->loop)
{
g_main_loop_quit (printer_list->loop);
-
g_main_loop_unref (printer_list->loop);
}
g_free (printer_list);
}
-static void
+static gboolean
list_added_cb (GtkPrintBackend *backend,
GtkPrinter *printer,
PrinterList *printer_list)
{
if (printer_list->func (printer, printer_list->data))
- stop_enumeration (printer_list);
+ {
+ stop_enumeration (printer_list);
+ return TRUE;
+ }
+
+ return FALSE;
}
static void
@@ -870,20 +878,25 @@ list_done_cb (GtkPrintBackend *backend,
g_object_unref (backend);
if (printer_list->backends == NULL)
- stop_enumeration (printer_list);
+ free_printer_list (printer_list);
}
-static void
+static gboolean
list_printers_init (PrinterList *printer_list,
GtkPrintBackend *backend)
{
- GList *list;
- GList *node;
+ GList *list, *node;
list = gtk_print_backend_get_printer_list (backend);
for (node = list; node != NULL; node = node->next)
- list_added_cb (backend, node->data, printer_list);
+ {
+ if (list_added_cb (backend, node->data, printer_list))
+ {
+ g_list_free (list);
+ return TRUE;
+ }
+ }
g_list_free (list);
@@ -903,6 +916,7 @@ list_printers_init (PrinterList *printer_list,
printer_list);
}
+ return FALSE;
}
/**
@@ -941,7 +955,8 @@ gtk_enumerate_printers (GtkPrinterFunc func,
{
next = node->next;
backend = GTK_PRINT_BACKEND (node->data);
- list_printers_init (printer_list, backend);
+ if (list_printers_init (printer_list, backend))
+ return;
}
if (wait && printer_list->backends)