Commit 81051253 authored by Matthias Clasen's avatar Matthias Clasen
Browse files

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));