mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-10 10:50:10 +00:00
Improve the handling of the default output filename, to ensure that we
2006-08-17 Matthias Clasen <mclasen@redhat.com> * modules/printbackends/file/gtkprintbackendfile.c: Improve the handling of the default output filename, to ensure that we default to output.ps when only PostScript output is possible. (#348236, Don Scorgie)
This commit is contained in:
parent
c7ab7fb60b
commit
0e2e8d83f5
@ -1,5 +1,10 @@
|
||||
2006-08-17 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* modules/printbackends/file/gtkprintbackendfile.c: Improve
|
||||
the handling of the default output filename, to ensure
|
||||
that we default to output.ps when only PostScript output
|
||||
is possible. (#348236, Don Scorgie)
|
||||
|
||||
* gtk/gtkprintunixdialog.c (gtk_print_unix_dialog_set_manual_capabilities):
|
||||
Re-select the current printer to update per-printer ui.
|
||||
(#348245, Don Scorgie)
|
||||
|
@ -1,5 +1,10 @@
|
||||
2006-08-17 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* modules/printbackends/file/gtkprintbackendfile.c: Improve
|
||||
the handling of the default output filename, to ensure
|
||||
that we default to output.ps when only PostScript output
|
||||
is possible. (#348236, Don Scorgie)
|
||||
|
||||
* gtk/gtkprintunixdialog.c (gtk_print_unix_dialog_set_manual_capabilities):
|
||||
Re-select the current printer to update per-printer ui.
|
||||
(#348245, Don Scorgie)
|
||||
|
@ -181,6 +181,7 @@ gtk_print_backend_file_class_init (GtkPrintBackendFileClass *class)
|
||||
backend_class->printer_prepare_for_print = file_printer_prepare_for_print;
|
||||
}
|
||||
|
||||
/* return N_FORMATS if no explicit format in the settings */
|
||||
static OutputFormat
|
||||
format_from_settings (GtkPrintSettings *settings)
|
||||
{
|
||||
@ -188,22 +189,24 @@ format_from_settings (GtkPrintSettings *settings)
|
||||
gint i;
|
||||
|
||||
if (settings == NULL)
|
||||
return FORMAT_PDF;
|
||||
return N_FORMATS;
|
||||
|
||||
value = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT);
|
||||
if (value == NULL)
|
||||
return FORMAT_PDF;
|
||||
return N_FORMATS;
|
||||
|
||||
for (i = 0; i < N_FORMATS; ++i)
|
||||
if (strcmp (value, formats[i]) == 0)
|
||||
break;
|
||||
|
||||
g_assert (i < N_FORMATS);
|
||||
|
||||
return (OutputFormat) i;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
filename_from_settings (GtkPrintSettings *settings)
|
||||
filename_from_settings (GtkPrintSettings *settings,
|
||||
gchar *default_format)
|
||||
{
|
||||
gchar *filename;
|
||||
|
||||
@ -219,13 +222,23 @@ filename_from_settings (GtkPrintSettings *settings)
|
||||
/* FIXME: shouldn't we error out if we get an URI we cannot handle,
|
||||
* rather than to print to some random file somewhere?
|
||||
*/
|
||||
|
||||
if (filename == NULL)
|
||||
{
|
||||
gchar *extension;
|
||||
|
||||
if (default_format)
|
||||
extension = default_format;
|
||||
else
|
||||
{
|
||||
OutputFormat format;
|
||||
|
||||
format = format_from_settings (settings);
|
||||
extension = format == FORMAT_PS ? "ps" : "pdf";
|
||||
}
|
||||
|
||||
filename = g_strdup_printf ("output.%s", formats[format]);
|
||||
/* default filename used for print-to-file */
|
||||
filename = g_strdup_printf (_("output.%s"), extension);
|
||||
}
|
||||
|
||||
return filename;
|
||||
@ -281,10 +294,10 @@ file_printer_create_cairo_surface (GtkPrinter *printer,
|
||||
|
||||
format = format_from_settings (settings);
|
||||
|
||||
if (format == FORMAT_PDF)
|
||||
surface = cairo_pdf_surface_create_for_stream (_cairo_write, cache_io, width, height);
|
||||
else
|
||||
if (format == FORMAT_PS)
|
||||
surface = cairo_ps_surface_create_for_stream (_cairo_write, cache_io, width, height);
|
||||
else
|
||||
surface = cairo_pdf_surface_create_for_stream (_cairo_write, cache_io, width, height);
|
||||
|
||||
/* TODO: DPI from settings object? */
|
||||
cairo_surface_set_fallback_resolution (surface, 300, 300);
|
||||
@ -403,7 +416,7 @@ gtk_print_backend_file_print_stream (GtkPrintBackend *print_backend,
|
||||
ps->backend = print_backend;
|
||||
|
||||
internal_error = NULL;
|
||||
filename = filename_from_settings (settings);
|
||||
filename = filename_from_settings (settings, NULL);
|
||||
|
||||
ps->target_io = g_io_channel_new_file (filename, "w", &internal_error);
|
||||
|
||||
@ -463,10 +476,9 @@ file_printer_get_options (GtkPrinter *printer,
|
||||
gint n_formats = 0;
|
||||
OutputFormat format;
|
||||
gchar *filename;
|
||||
gint current_format;
|
||||
gint current_format = 0;
|
||||
|
||||
format = format_from_settings (settings);
|
||||
filename = filename_from_settings (settings);
|
||||
|
||||
set = gtk_printer_option_set_new ();
|
||||
|
||||
@ -477,24 +489,22 @@ file_printer_get_options (GtkPrinter *printer,
|
||||
gtk_printer_option_set_add (set, option);
|
||||
g_object_unref (option);
|
||||
|
||||
option = gtk_printer_option_new ("gtk-main-page-custom-input", _("File"), GTK_PRINTER_OPTION_TYPE_FILESAVE);
|
||||
gtk_printer_option_set (option, filename);
|
||||
option->group = g_strdup ("GtkPrintDialogExtension");
|
||||
gtk_printer_option_set_add (set, option);
|
||||
|
||||
if (capabilities & (GTK_PRINT_CAPABILITY_GENERATE_PDF | GTK_PRINT_CAPABILITY_GENERATE_PS))
|
||||
{
|
||||
if (capabilities & GTK_PRINT_CAPABILITY_GENERATE_PDF)
|
||||
{
|
||||
if (format == FORMAT_PDF)
|
||||
if (format == FORMAT_PDF || format == N_FORMATS)
|
||||
{
|
||||
format = FORMAT_PDF;
|
||||
current_format = n_formats;
|
||||
}
|
||||
supported_formats[n_formats] = formats[FORMAT_PDF];
|
||||
display_format_names[n_formats] = _(format_names[FORMAT_PDF]);
|
||||
n_formats++;
|
||||
}
|
||||
if (capabilities & GTK_PRINT_CAPABILITY_GENERATE_PS)
|
||||
{
|
||||
if (format == FORMAT_PS)
|
||||
if (format == FORMAT_PS || format == N_FORMATS)
|
||||
current_format = n_formats;
|
||||
supported_formats[n_formats] = formats[FORMAT_PS];
|
||||
display_format_names[n_formats] = _(format_names[FORMAT_PS]);
|
||||
@ -503,7 +513,7 @@ file_printer_get_options (GtkPrinter *printer,
|
||||
}
|
||||
else
|
||||
{
|
||||
current_format = format;
|
||||
current_format = format == FORMAT_PS ? FORMAT_PS : FORMAT_PDF;
|
||||
for (n_formats = 0; n_formats < N_FORMATS; ++n_formats)
|
||||
{
|
||||
supported_formats[n_formats] = formats[n_formats];
|
||||
@ -511,6 +521,14 @@ file_printer_get_options (GtkPrinter *printer,
|
||||
}
|
||||
}
|
||||
|
||||
filename = filename_from_settings (settings, supported_formats[current_format]);
|
||||
|
||||
option = gtk_printer_option_new ("gtk-main-page-custom-input", _("File"),
|
||||
GTK_PRINTER_OPTION_TYPE_FILESAVE);
|
||||
gtk_printer_option_set (option, filename);
|
||||
option->group = g_strdup ("GtkPrintDialogExtension");
|
||||
gtk_printer_option_set_add (set, option);
|
||||
|
||||
if (n_formats > 1)
|
||||
{
|
||||
option = gtk_printer_option_new ("output-file-format", _("_Output format"),
|
||||
@ -542,6 +560,7 @@ file_printer_get_settings_from_options (GtkPrinter *printer,
|
||||
option = gtk_printer_option_set_lookup (options, "output-file-format");
|
||||
if (option)
|
||||
gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, option->value);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user