summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2006-05-15 16:22:38 +0000
committerAlexander Larsson <alexl@src.gnome.org>2006-05-15 16:22:38 +0000
commit3f529199e5a2117333ae10cf2d50dd91eb286207 (patch)
treefa1ccceec4371bfabb412feb7c85acaecdefdd0b /gtk
parent9dc49c456352a29601f4cc4d675a22dbfd22668f (diff)
downloadgtk+-3f529199e5a2117333ae10cf2d50dd91eb286207.tar.gz
Added gtk_print_job_set/get_track_print_status
2006-05-15 Alexander Larsson <alexl@redhat.com> * gtk/gtkprintjob.[ch]: Added gtk_print_job_set/get_track_print_status * gtk/gtkprintoperation-private.h: * gtk/gtkprintoperation.[ch]: Add gtk_print_operation_set_track_print_status. * gtk/gtkprintoperation-unix.c: Implement track_print_status on unix * gtk/gtkprintoperation-win32.c: Implement track_print_status on win32 * gtk/gtk.symbols: Added symbols * modules/printbackends/cups/gtkprintbackendcups.c: Implement track_print_status for cups * tests/print-editor.c: Test track_print_status.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtk.symbols3
-rw-r--r--gtk/gtkprintjob.c61
-rw-r--r--gtk/gtkprintjob.h41
-rw-r--r--gtk/gtkprintoperation-private.h1
-rw-r--r--gtk/gtkprintoperation-unix.c4
-rw-r--r--gtk/gtkprintoperation-win32.c14
-rw-r--r--gtk/gtkprintoperation.c62
-rw-r--r--gtk/gtkprintoperation.h2
8 files changed, 159 insertions, 29 deletions
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 26d1226105..c6da83ee2e 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -2673,6 +2673,8 @@ gtk_print_job_set_status
gtk_print_job_set_source_file
gtk_print_job_get_surface
gtk_print_job_send
+gtk_print_job_set_track_print_status
+gtk_print_job_get_track_print_status
#endif
#endif
#endif
@@ -2693,6 +2695,7 @@ gtk_print_operation_set_use_full_page
gtk_print_operation_set_unit
gtk_print_operation_set_show_dialog
gtk_print_operation_set_pdf_target
+gtk_print_operation_set_track_print_status
gtk_print_operation_run
gtk_print_operation_run_async
gtk_print_operation_get_status
diff --git a/gtk/gtkprintjob.c b/gtk/gtkprintjob.c
index 1d2f6e3148..9745878084 100644
--- a/gtk/gtkprintjob.c
+++ b/gtk/gtkprintjob.c
@@ -55,9 +55,10 @@ struct _GtkPrintJobPrivate
GtkPrintSettings *settings;
GtkPageSetup *page_setup;
- gint printer_set : 1;
- gint page_setup_set : 1;
- gint settings_set : 1;
+ guint printer_set : 1;
+ guint page_setup_set : 1;
+ guint settings_set : 1;
+ guint track_print_status : 1;
};
@@ -180,7 +181,8 @@ gtk_print_job_init (GtkPrintJob *job)
priv->settings_set = FALSE;
priv->page_setup_set = FALSE;
priv->status = GTK_PRINT_STATUS_INITIAL;
-
+ priv->track_print_status = FALSE;
+
job->print_pages = GTK_PRINT_PAGES_ALL;
job->page_ranges = NULL;
job->num_page_ranges = 0;
@@ -473,6 +475,57 @@ gtk_print_job_get_surface (GtkPrintJob *job,
return priv->surface;
}
+/**
+ * gtk_print_job_set_track_print_status:
+ * @job: a #GtkPrintJob
+ * @track_status: %TRUE to track status after printing
+ *
+ * If track_status is %TRUE, the print job will try to continue report
+ * on the status of the print job in the printer queues and printer. This
+ * can allow your application to show things like "out of paper" issues,
+ * and when the print job actually reaches the printer.
+ *
+ * This function is often implemented using some form of polling, so it should
+ * not be enabled unless needed.
+ *
+ * Since: 2.10
+ */
+void
+gtk_print_job_set_track_print_status (GtkPrintJob *job,
+ gboolean track_status)
+{
+ GtkPrintJobPrivate *priv;
+
+ g_return_if_fail (GTK_IS_PRINT_JOB (job));
+
+ priv = job->priv;
+
+ priv->track_print_status = track_status;
+}
+
+/**
+ * gtk_print_job_get_track_print_status:
+ * @job: a #GtkPrintJob
+ *
+ * Returns wheter jobs will be tracked after printing.
+ * For details, see gtk_print_job_set_track_print_status().
+ *
+ * Return value: %TRUE if print job status will be reported after printing
+ *
+ * Since: 2.10
+ */
+gboolean
+gtk_print_job_get_track_print_status (GtkPrintJob *job)
+{
+ GtkPrintJobPrivate *priv;
+
+ g_return_val_if_fail (GTK_IS_PRINT_JOB (job), FALSE);
+
+ priv = job->priv;
+
+ return priv->track_print_status;
+}
+
static void
gtk_print_job_set_property (GObject *object,
guint prop_id,
diff --git a/gtk/gtkprintjob.h b/gtk/gtkprintjob.h
index 6b9cfeb0ed..328ddb411c 100644
--- a/gtk/gtkprintjob.h
+++ b/gtk/gtkprintjob.h
@@ -82,25 +82,28 @@ struct _GtkPrintJobClass
};
GType gtk_print_job_get_type (void) G_GNUC_CONST;
-GtkPrintJob *gtk_print_job_new (const gchar *title,
- GtkPrinter *printer,
- GtkPrintSettings *settings,
- GtkPageSetup *page_setup);
-GtkPrintSettings *gtk_print_job_get_settings (GtkPrintJob *job);
-GtkPrinter *gtk_print_job_get_printer (GtkPrintJob *job);
-G_CONST_RETURN gchar *gtk_print_job_get_title (GtkPrintJob *job);
-GtkPrintStatus gtk_print_job_get_status (GtkPrintJob *job);
-
-gboolean gtk_print_job_set_source_file (GtkPrintJob *job,
- const gchar *filename,
- GError **error);
-cairo_surface_t *gtk_print_job_get_surface (GtkPrintJob *job,
- GError **error);
-gboolean gtk_print_job_send (GtkPrintJob *job,
- GtkPrintJobCompleteFunc callback,
- gpointer user_data,
- GDestroyNotify dnotify,
- GError **error);
+GtkPrintJob *gtk_print_job_new (const gchar *title,
+ GtkPrinter *printer,
+ GtkPrintSettings *settings,
+ GtkPageSetup *page_setup);
+GtkPrintSettings *gtk_print_job_get_settings (GtkPrintJob *job);
+GtkPrinter *gtk_print_job_get_printer (GtkPrintJob *job);
+G_CONST_RETURN gchar *gtk_print_job_get_title (GtkPrintJob *job);
+GtkPrintStatus gtk_print_job_get_status (GtkPrintJob *job);
+gboolean gtk_print_job_set_source_file (GtkPrintJob *job,
+ const gchar *filename,
+ GError **error);
+cairo_surface_t *gtk_print_job_get_surface (GtkPrintJob *job,
+ GError **error);
+void gtk_print_job_set_track_print_status (GtkPrintJob *job,
+ gboolean track_status);
+gboolean gtk_print_job_get_track_print_status (GtkPrintJob *job);
+gboolean gtk_print_job_send (GtkPrintJob *job,
+ GtkPrintJobCompleteFunc callback,
+ gpointer user_data,
+ GDestroyNotify dnotify,
+ GError **error);
+
G_END_DECLS
diff --git a/gtk/gtkprintoperation-private.h b/gtk/gtkprintoperation-private.h
index 2213967162..194122f2da 100644
--- a/gtk/gtkprintoperation-private.h
+++ b/gtk/gtkprintoperation-private.h
@@ -37,6 +37,7 @@ struct _GtkPrintOperationPrivate
gboolean use_full_page;
GtkUnit unit;
gboolean show_dialog;
+ gboolean track_print_status;
char *pdf_target;
/* Data for the print job: */
diff --git a/gtk/gtkprintoperation-unix.c b/gtk/gtkprintoperation-unix.c
index a411445462..7812e54e29 100644
--- a/gtk/gtkprintoperation-unix.c
+++ b/gtk/gtkprintoperation-unix.c
@@ -233,7 +233,9 @@ finish_print (PrintResponseData *rdata,
printer,
settings,
page_setup);
-
+
+ gtk_print_job_set_track_print_status (op_unix->job, priv->track_print_status);
+
rdata->op->priv->surface = gtk_print_job_get_surface (op_unix->job, rdata->error);
if (op->priv->surface == NULL)
{
diff --git a/gtk/gtkprintoperation-win32.c b/gtk/gtkprintoperation-win32.c
index 6b6ad5b627..8383434089 100644
--- a/gtk/gtkprintoperation-win32.c
+++ b/gtk/gtkprintoperation-win32.c
@@ -471,11 +471,15 @@ win32_end_run (GtkPrintOperation *op)
HANDLE printerHandle = 0;
EndDoc (op_win32->hdc);
- devnames = GlobalLock (op_win32->devnames);
- if (!OpenPrinterW (((gunichar2 *)devnames) + devnames->wDeviceOffset,
- &printerHandle, NULL))
- printerHandle = 0;
- GlobalUnlock (op_win32->devnames);
+
+ if (op->track_print_status)
+ {
+ devnames = GlobalLock (op_win32->devnames);
+ if (!OpenPrinterW (((gunichar2 *)devnames) + devnames->wDeviceOffset,
+ &printerHandle, NULL))
+ printerHandle = 0;
+ GlobalUnlock (op_win32->devnames);
+ }
GlobalFree(op_win32->devmode);
GlobalFree(op_win32->devnames);
diff --git a/gtk/gtkprintoperation.c b/gtk/gtkprintoperation.c
index 7a2e7d90f2..5756f3bba7 100644
--- a/gtk/gtkprintoperation.c
+++ b/gtk/gtkprintoperation.c
@@ -46,6 +46,7 @@ enum {
PROP_N_PAGES,
PROP_CURRENT_PAGE,
PROP_USE_FULL_PAGE,
+ PROP_TRACK_PRINT_STATUS,
PROP_UNIT,
PROP_SHOW_DIALOG,
PROP_PDF_TARGET,
@@ -118,6 +119,7 @@ gtk_print_operation_init (GtkPrintOperation *operation)
priv->use_full_page = FALSE;
priv->show_dialog = TRUE;
priv->pdf_target = NULL;
+ priv->track_print_status = FALSE;
priv->unit = GTK_UNIT_PIXEL;
@@ -153,6 +155,9 @@ gtk_print_operation_set_property (GObject *object,
case PROP_USE_FULL_PAGE:
gtk_print_operation_set_use_full_page (op, g_value_get_boolean (value));
break;
+ case PROP_TRACK_PRINT_STATUS:
+ gtk_print_operation_set_track_print_status (op, g_value_get_boolean (value));
+ break;
case PROP_UNIT:
gtk_print_operation_set_unit (op, g_value_get_enum (value));
break;
@@ -197,6 +202,9 @@ gtk_print_operation_get_property (GObject *object,
case PROP_USE_FULL_PAGE:
g_value_set_boolean (value, priv->use_full_page);
break;
+ case PROP_TRACK_PRINT_STATUS:
+ g_value_set_boolean (value, priv->track_print_status);
+ break;
case PROP_UNIT:
g_value_set_enum (value, priv->unit);
break;
@@ -471,6 +479,26 @@ gtk_print_operation_class_init (GtkPrintOperationClass *class)
/**
+ * GtkPrintOperation:track-print-status:
+ *
+ * If %TRUE, the print operation will try to continue report on the status of
+ * the print job in the printer queues and printer. This can allow your
+ * application to show things like "out of paper" issues, and when the
+ * print job actually reaches the printer. However, this is often
+ * implemented using polling, and should not be enabled unless needed.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_USE_FULL_PAGE,
+ g_param_spec_boolean ("track-print-status",
+ P_("Track Print Status"),
+ P_("If %TRUE then the print operation will continue to report on the print job status after the print data has been sent to the printer or print server."),
+ FALSE,
+ GTK_PARAM_READWRITE));
+
+
+ /**
* GtkPrintOperation:unit:
*
* The transformation for the cairo context obtained from
@@ -870,6 +898,40 @@ gtk_print_operation_set_unit (GtkPrintOperation *op,
}
}
+/**
+ * gtk_print_operation_set_track_print_status:
+ * @op: a #GtkPrintOperation
+ * @track_status: %TRUE to track status after printing
+ *
+ * If track_status is %TRUE, the print operation will try to continue report
+ * on the status of the print job in the printer queues and printer. This
+ * can allow your application to show things like "out of paper" issues,
+ * and when the print job actually reaches the printer.
+ *
+ * This function is often implemented using some form of polling, so it should
+ * not be enabled unless needed.
+ *
+ * Since: 2.10
+ */
+void
+gtk_print_operation_set_track_print_status (GtkPrintOperation *op,
+ gboolean track_status)
+{
+ GtkPrintOperationPrivate *priv;
+
+ g_return_if_fail (GTK_IS_PRINT_OPERATION (op));
+
+ priv = op->priv;
+
+ if (priv->track_print_status != track_status)
+ {
+ priv->track_print_status = track_status;
+
+ g_object_notify (G_OBJECT (op), "track-print-status");
+ }
+}
+
+
void
_gtk_print_operation_set_status (GtkPrintOperation *op,
GtkPrintStatus status,
diff --git a/gtk/gtkprintoperation.h b/gtk/gtkprintoperation.h
index b86f9869c8..dd3a4a8617 100644
--- a/gtk/gtkprintoperation.h
+++ b/gtk/gtkprintoperation.h
@@ -128,6 +128,8 @@ void gtk_print_operation_set_show_dialog (GtkPrintOper
gboolean show_dialog);
void gtk_print_operation_set_pdf_target (GtkPrintOperation *op,
const gchar *filename);
+void gtk_print_operation_set_track_print_status (GtkPrintOperation *op,
+ gboolean track_status);
GtkPrintOperationResult gtk_print_operation_run (GtkPrintOperation *op,
GtkWindow *parent,
GError **error);