diff options
author | Matthias Clasen <mclasen@redhat.com> | 2008-09-17 22:07:10 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2008-09-17 22:07:10 +0000 |
commit | 8ec27f776004b14839742829a85be9e580ff2799 (patch) | |
tree | 021114df61a35a9a48121b0e49ecb2aea5300ca3 /gtk/gtkprintbackend.c | |
parent | df619a1370273305726416fc5eb04b46c267915c (diff) | |
download | gtk+-8ec27f776004b14839742829a85be9e580ff2799.tar.gz |
Bug 346903 – gtk_enumerate_printers needs events to complete
2008-09-17 Matthias Clasen <mclasen@redhat.com>
Bug 346903 – gtk_enumerate_printers needs events to complete
* gtk/gtkprintbackend.h:
* gtk/gtkprintbackend.c: Add a GtkPrintBackend::status property.
* modules/printbackends/cups/gtkcupsutils.h:
* modules/printbackends/cups/gtkcupsutils.c: Turn the connection
test into a tristate available/unavailable/in progress.
* modules/printbackends/cups/gtkprintbackendcups.c: Use a single
connection test instance for getting the default printer and for
getting the printer list. Set the GtkPrintBackend::status property
according to the result of the connection test. Use the printer-type
attribute to find the default printer, if cups supports it.
* gtk/gtkprinter.c: When enumerating printers, give up when
the backend status is 'unavailable'.
* gtk/gtkprintunixdialog.c (printer_status_cb): Select the printer
when it is the default and nothing else has been selected yet.
svn path=/trunk/; revision=21417
Diffstat (limited to 'gtk/gtkprintbackend.c')
-rw-r--r-- | gtk/gtkprintbackend.c | 76 |
1 files changed, 74 insertions, 2 deletions
diff --git a/gtk/gtkprintbackend.c b/gtk/gtkprintbackend.c index e9c00d8f25..1f21aaf8e1 100644 --- a/gtk/gtkprintbackend.c +++ b/gtk/gtkprintbackend.c @@ -33,13 +33,22 @@ #define GTK_PRINT_BACKEND_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_PRINT_BACKEND, GtkPrintBackendPrivate)) -static void gtk_print_backend_dispose (GObject *object); +static void gtk_print_backend_dispose (GObject *object); +static void gtk_print_backend_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void gtk_print_backend_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); struct _GtkPrintBackendPrivate { GHashTable *printers; guint printer_list_requested : 1; guint printer_list_done : 1; + GtkPrintBackendStatus status; }; enum { @@ -53,6 +62,12 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; +enum +{ + PROP_ZERO, + PROP_STATUS +}; + static GObjectClass *backend_parent_class; GQuark @@ -173,6 +188,50 @@ _gtk_print_backend_module_class_init (GtkPrintBackendModuleClass *class) gobject_class->finalize = gtk_print_backend_module_finalize; } +static void +gtk_print_backend_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkPrintBackend *backend = GTK_PRINT_BACKEND (object); + GtkPrintBackendPrivate *priv; + + priv = backend->priv = GTK_PRINT_BACKEND_GET_PRIVATE (backend); + + switch (prop_id) + { + case PROP_STATUS: + priv->status = g_value_get_int (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_print_backend_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkPrintBackend *backend = GTK_PRINT_BACKEND (object); + GtkPrintBackendPrivate *priv; + + priv = backend->priv = GTK_PRINT_BACKEND_GET_PRIVATE (backend); + + switch (prop_id) + { + case PROP_STATUS: + g_value_set_int (value, priv->status); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + static void _gtk_print_backend_module_init (GtkPrintBackendModule *pb_module) { @@ -304,6 +363,8 @@ gtk_print_backend_class_init (GtkPrintBackendClass *class) backend_parent_class = g_type_class_peek_parent (class); object_class->dispose = gtk_print_backend_dispose; + object_class->set_property = gtk_print_backend_set_property; + object_class->get_property = gtk_print_backend_get_property; class->printer_request_details = fallback_printer_request_details; class->printer_mark_conflicts = fallback_printer_mark_conflicts; @@ -312,6 +373,16 @@ gtk_print_backend_class_init (GtkPrintBackendClass *class) class->printer_get_default_page_size = fallback_printer_get_default_page_size; class->printer_get_capabilities = fallback_printer_get_capabilities; + g_object_class_install_property (object_class, + PROP_STATUS, + g_param_spec_int ("status", + "Status", + "The status of the print backend", + GTK_PRINT_BACKEND_STATUS_UNKNOWN, + GTK_PRINT_BACKEND_STATUS_UNAVAILABLE, + GTK_PRINT_BACKEND_STATUS_UNKNOWN, + GTK_PARAM_READWRITE)); + g_type_class_add_private (class, sizeof (GtkPrintBackendPrivate)); signals[PRINTER_LIST_CHANGED] = @@ -520,7 +591,7 @@ gtk_print_backend_get_printer_list (GtkPrintBackend *backend) GTK_PRINT_BACKEND_GET_CLASS (backend)->request_printer_list (backend); priv->printer_list_requested = TRUE; } - + return result; } @@ -581,5 +652,6 @@ gtk_print_backend_destroy (GtkPrintBackend *print_backend) g_object_run_dispose (G_OBJECT (print_backend)); } + #define __GTK_PRINT_BACKEND_C__ #include "gtkaliasdef.c" |