summaryrefslogtreecommitdiff
path: root/gtk/gtkprinter.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkprinter.c')
-rw-r--r--gtk/gtkprinter.c67
1 files changed, 39 insertions, 28 deletions
diff --git a/gtk/gtkprinter.c b/gtk/gtkprinter.c
index 4ae748cec0..e9a197cb9c 100644
--- a/gtk/gtkprinter.c
+++ b/gtk/gtkprinter.c
@@ -52,7 +52,6 @@ struct _GtkPrinterPrivate
gchar *state_message;
gint job_count;
- /* Not ref:ed, backend owns printer. */
GtkPrintBackend *backend;
};
@@ -215,6 +214,9 @@ gtk_printer_finalize (GObject *object)
g_free (priv->state_message);
g_free (priv->icon_name);
+ if (priv->backend)
+ g_object_unref (priv->backend);
+
G_OBJECT_CLASS (gtk_printer_parent_class)->finalize (object);
}
@@ -234,7 +236,7 @@ gtk_printer_set_property (GObject *object,
break;
case PROP_BACKEND:
- priv->backend = GTK_PRINT_BACKEND (g_value_get_object (value));
+ priv->backend = GTK_PRINT_BACKEND (g_value_dup_object (value));
break;
case PROP_IS_VIRTUAL:
@@ -340,16 +342,6 @@ gtk_printer_get_backend (GtkPrinter *printer)
return printer->priv->backend;
}
-void
-gtk_printer_set_backend (GtkPrinter *printer,
- GtkPrintBackend *backend)
-{
- g_return_if_fail (GTK_IS_PRINTER (printer));
- g_return_if_fail (GTK_IS_PRINT_BACKEND (backend));
-
- printer->priv->backend = backend;
-}
-
/**
* gtk_printer_get_name:
* @printer: a #GtkPrinter
@@ -663,8 +655,8 @@ gtk_printer_set_is_default (GtkPrinter *printer,
void
_gtk_printer_request_details (GtkPrinter *printer)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
- return backend_iface->printer_request_details (printer);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+ return backend_class->printer_request_details (printer);
}
GtkPrinterOptionSet *
@@ -672,16 +664,16 @@ _gtk_printer_get_options (GtkPrinter *printer,
GtkPrintSettings *settings,
GtkPageSetup *page_setup)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
- return backend_iface->printer_get_options (printer, settings, page_setup);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+ return backend_class->printer_get_options (printer, settings, page_setup);
}
gboolean
_gtk_printer_mark_conflicts (GtkPrinter *printer,
GtkPrinterOptionSet *options)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
- return backend_iface->printer_mark_conflicts (printer, options);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+ return backend_class->printer_mark_conflicts (printer, options);
}
void
@@ -689,8 +681,8 @@ _gtk_printer_get_settings_from_options (GtkPrinter *printer,
GtkPrinterOptionSet *options,
GtkPrintSettings *settings)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
- return backend_iface->printer_get_settings_from_options (printer, options, settings);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+ return backend_class->printer_get_settings_from_options (printer, options, settings);
}
void
@@ -699,8 +691,8 @@ _gtk_printer_prepare_for_print (GtkPrinter *printer,
GtkPrintSettings *settings,
GtkPageSetup *page_setup)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
- return backend_iface->printer_prepare_for_print (printer, print_job, settings, page_setup);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+ return backend_class->printer_prepare_for_print (printer, print_job, settings, page_setup);
}
cairo_surface_t *
@@ -709,17 +701,17 @@ _gtk_printer_create_cairo_surface (GtkPrinter *printer,
gdouble height,
gint cache_fd)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
- return backend_iface->printer_create_cairo_surface (printer, width, height, cache_fd);
+ return backend_class->printer_create_cairo_surface (printer, width, height, cache_fd);
}
GList *
_gtk_printer_list_papers (GtkPrinter *printer)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
- return backend_iface->printer_list_papers (printer);
+ return backend_class->printer_list_papers (printer);
}
void
@@ -729,9 +721,28 @@ _gtk_printer_get_hard_margins (GtkPrinter *printer,
gdouble *left,
gdouble *right)
{
- GtkPrintBackendIface *backend_iface = GTK_PRINT_BACKEND_GET_IFACE (printer->priv->backend);
+ GtkPrintBackendClass *backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
- backend_iface->printer_get_hard_margins (printer, top, bottom, left, right);
+ backend_class->printer_get_hard_margins (printer, top, bottom, left, right);
+}
+
+gint
+gtk_printer_compare (GtkPrinter *a, GtkPrinter *b)
+{
+ const char *name_a, *name_b;
+
+ g_assert (GTK_IS_PRINTER (a) && GTK_IS_PRINTER (b));
+
+ name_a = gtk_printer_get_name (a);
+ name_b = gtk_printer_get_name (b);
+ if (name_a == NULL && name_b == NULL)
+ return 0;
+ else if (name_a == NULL)
+ return G_MAXINT;
+ else if (name_b == NULL)
+ return G_MININT;
+ else
+ return g_ascii_strcasecmp (name_a, name_b);
}
#define __GTK_PRINTER_C__