summaryrefslogtreecommitdiff
path: root/gtk/gtkprintbackend.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2008-09-17 22:07:10 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-09-17 22:07:10 +0000
commit8ec27f776004b14839742829a85be9e580ff2799 (patch)
tree021114df61a35a9a48121b0e49ecb2aea5300ca3 /gtk/gtkprintbackend.c
parentdf619a1370273305726416fc5eb04b46c267915c (diff)
downloadgtk+-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.c76
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"