Stephen Gunn writes:
> I'm running Firefox 60.0_2,1 on 11.1-RELEASE-p10. In the print
> dialog, the option 'Print to LPR' no longer shows up, only 'Print to
> File'. If I install firefox-esr, then 'Print to LPR' is again
> present.
LPR backend doesn't support PDF, so 'Print to LPR' disappeared after
Firefox 59 removed GTK_PRINT_CAPABILITY_GENERATE_PS. Try the attached
patch to confirm.
https://bugzilla.mozilla.org/show_bug.cgi?id=1425188
https://bugzilla.mozilla.org/show_bug.cgi?id=1322653
Revert bug 1425188 in order to restore 'Print to LPR' option.
diff --git widget/gtk/nsDeviceContextSpecG.cpp
widget/gtk/nsDeviceContextSpecG.cpp
index a90f13b43b006..ca2449aa766f5 100644
--- widget/gtk/nsDeviceContextSpecG.cpp
+++ widget/gtk/nsDeviceContextSpecG.cpp
@@ -150,8 +150,8 @@ already_AddRefed
nsDeviceContextSpecGTK::MakePrintTarget()
// Determine the real format with some GTK magic
if (format == nsIPrintSettings::kOutputFormatNative) {
if (mIsPPreview) {
- // There is nothing to detect on Print Preview, use PDF.
- format = nsIPrintSettings::kOutputFormatPDF;
+ // There is nothing to detect on Print Preview, use PS.
+ format = nsIPrintSettings::kOutputFormatPS;
} else {
return nullptr;
}
diff --git widget/gtk/nsPrintDialogGTK.cpp widget/gtk/nsPrintDialogGTK.cpp
index d499fd2f37729..75ec90c2f9c9a 100644
--- widget/gtk/nsPrintDialogGTK.cpp
+++ widget/gtk/nsPrintDialogGTK.cpp
@@ -180,6 +180,7 @@
nsPrintDialogWidgetGTK::nsPrintDialogWidgetGTK(nsPIDOMWindowOuter *aParent,
| GTK_PRINT_CAPABILITY_REVERSE
| GTK_PRINT_CAPABILITY_SCALE
| GTK_PRINT_CAPABILITY_GENERATE_PDF
+ | GTK_PRINT_CAPABILITY_GENERATE_PS
)
);
diff --git widget/gtk/nsPrintSettingsGTK.cpp widget/gtk/nsPrintSettingsGTK.cpp
index 44dc63375a598..dafab1795d943 100644
--- widget/gtk/nsPrintSettingsGTK.cpp
+++ widget/gtk/nsPrintSettingsGTK.cpp
@@ -214,12 +214,22 @@ NS_IMETHODIMP nsPrintSettingsGTK::GetOutputFormat(int16_t
*aOutputFormat)
return rv;
}
- if (format == nsIPrintSettings::kOutputFormatNative &&
- GTK_IS_PRINTER(mGTKPrinter)) {
-if (gtk_printer_accepts_pdf(mGTKPrinter)) {
- format = nsIPrintSettings::kOutputFormatPDF;
-} else {
- format = nsIPrintSettings::kOutputFormatPS;
+ if (format == nsIPrintSettings::kOutputFormatNative) {
+const gchar* fmtGTK =
+ gtk_print_settings_get(mPrintSettings,
+ GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT);
+if (fmtGTK) {
+ if (nsDependentCString(fmtGTK).EqualsIgnoreCase("pdf")) {
+format = nsIPrintSettings::kOutputFormatPDF;
+ } else {
+format = nsIPrintSettings::kOutputFormatPS;
+ }
+} else if (GTK_IS_PRINTER(mGTKPrinter)) {
+ if (gtk_printer_accepts_pdf(mGTKPrinter)) {
+format = nsIPrintSettings::kOutputFormatPDF;
+ } else {
+format = nsIPrintSettings::kOutputFormatPS;
+ }
}
}
@@ -424,7 +434,11 @@ nsPrintSettingsGTK::SetToFileName(const nsAString&
aToFileName)
return NS_OK;
}
- gtk_print_settings_set(mPrintSettings,
GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "pdf");
+ if (StringEndsWith(aToFileName, NS_LITERAL_STRING(".ps"))) {
+gtk_print_settings_set(mPrintSettings,
GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "ps");
+ } else {
+gtk_print_settings_set(mPrintSettings,
GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "pdf");
+ }
nsCOMPtr file;
nsresult rv = NS_NewLocalFile(aToFileName, true, getter_AddRefs(file));
diff --git widget/nsPrintSettingsService.cpp widget/nsPrintSettingsService.cpp
index ad50088a48082..df1879ecdbf39 100644
--- widget/nsPrintSettingsService.cpp
+++ widget/nsPrintSettingsService.cpp
@@ -612,14 +612,6 @@ nsPrintSettingsService::ReadPrefs(nsIPrintSettings* aPS,
if (aFlags & nsIPrintSettings::kInitSaveToFileName) {
if (GETSTRPREF(kPrintToFileName, str)) {
- if (StringEndsWith(str, NS_LITERAL_STRING(".ps"))) {
-// We only support PDF since bug 1425188 landed. Users may still have
-// prefs with .ps filenames if they last saved a file as Postscript
-// though, so we fix that up here. (The pref values will be
-// overwritten the next time they save to file as a PDF.)
-str.Truncate(str.Length() - 2);
-str.AppendLiteral("pdf");
- }
aPS->SetToFileName(str);
DUMP_STR(kReadStr, kPrintToFileName, str.get());
}
> I strongly suspect it's related to a switch to gtk-3.0 in the most
> recent versions of Firefox. I think gtk3 by default expects CUPS
> printing, but I'm using LPD. There is supposed to be a way to specify
> that you still want printing in the gtk3 settings.ini file, by setting
> gtk-print-backends = "lpr, file", but it doesn't work.
Upstream appears to only test "cups" and "file". CUPS option is enabled
by default in x11-toolkits/gtk30 and x11-toolkits/gtk20.
D