From f3000d3646a449df06bafbb01a30fc25caa19142 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Thu, 17 Sep 2020 12:14:25 +0000 Subject: [PATCH] Bug 1665618. Fallback to allowing printing in color on failure to get printer capabilities. r=bobowen Differential Revision: https://phabricator.services.mozilla.com/D90546 --- widget/nsPrintSettingsImpl.h | 5 ++++- widget/nsPrinterCUPS.cpp | 8 ++++---- widget/windows/nsPrinterWin.cpp | 8 +++++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/widget/nsPrintSettingsImpl.h b/widget/nsPrintSettingsImpl.h index 094f62d45af9..76db63e9ea8e 100644 --- a/widget/nsPrintSettingsImpl.h +++ b/widget/nsPrintSettingsImpl.h @@ -28,7 +28,10 @@ namespace mozilla { struct PrintSettingsInitializer { nsString mPrinter; PaperInfo mPaperInfo; - bool mPrintInColor = false; + // If we fail to obtain printer capabilities, being given the option to print + // in color to your monochrome printer is a lot less annoying than not being + // given the option to print in color to your color printer. + bool mPrintInColor = true; int mResolution = 0; #ifdef XP_WIN CopyableTArray mDevmodeWStorage; diff --git a/widget/nsPrinterCUPS.cpp b/widget/nsPrinterCUPS.cpp index ab94efd55356..9e4c68f59958 100644 --- a/widget/nsPrinterCUPS.cpp +++ b/widget/nsPrinterCUPS.cpp @@ -101,7 +101,6 @@ PrintSettingsInitializer nsPrinterCUPS::DefaultSettings() const { CUPS_MEDIA_FLAGS_DEFAULT, &media); if (!hasDefaultMedia) { - Nothing(); return PrintSettingsInitializer{ std::move(printerName), PaperInfo(), @@ -184,10 +183,11 @@ bool nsPrinterCUPS::SupportsColor() const { // results for CUPS_PRINT_COLOR_MODE. // See https://bugzilla.mozilla.org/show_bug.cgi?id=1660658#c15 if (!IsCUPSVersionAtLeast(2, 2, 0)) { - return true; + return true; // See comment for PrintSettingsInitializer.mPrintInColor } - return Supports(CUPS_PRINT_COLOR_MODE, CUPS_PRINT_COLOR_MODE_COLOR) || - Supports(CUPS_PRINT_COLOR_MODE, CUPS_PRINT_COLOR_MODE_AUTO); + return Supports(CUPS_PRINT_COLOR_MODE, CUPS_PRINT_COLOR_MODE_AUTO) || + Supports(CUPS_PRINT_COLOR_MODE, CUPS_PRINT_COLOR_MODE_COLOR) || + !Supports(CUPS_PRINT_COLOR_MODE, CUPS_PRINT_COLOR_MODE_MONOCHROME); } bool nsPrinterCUPS::SupportsCollation() const { diff --git a/widget/windows/nsPrinterWin.cpp b/widget/windows/nsPrinterWin.cpp index a4054a7e7772..8f92ad5aba70 100644 --- a/widget/windows/nsPrinterWin.cpp +++ b/widget/windows/nsPrinterWin.cpp @@ -71,7 +71,7 @@ PrintSettingsInitializer nsPrinterWin::DefaultSettings() const { SizeDouble paperSize{8.5 * 72.0, 11.0 * 72.0}; gfx::MarginDouble margin; int resolution = 0; - bool color = false; + bool color = true; nsTArray devmodeWStorage; bool success = WithDefaultDevMode( @@ -105,8 +105,10 @@ PrintSettingsInitializer nsPrinterWin::DefaultSettings() const { // Using Y to match existing code for print scaling calculations. resolution = GetDeviceCaps(printerDc, LOGPIXELSY); - color = - (devmode->dmFields & DM_COLOR) && devmode->dmColor == DMCOLOR_COLOR; + if (devmode->dmFields & DM_COLOR) { + // See comment for PrintSettingsInitializer.mPrintInColor + color = devmode->dmColor != DMCOLOR_MONOCHROME; + } return true; });