Commit 81051253 authored by Matthias Clasen's avatar Matthias Clasen

Remove sealed members from GtkPrintJob

Also add accessors for these members, and use them in print backends.
parent 5863382e
......@@ -6668,6 +6668,26 @@ gtk_print_job_get_surface
gtk_print_job_send
gtk_print_job_set_track_print_status
gtk_print_job_get_track_print_status
gtk_print_job_get_pages
gtk_print_job_set_pages
gtk_print_job_get_page_ranges
gtk_print_job_set_page_ranges
gtk_print_job_get_page_set
gtk_print_job_set_page_set
gtk_print_job_get_num_copies
gtk_print_job_set_num_copies
gtk_print_job_get_scale
gtk_print_job_set_scale
gtk_print_job_get_n_up
gtk_print_job_set_n_up
gtk_print_job_get_n_up_layout
gtk_print_job_set_n_up_layout
gtk_print_job_get_rotate
gtk_print_job_set_rotate
gtk_print_job_get_collate
gtk_print_job_set_collate
gtk_print_job_get_reverse
gtk_print_job_set_reverse
<SUBSECTION Standard>
GTK_TYPE_PRINT_JOB
......
......@@ -1776,7 +1776,17 @@ gtk_printer_set_is_paused
gtk_printer_set_job_count
gtk_printer_set_location
gtk_printer_set_state_message
gtk_print_job_get_collate
gtk_print_job_get_n_up
gtk_print_job_get_n_up_layout
gtk_print_job_get_num_copies
gtk_print_job_get_pages
gtk_print_job_get_page_ranges
gtk_print_job_get_page_set
gtk_print_job_get_printer
gtk_print_job_get_reverse
gtk_print_job_get_rotate
gtk_print_job_get_scale
gtk_print_job_get_settings
gtk_print_job_get_status
gtk_print_job_get_surface
......@@ -1785,6 +1795,16 @@ gtk_print_job_get_track_print_status
gtk_print_job_get_type G_GNUC_CONST
gtk_print_job_new
gtk_print_job_send
gtk_print_job_set_collate
gtk_print_job_set_n_up
gtk_print_job_set_n_up_layout
gtk_print_job_set_num_copies
gtk_print_job_set_pages
gtk_print_job_set_page_ranges
gtk_print_job_set_page_set
gtk_print_job_set_reverse
gtk_print_job_set_rotate
gtk_print_job_set_scale
gtk_print_job_set_source_file
gtk_print_job_set_status
gtk_print_job_set_track_print_status
......
......@@ -50,18 +50,29 @@ struct _GtkPrintJobPrivate
cairo_surface_t *surface;
GtkPrintStatus status;
GtkPrintBackend *backend;
GtkPrintBackend *backend;
GtkPrinter *printer;
GtkPrintSettings *settings;
GtkPageSetup *page_setup;
guint printer_set : 1;
guint page_setup_set : 1;
guint settings_set : 1;
guint track_print_status : 1;
GtkPrintPages print_pages;
GtkPageRange *page_ranges;
gint num_page_ranges;
GtkPageSet page_set;
gint num_copies;
gdouble scale;
guint number_up;
GtkNumberUpLayout number_up_layout;
guint printer_set : 1;
guint page_setup_set : 1;
guint settings_set : 1;
guint track_print_status : 1;
guint rotate_to_orientation : 1;
guint collate : 1;
guint reverse : 1;
};
#define GTK_PRINT_JOB_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_PRINT_JOB, GtkPrintJobPrivate))
......@@ -180,7 +191,7 @@ gtk_print_job_init (GtkPrintJob *job)
{
GtkPrintJobPrivate *priv;
priv = job->priv = GTK_PRINT_JOB_GET_PRIVATE (job);
priv = job->priv = GTK_PRINT_JOB_GET_PRIVATE (job);
priv->spool_io = NULL;
......@@ -194,18 +205,18 @@ gtk_print_job_init (GtkPrintJob *job)
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;
job->collate = FALSE;
job->reverse = FALSE;
job->num_copies = 1;
job->scale = 1.0;
job->page_set = GTK_PAGE_SET_ALL;
job->rotate_to_orientation = FALSE;
job->number_up = 1;
job->number_up_layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
priv->print_pages = GTK_PRINT_PAGES_ALL;
priv->page_ranges = NULL;
priv->num_page_ranges = 0;
priv->collate = FALSE;
priv->reverse = FALSE;
priv->num_copies = 1;
priv->scale = 1.0;
priv->page_set = GTK_PAGE_SET_ALL;
priv->rotate_to_orientation = FALSE;
priv->number_up = 1;
priv->number_up_layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
}
......@@ -250,7 +261,7 @@ gtk_print_job_finalize (GObject *object)
g_io_channel_unref (priv->spool_io);
priv->spool_io = NULL;
}
if (priv->backend)
g_object_unref (priv->backend);
......@@ -262,13 +273,13 @@ gtk_print_job_finalize (GObject *object)
if (priv->settings)
g_object_unref (priv->settings);
if (priv->page_setup)
g_object_unref (priv->page_setup);
g_free (job->page_ranges);
job->page_ranges = NULL;
g_free (priv->page_ranges);
priv->page_ranges = NULL;
g_free (priv->title);
priv->title = NULL;
......@@ -683,3 +694,330 @@ gtk_print_job_send (GtkPrintJob *job,
priv->spool_io,
callback, user_data, dnotify);
}
/**
* gtk_print_job_get_pages:
* @job: a #GtkPrintJob
*
* Gets the #GtkPrintPages setting for this job.
*
* Returns: the #GtkPrintPages setting
*
* Since: 3.0
*/
GtkPrintPages
gtk_print_job_get_pages (GtkPrintJob *job)
{
return job->priv->print_pages;
}
/**
* gtk_print_job_set_pages:
* @job: a #GtkPrintJob
* @pages: the #GtkPrintPages setting
*
* Sets the #GtkPrintPages setting for this job.
*
* Since: 3.0
*/
void
gtk_print_job_set_pages (GtkPrintJob *job,
GtkPrintPages pages)
{
job->priv->print_pages = pages;
}
/**
* gtk_print_job_get_page_ranges:
* @job: a #GtkPrintJob
* @n_ranges: (out): return location for the number of ranges
*
* Gets the page ranges for this job.
*
* Returns: a pointer to an array of #GtkPageRange structs
*
* Since: 3.0
*/
GtkPageRange *
gtk_print_job_get_page_ranges (GtkPrintJob *job,
gint *n_ranges)
{
*n_ranges = job->priv->num_page_ranges;
return job->priv->page_ranges;
}
/**
* gtk_print_job_set_page_ranges:
* @job: a #GtkPrintJob
* @ranges: pointer to an array of #GtkPageRange structs
* @n_ranges: the length of the @ranges array
*
* Sets the page ranges for this job.
*
* Since: 3.0
*/
void
gtk_print_job_set_page_ranges (GtkPrintJob *job,
GtkPageRange *ranges,
gint n_ranges)
{
job->priv->page_ranges = ranges;
job->priv->num_page_ranges = n_ranges;
}
/**
* gtk_print_job_get_page_set:
* @job: a #GtkPrintJob
*
* Gets the #GtkPageSet setting for this job.
*
* Returns: the #GtkPageSet setting
*
* Since: 3.0
*/
GtkPageSet
gtk_print_job_get_page_set (GtkPrintJob *job)
{
return job->priv->page_set;
}
/**
* gtk_print_job_set_page_set:
* @job: a #GtkPrintJob
* @page_set: a #GtkPageSet setting
*
* Sets the #GtkPageSet setting for this job.
*
* Since: 3.0
*/
void
gtk_print_job_set_page_set (GtkPrintJob *job,
GtkPageSet page_set)
{
job->priv->page_set = page_set;
}
/**
* gtk_print_job_get_num_copies:
* @job: a #GtkPrintJob
*
* Gets the number of copies of this job.
*
* Returns: the number of copies
*
* Since: 3.0
*/
gint
gtk_print_job_get_num_copies (GtkPrintJob *job)
{
return job->priv->num_copies;
}
/**
* gtk_print_job_set_num_copies:
* @job: a #GtkPrintJob
* @num_copies: the number of copies
*
* Sets the number of copies for this job.
*
* Since: 3.0
*/
void
gtk_print_job_set_num_copies (GtkPrintJob *job,
gint num_copies)
{
job->priv->num_copies = num_copies;
}
/**
* gtk_print_job_get_scale:
* @job: a #GtkPrintJob
*
* Gets the scale for this job (where 1.0 means unscaled).
*
* Returns: the scale
*
* Since: 3.0
*/
gdouble
gtk_print_job_get_scale (GtkPrintJob *job)
{
return job->priv->scale;
}
/**
* gtk_print_job_set_scale:
* @job: a #GtkPrintJob
* @scale: the scale
*
* Sets the scale for this job (where 1.0 means unscaled).
*
* Since: 3.0
*/
void
gtk_print_job_set_scale (GtkPrintJob *job,
gdouble scale)
{
job->priv->scale = scale;
}
/**
* gtk_print_job_get_n_up:
* @job: a #GtkPrintJob
*
* Gets the n-up setting for this job.
*
* Returns: the n-up setting
*
* Since: 3.0
*/
guint
gtk_print_job_get_n_up (GtkPrintJob *job)
{
return job->priv->number_up;
}
/**
* gtk_print_job_set_n_up:
* @job: a #GtkPrintJob
* @n_up: the n-up value
*
* Sets the n-up setting for this job.
*
* Since: 3.0
*/
void
gtk_print_job_set_n_up (GtkPrintJob *job,
guint n_up)
{
job->priv->number_up = n_up;
}
/**
* gtk_print_job_get_n_up_layout:
* @job: a #GtkPrintJob
*
* Gets the n-up layout setting for this job.
*
* Returns: the n-up layout
*
* Since: 3.0
*/
GtkNumberUpLayout
gtk_print_job_get_n_up_layout (GtkPrintJob *job)
{
return job->priv->number_up_layout;
}
/**
* gtk_print_job_set_n_up_layout:
* @job: a #GtkPrintJob
* @layout: the n-up layout setting
*
* Sets the n-up layout setting for this job.
*
* Since: 3.0
*/
void
gtk_print_job_set_n_up_layout (GtkPrintJob *job,
GtkNumberUpLayout layout)
{
job->priv->number_up_layout = layout;
}
/**
* gtk_print_job_get_rotate:
* @job: a #GtkPrintJob
*
* Gets whether the job is printed rotated.
*
* Returns: whether the job is printed rotated
*
* Since: 3.0
*/
gboolean
gtk_print_job_get_rotate (GtkPrintJob *job)
{
return job->priv->rotate_to_orientation;
}
/**
* gtk_print_job_set_rotate:
* @job: a #GtkPrintJob
* @rotate: whether to print rotated
*
* Sets whether this job is printed rotated.
*
* Since: 3.0
*/
void
gtk_print_job_set_rotate (GtkPrintJob *job,
gboolean rotate)
{
job->priv->rotate_to_orientation = rotate;
}
/**
* gtk_print_job_get_collate:
* @job: a #GtkPrintJob
*
* Gets whether this job is printed collated.
*
* Returns: whether the job is printed collated
*
* Since: 3.0
*/
gboolean
gtk_print_job_get_collate (GtkPrintJob *job)
{
return job->priv->collate;
}
/**
* gtk_print_job_set_collated:
* @job: a #GtkPrintJob
* @collate: whether the job is printed collated
*
* Sets whether this job is printed collated.
*
* Since: 3.0
*/
void
gtk_print_job_set_collate (GtkPrintJob *job,
gboolean collate)
{
job->priv->collate = collate;
}
/**
* gtk_print_job_get_reverse:
* @job: a #GtkPrintJob
*
* Gets whether this job is printed reversed.
*
* Returns: whether the job is printed reversed.
*
* Since: 3.0
*/
gboolean
gtk_print_job_get_reverse (GtkPrintJob *job)
{
return job->priv->reverse;
}
/**
* gtk_print_job_set_reverse:
* @job: a #GtkPrintJob
* @reverse: whether the job is printed reversed
*
* Sets whether this job is printed reversed.
*
* Since: 3.0
*/
void
gtk_print_job_set_reverse (GtkPrintJob *job,
gboolean reverse)
{
job->priv->reverse = reverse;
}
......@@ -52,22 +52,7 @@ struct _GtkPrintJob
{
GObject parent_instance;
GtkPrintJobPrivate *GSEAL (priv);
/* Settings the client has to implement:
* (These are read-only, set at initialization)
*/
GtkPrintPages GSEAL (print_pages);
GtkPageRange *GSEAL (page_ranges);
gint GSEAL (num_page_ranges);
GtkPageSet GSEAL (page_set);
gint GSEAL (num_copies);
gdouble GSEAL (scale);
guint GSEAL (rotate_to_orientation) : 1;
guint GSEAL (collate) : 1;
guint GSEAL (reverse) : 1;
guint GSEAL (number_up);
GtkNumberUpLayout GSEAL (number_up_layout);
GtkPrintJobPrivate *priv;
};
struct _GtkPrintJobClass
......@@ -105,6 +90,39 @@ void gtk_print_job_send (GtkPrintJob
gpointer user_data,
GDestroyNotify dnotify);
GtkPrintPages gtk_print_job_get_pages (GtkPrintJob *job);
void gtk_print_job_set_pages (GtkPrintJob *job,
GtkPrintPages pages);
GtkPageRange * gtk_print_job_get_page_ranges (GtkPrintJob *job,
gint *n_ranges);
void gtk_print_job_set_page_ranges (GtkPrintJob *job,
GtkPageRange *ranges,
gint n_ranges);
GtkPageSet gtk_print_job_get_page_set (GtkPrintJob *job);
void gtk_print_job_set_page_set (GtkPrintJob *job,
GtkPageSet page_set);
gint gtk_print_job_get_num_copies (GtkPrintJob *job);
void gtk_print_job_set_num_copies (GtkPrintJob *job,
gint num_copies);
gdouble gtk_print_job_get_scale (GtkPrintJob *job);
void gtk_print_job_set_scale (GtkPrintJob *job,
gdouble scale);
guint gtk_print_job_get_n_up (GtkPrintJob *job);
void gtk_print_job_set_n_up (GtkPrintJob *job,
guint n_up);
GtkNumberUpLayout gtk_print_job_get_n_up_layout (GtkPrintJob *job);
void gtk_print_job_set_n_up_layout (GtkPrintJob *job,
GtkNumberUpLayout layout);
gboolean gtk_print_job_get_rotate (GtkPrintJob *job);
void gtk_print_job_set_rotate (GtkPrintJob *job,
gboolean rotate);
gboolean gtk_print_job_get_collate (GtkPrintJob *job);
void gtk_print_job_set_collate (GtkPrintJob *job,
gboolean collate);
gboolean gtk_print_job_get_reverse (GtkPrintJob *job);
void gtk_print_job_set_reverse (GtkPrintJob *job,
gboolean reverse);
G_END_DECLS
#endif /* __GTK_PRINT_JOB_H__ */
......@@ -577,18 +577,16 @@ finish_print (PrintResponseData *rdata,
g_signal_connect (job, "status-changed",
G_CALLBACK (job_status_changed_cb), op);
priv->print_pages = job->print_pages;
priv->page_ranges = job->page_ranges;
priv->num_page_ranges = job->num_page_ranges;
priv->manual_num_copies = job->num_copies;
priv->manual_collation = job->collate;
priv->manual_reverse = job->reverse;
priv->manual_page_set = job->page_set;
priv->manual_scale = job->scale;
priv->manual_orientation = job->rotate_to_orientation;
priv->manual_number_up = job->number_up;
priv->manual_number_up_layout = job->number_up_layout;
priv->print_pages = gtk_print_job_get_pages (job);
priv->page_ranges = gtk_print_job_get_page_ranges (job, &priv->num_page_ranges);
priv->manual_num_copies = gtk_print_job_get_num_copies (job);
priv->manual_collation = gtk_print_job_get_collate (job);
priv->manual_reverse = gtk_print_job_get_reverse (job);
priv->manual_page_set = gtk_print_job_get_page_set (job);
priv->manual_scale = gtk_print_job_get_scale (job);
priv->manual_orientation = gtk_print_job_get_rotate (job);
priv->manual_number_up = gtk_print_job_get_n_up (job);
priv->manual_number_up_layout = gtk_print_job_get_n_up_layout (job);
}
}
out:
......
......@@ -4366,44 +4366,49 @@ cups_printer_prepare_for_print (GtkPrinter *printer,
GtkPrintSettings *settings,
GtkPageSetup *page_setup)
{
GtkPrintPages pages;
GtkPageRange *ranges;
gint n_ranges;
GtkPageSet page_set;
GtkPaperSize *paper_size;
const char *ppd_paper_name;
double scale;
print_job->print_pages = gtk_print_settings_get_print_pages (settings);
print_job->page_ranges = NULL;
print_job->num_page_ranges = 0;
if (print_job->print_pages == GTK_PRINT_PAGES_RANGES)
print_job->page_ranges =
gtk_print_settings_get_page_ranges (settings,
&print_job->num_page_ranges);
pages = gtk_print_settings_get_print_pages (settings);
gtk_print_job_set_pages (print_job, pages);
if (pages == GTK_PRINT_PAGES_RANGES)
ranges = gtk_print_settings_get_page_ranges (settings, &n_ranges);
else
{
ranges = NULL;
n_ranges = 0;
}
gtk_print_job_set_page_ranges (print_job, ranges, n_ranges);
if (gtk_print_settings_get_collate (settings))
gtk_print_settings_set (settings, "cups-Collate", "True");
print_job->collate = FALSE;
gtk_print_job_set_collate (print_job, FALSE);
if (gtk_print_settings_get_reverse (settings))
gtk_print_settings_set (settings, "cups-OutputOrder", "Reverse");
print_job->reverse = FALSE;
gtk_print_job_set_reverse (print_job, FALSE);
if (gtk_print_settings_get_n_copies (settings) > 1)
gtk_print_settings_set_int (settings, "cups-copies",
gtk_print_settings_get_n_copies (settings));
print_job->num_copies = 1;
gtk_print_settings_get_n_copies (settings));
gtk_print_job_set_num_copies (print_job, 1);
scale = gtk_print_settings_get_scale (settings);
print_job->scale = 1.0;
if (scale != 100.0)
print_job->scale = scale/100.0;
gtk_print_job_set_scale (print_job, scale / 100.0);
page_set = gtk_print_settings_get_page_set (settings);
if (page_set == GTK_PAGE_SET_EVEN)
gtk_print_settings_set (settings, "cups-page-set", "even");
else if (page_set == GTK_PAGE_SET_ODD)
gtk_print_settings_set (settings, "cups-page-set", "odd");
print_job->page_set = GTK_PAGE_SET_ALL;
gtk_print_job_set_page_set (print_job, GTK_PAGE_SET_ALL);
paper_size = gtk_page_setup_get_paper_size (page_setup);
ppd_paper_name = gtk_paper_size_get_ppd_name (paper_size);
......@@ -4455,7 +4460,7 @@ cups_printer_prepare_for_print (GtkPrinter *printer,
g_type_class_unref (enum_class);
}
print_job->rotate_to_orientation = TRUE;
gtk_print_job_set_rotate (print_job, TRUE);
}
static GtkPageSetup *
......
......@@ -706,28 +706,34 @@ file_printer_prepare_for_print (GtkPrinter *printer,
GtkPageSetup *page_setup)
{
gdouble scale;
GtkPrintPages pages;
GtkPageRange *ranges;
gint n_ranges;
print_job->print_pages = gtk_print_settings_get_print_pages (settings);
print_job->page_ranges = NULL;
print_job->num_page_ranges = 0;
if (print_job->print_pages == GTK_PRINT_PAGES_RANGES)
print_job->page_ranges =
gtk_print_settings_get_page_ranges (settings,
&print_job->num_page_ranges);
print_job->collate = gtk_print_settings_get_collate (settings);
print_job->reverse = gtk_print_settings_get_reverse (settings);
print_job->num_copies = gtk_print_settings_get_n_copies (settings);
print_job->number_up = gtk_print_settings_get_number_up (settings);
print_job->number_up_layout = gtk_print_settings_get_number_up_layout (settings);
pages = gtk_print_settings_get_print_pages (settings);
gtk_print_job_set_pages (print_job, pages);
if (pages == GTK_PRINT_PAGES_RANGES)
ranges = gtk_print_settings_get_page_ranges (settings, &n_ranges);
else
{
ranges = NULL;
n_ranges = 0;
}
gtk_print_job_set_page_ranges (print_job, ranges, n_ranges);
gtk_print_job_set_collate (print_job, gtk_print_settings_get_collate (settings));
gtk_print_job_set_reverse (print_job, gtk_print_settings_get_reverse (settings));
gtk_print_job_set_num_copies (print_job, gtk_print_settings_get_n_copies (settings));
gtk_print_job_set_n_up (print_job, gtk_print_settings_get_number_up (settings));
gtk_print_job_set_n_up_layout (print_job, gtk_print_settings_get_number_up_layout (settings));
scale = gtk_print_settings_get_scale (settings);
if (scale != 100.0)
print_job->scale = scale/100.0;
gtk_print_job_set_scale (print_job, scale / 100.0);
print_job->page_set = gtk_print_settings_get_page_set (settings);
print_job->rotate_to_orientation = TRUE;
gtk_print_job_set_page_set (print_job, gtk_print_settings_get_page_set (settings));
gtk_print_job_set_rotate (print_job, TRUE);
}
static GList *
......
......@@ -465,26 +465,32 @@ lpr_printer_prepare_for_print (GtkPrinter *printer,
GtkPageSetup *page_setup)
{
double scale;
GtkPrintPages pages;
GtkPageRange *ranges;
gint n_ranges;
print_job->print_pages = gtk_print_settings_get_print_pages (settings);
print_job->page_ranges = NULL;
print_job->num_page_ranges = 0;
if (print_job->print_pages == GTK_PRINT_PAGES_RANGES)
print_job->page_ranges =
gtk_print_settings_get_page_ranges (settings,
&print_job->num_page_ranges);
print_job->collate = gtk_print_settings_get_collate (settings);
print_job->reverse = gtk_print_settings_get_reverse (settings);
print_job->num_copies = gtk_print_settings_get_n_copies (settings);
print_job->number_up = gtk_print_settings_get_number_up (settings);
print_job->number_up_layout = gtk_print_settings_get_number_up_layout (settings);
pages = gtk_print_settings_get_print_pages (settings);
gtk_print_job_set_pages (print_job, pages);
if (pages == GTK_PRINT_PAGES_RANGES)
ranges = gtk_print_settings_get_page_ranges (settings, &n_ranges);
else
{