1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsPrintSettingsGTK.h"
13 gboolean
ref_printer(GtkPrinter
*aPrinter
, gpointer aData
)
15 ((nsPrintSettingsGTK
*) aData
)->SetGtkPrinter(aPrinter
);
20 gboolean
printer_enumerator(GtkPrinter
*aPrinter
, gpointer aData
)
22 if (gtk_printer_is_default(aPrinter
))
23 return ref_printer(aPrinter
, aData
);
25 return FALSE
; // Keep 'em coming...
29 GtkPaperSize
* moz_gtk_paper_size_copy_to_new_custom(GtkPaperSize
* oldPaperSize
)
31 // We make a "custom-ified" copy of the paper size so it can be changed later.
32 return gtk_paper_size_new_custom(gtk_paper_size_get_name(oldPaperSize
),
33 gtk_paper_size_get_display_name(oldPaperSize
),
34 gtk_paper_size_get_width(oldPaperSize
, GTK_UNIT_INCH
),
35 gtk_paper_size_get_height(oldPaperSize
, GTK_UNIT_INCH
),
39 NS_IMPL_ISUPPORTS_INHERITED(nsPrintSettingsGTK
,
43 /** ---------------------------------------------------
45 nsPrintSettingsGTK::nsPrintSettingsGTK() :
47 mPrintSettings(nullptr),
49 mPrintSelectionOnly(false)
51 // The aim here is to set up the objects enough that silent printing works well.
52 // These will be replaced anyway if the print dialog is used.
53 mPrintSettings
= gtk_print_settings_new();
54 mPageSetup
= gtk_page_setup_new();
55 InitUnwriteableMargin();
57 SetOutputFormat(nsIPrintSettings::kOutputFormatNative
);
59 GtkPaperSize
* defaultPaperSize
= gtk_paper_size_new(nullptr);
60 mPaperSize
= moz_gtk_paper_size_copy_to_new_custom(defaultPaperSize
);
61 gtk_paper_size_free(defaultPaperSize
);
65 /** ---------------------------------------------------
67 nsPrintSettingsGTK::~nsPrintSettingsGTK()
70 g_object_unref(mPageSetup
);
74 g_object_unref(mPrintSettings
);
75 mPrintSettings
= nullptr;
78 g_object_unref(mGTKPrinter
);
79 mGTKPrinter
= nullptr;
81 gtk_paper_size_free(mPaperSize
);
84 /** ---------------------------------------------------
86 nsPrintSettingsGTK::nsPrintSettingsGTK(const nsPrintSettingsGTK
& aPS
) :
88 mPrintSettings(nullptr),
90 mPrintSelectionOnly(false)
95 /** ---------------------------------------------------
97 nsPrintSettingsGTK
& nsPrintSettingsGTK::operator=(const nsPrintSettingsGTK
& rhs
)
103 nsPrintSettings::operator=(rhs
);
106 g_object_unref(mPageSetup
);
107 mPageSetup
= gtk_page_setup_copy(rhs
.mPageSetup
);
108 // NOTE: No need to re-initialize mUnwriteableMargin here (even
109 // though mPageSetup is changing). It'll be copied correctly by
110 // nsPrintSettings::operator=.
113 g_object_unref(mPrintSettings
);
114 mPrintSettings
= gtk_print_settings_copy(rhs
.mPrintSettings
);
117 g_object_unref(mGTKPrinter
);
118 mGTKPrinter
= (GtkPrinter
*) g_object_ref(rhs
.mGTKPrinter
);
120 mPrintSelectionOnly
= rhs
.mPrintSelectionOnly
;
125 /** -------------------------------------------
127 nsresult
nsPrintSettingsGTK::_Clone(nsIPrintSettings
**_retval
)
129 NS_ENSURE_ARG_POINTER(_retval
);
132 nsPrintSettingsGTK
*newSettings
= new nsPrintSettingsGTK(*this);
134 return NS_ERROR_FAILURE
;
135 *_retval
= newSettings
;
141 /** -------------------------------------------
144 nsPrintSettingsGTK::_Assign(nsIPrintSettings
*aPS
)
146 nsPrintSettingsGTK
*printSettingsGTK
= static_cast<nsPrintSettingsGTK
*>(aPS
);
147 if (!printSettingsGTK
)
148 return NS_ERROR_UNEXPECTED
;
149 *this = *printSettingsGTK
;
153 /** ---------------------------------------------------
156 nsPrintSettingsGTK::SetGtkPageSetup(GtkPageSetup
*aPageSetup
)
159 g_object_unref(mPageSetup
);
161 mPageSetup
= (GtkPageSetup
*) g_object_ref(aPageSetup
);
162 InitUnwriteableMargin();
164 // We make a custom copy of the GtkPaperSize so it can be mutable. If a
165 // GtkPaperSize wasn't made as custom, its properties are immutable.
166 GtkPaperSize
* newPaperSize
= gtk_page_setup_get_paper_size(aPageSetup
);
167 if (newPaperSize
) { // Yes, this can be null
168 gtk_paper_size_free(mPaperSize
);
169 mPaperSize
= moz_gtk_paper_size_copy_to_new_custom(newPaperSize
);
171 // If newPaperSize was not null, we must update our twin too (GtkPrintSettings).
172 // If newPaperSize was null, we must set this object to use mPaperSize.
176 /** ---------------------------------------------------
179 nsPrintSettingsGTK::SetGtkPrintSettings(GtkPrintSettings
*aPrintSettings
)
182 g_object_unref(mPrintSettings
);
184 mPrintSettings
= (GtkPrintSettings
*) g_object_ref(aPrintSettings
);
186 GtkPaperSize
* newPaperSize
= gtk_print_settings_get_paper_size(aPrintSettings
);
188 gtk_paper_size_free(mPaperSize
);
189 mPaperSize
= moz_gtk_paper_size_copy_to_new_custom(newPaperSize
);
194 /** ---------------------------------------------------
197 nsPrintSettingsGTK::SetGtkPrinter(GtkPrinter
*aPrinter
)
200 g_object_unref(mGTKPrinter
);
202 mGTKPrinter
= (GtkPrinter
*) g_object_ref(aPrinter
);
206 * Reimplementation of nsPrintSettings functions so that we get the values
207 * from the GTK objects rather than our own variables.
210 /* attribute long printRange; */
211 NS_IMETHODIMP
nsPrintSettingsGTK::GetPrintRange(int16_t *aPrintRange
)
213 NS_ENSURE_ARG_POINTER(aPrintRange
);
214 if (mPrintSelectionOnly
) {
215 *aPrintRange
= kRangeSelection
;
219 GtkPrintPages gtkRange
= gtk_print_settings_get_print_pages(mPrintSettings
);
220 if (gtkRange
== GTK_PRINT_PAGES_RANGES
)
221 *aPrintRange
= kRangeSpecifiedPageRange
;
223 *aPrintRange
= kRangeAllPages
;
227 NS_IMETHODIMP
nsPrintSettingsGTK::SetPrintRange(int16_t aPrintRange
)
229 if (aPrintRange
== kRangeSelection
) {
230 mPrintSelectionOnly
= true;
234 mPrintSelectionOnly
= false;
235 if (aPrintRange
== kRangeSpecifiedPageRange
)
236 gtk_print_settings_set_print_pages(mPrintSettings
, GTK_PRINT_PAGES_RANGES
);
238 gtk_print_settings_set_print_pages(mPrintSettings
, GTK_PRINT_PAGES_ALL
);
242 /* attribute long startPageRange; */
244 nsPrintSettingsGTK::GetStartPageRange(int32_t *aStartPageRange
)
247 GtkPageRange
* lstRanges
= gtk_print_settings_get_page_ranges(mPrintSettings
, &ctRanges
);
249 // Make sure we got a range.
251 *aStartPageRange
= 1;
253 // GTK supports multiple page ranges; goanna only supports 1. So find
254 // the lowest start page.
255 int32_t start(lstRanges
[0].start
);
256 for (gint ii
= 1; ii
< ctRanges
; ii
++) {
257 start
= std::min(lstRanges
[ii
].start
, start
);
259 *aStartPageRange
= start
+ 1;
266 nsPrintSettingsGTK::SetStartPageRange(int32_t aStartPageRange
)
269 GetEndPageRange(&endRange
);
271 GtkPageRange gtkRange
;
272 gtkRange
.start
= aStartPageRange
- 1;
273 gtkRange
.end
= endRange
- 1;
275 gtk_print_settings_set_page_ranges(mPrintSettings
, >kRange
, 1);
280 /* attribute long endPageRange; */
282 nsPrintSettingsGTK::GetEndPageRange(int32_t *aEndPageRange
)
285 GtkPageRange
* lstRanges
= gtk_print_settings_get_page_ranges(mPrintSettings
, &ctRanges
);
290 int32_t end(lstRanges
[0].end
);
291 for (gint ii
= 1; ii
< ctRanges
; ii
++) {
292 end
= std::max(lstRanges
[ii
].end
, end
);
294 *aEndPageRange
= end
+ 1;
301 nsPrintSettingsGTK::SetEndPageRange(int32_t aEndPageRange
)
304 GetStartPageRange(&startRange
);
306 GtkPageRange gtkRange
;
307 gtkRange
.start
= startRange
- 1;
308 gtkRange
.end
= aEndPageRange
- 1;
310 gtk_print_settings_set_page_ranges(mPrintSettings
, >kRange
, 1);
315 /* attribute boolean printReversed; */
317 nsPrintSettingsGTK::GetPrintReversed(bool *aPrintReversed
)
319 *aPrintReversed
= gtk_print_settings_get_reverse(mPrintSettings
);
323 nsPrintSettingsGTK::SetPrintReversed(bool aPrintReversed
)
325 gtk_print_settings_set_reverse(mPrintSettings
, aPrintReversed
);
329 /* attribute boolean printInColor; */
331 nsPrintSettingsGTK::GetPrintInColor(bool *aPrintInColor
)
333 *aPrintInColor
= gtk_print_settings_get_use_color(mPrintSettings
);
337 nsPrintSettingsGTK::SetPrintInColor(bool aPrintInColor
)
339 gtk_print_settings_set_use_color(mPrintSettings
, aPrintInColor
);
343 /* attribute short orientation; */
345 nsPrintSettingsGTK::GetOrientation(int32_t *aOrientation
)
347 NS_ENSURE_ARG_POINTER(aOrientation
);
349 GtkPageOrientation gtkOrient
= gtk_page_setup_get_orientation(mPageSetup
);
351 case GTK_PAGE_ORIENTATION_LANDSCAPE
:
352 case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE
:
353 *aOrientation
= kLandscapeOrientation
;
356 case GTK_PAGE_ORIENTATION_PORTRAIT
:
357 case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT
:
359 *aOrientation
= kPortraitOrientation
;
364 nsPrintSettingsGTK::SetOrientation(int32_t aOrientation
)
366 GtkPageOrientation gtkOrient
;
367 if (aOrientation
== kLandscapeOrientation
)
368 gtkOrient
= GTK_PAGE_ORIENTATION_LANDSCAPE
;
370 gtkOrient
= GTK_PAGE_ORIENTATION_PORTRAIT
;
372 gtk_print_settings_set_orientation(mPrintSettings
, gtkOrient
);
373 gtk_page_setup_set_orientation(mPageSetup
, gtkOrient
);
377 /* attribute wstring toFileName; */
379 nsPrintSettingsGTK::GetToFileName(char16_t
* *aToFileName
)
381 // Get the gtk output filename
382 const char* gtk_output_uri
= gtk_print_settings_get(mPrintSettings
, GTK_PRINT_SETTINGS_OUTPUT_URI
);
383 if (!gtk_output_uri
) {
384 *aToFileName
= ToNewUnicode(mToFileName
);
388 // Convert to an nsIFile
389 nsCOMPtr
<nsIFile
> file
;
390 nsresult rv
= NS_GetFileFromURLSpec(nsDependentCString(gtk_output_uri
),
391 getter_AddRefs(file
));
397 rv
= file
->GetPath(path
);
398 NS_ENSURE_SUCCESS(rv
, rv
);
400 *aToFileName
= ToNewUnicode(path
);
405 nsPrintSettingsGTK::SetToFileName(const char16_t
* aToFileName
)
407 if (aToFileName
[0] == 0) {
408 mToFileName
.SetLength(0);
409 gtk_print_settings_set(mPrintSettings
, GTK_PRINT_SETTINGS_OUTPUT_URI
,
414 if (StringEndsWith(nsDependentString(aToFileName
), NS_LITERAL_STRING(".ps"))) {
415 gtk_print_settings_set(mPrintSettings
, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT
, "ps");
417 gtk_print_settings_set(mPrintSettings
, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT
, "pdf");
420 nsCOMPtr
<nsIFile
> file
;
421 nsresult rv
= NS_NewLocalFile(nsDependentString(aToFileName
), true,
422 getter_AddRefs(file
));
423 NS_ENSURE_SUCCESS(rv
, rv
);
425 // Convert the nsIFile to a URL
427 rv
= NS_GetURLSpecFromFile(file
, url
);
428 NS_ENSURE_SUCCESS(rv
, rv
);
430 gtk_print_settings_set(mPrintSettings
, GTK_PRINT_SETTINGS_OUTPUT_URI
, url
.get());
431 mToFileName
= aToFileName
;
437 nsPrintSettingsGTK::GetPrinterName(char16_t
* *aPrinter
)
439 const char* gtkPrintName
= gtk_print_settings_get_printer(mPrintSettings
);
441 if (GTK_IS_PRINTER(mGTKPrinter
)) {
442 gtkPrintName
= gtk_printer_get_name(mGTKPrinter
);
444 // This mimics what nsPrintSettingsImpl does when we try to Get before we Set
445 nsXPIDLString nullPrintName
;
446 *aPrinter
= ToNewUnicode(nullPrintName
);
450 *aPrinter
= ToNewUnicode(nsDependentCString(gtkPrintName
));
455 nsPrintSettingsGTK::SetPrinterName(const char16_t
* aPrinter
)
457 NS_ConvertUTF16toUTF8
gtkPrinter(aPrinter
);
459 if (StringBeginsWith(gtkPrinter
, NS_LITERAL_CSTRING("CUPS/"))) {
460 // Strip off "CUPS/"; GTK might recognize the rest
461 gtkPrinter
.Cut(0, strlen("CUPS/"));
464 // Give mPrintSettings the passed-in printer name if either...
465 // - it has no printer name stored yet
466 // - it has an existing printer name that's different from
467 // the name passed to this function.
468 const char* oldPrinterName
= gtk_print_settings_get_printer(mPrintSettings
);
469 if (!oldPrinterName
|| !gtkPrinter
.Equals(oldPrinterName
)) {
470 mIsInitedFromPrinter
= false;
471 mIsInitedFromPrefs
= false;
472 gtk_print_settings_set_printer(mPrintSettings
, gtkPrinter
.get());
478 /* attribute long numCopies; */
480 nsPrintSettingsGTK::GetNumCopies(int32_t *aNumCopies
)
482 NS_ENSURE_ARG_POINTER(aNumCopies
);
483 *aNumCopies
= gtk_print_settings_get_n_copies(mPrintSettings
);
487 nsPrintSettingsGTK::SetNumCopies(int32_t aNumCopies
)
489 gtk_print_settings_set_n_copies(mPrintSettings
, aNumCopies
);
493 /* attribute double scaling; */
495 nsPrintSettingsGTK::GetScaling(double *aScaling
)
497 *aScaling
= gtk_print_settings_get_scale(mPrintSettings
) / 100.0;
502 nsPrintSettingsGTK::SetScaling(double aScaling
)
504 gtk_print_settings_set_scale(mPrintSettings
, aScaling
* 100.0);
508 /* attribute wstring paperName; */
510 nsPrintSettingsGTK::GetPaperName(char16_t
* *aPaperName
)
512 NS_ENSURE_ARG_POINTER(aPaperName
);
513 *aPaperName
= ToNewUnicode(NS_ConvertUTF8toUTF16(gtk_paper_size_get_name(mPaperSize
)));
517 nsPrintSettingsGTK::SetPaperName(const char16_t
* aPaperName
)
519 NS_ConvertUTF16toUTF8
gtkPaperName(aPaperName
);
521 // Convert these Goanna names to GTK names
522 if (gtkPaperName
.EqualsIgnoreCase("letter"))
523 gtkPaperName
.AssignLiteral(GTK_PAPER_NAME_LETTER
);
524 else if (gtkPaperName
.EqualsIgnoreCase("legal"))
525 gtkPaperName
.AssignLiteral(GTK_PAPER_NAME_LEGAL
);
527 // Try to get the display name from the name so our paper size fits in the Page Setup dialog.
528 GtkPaperSize
* paperSize
= gtk_paper_size_new(gtkPaperName
.get());
529 char* displayName
= strdup(gtk_paper_size_get_display_name(paperSize
));
530 gtk_paper_size_free(paperSize
);
532 paperSize
= gtk_paper_size_new_custom(gtkPaperName
.get(), displayName
,
533 gtk_paper_size_get_width(mPaperSize
, GTK_UNIT_INCH
),
534 gtk_paper_size_get_height(mPaperSize
, GTK_UNIT_INCH
),
538 gtk_paper_size_free(mPaperSize
);
539 mPaperSize
= paperSize
;
545 nsPrintSettingsGTK::GetGTKUnit(int16_t aGoannaUnit
)
547 if (aGoannaUnit
== kPaperSizeMillimeters
)
550 return GTK_UNIT_INCH
;
554 nsPrintSettingsGTK::SaveNewPageSize()
556 gtk_print_settings_set_paper_size(mPrintSettings
, mPaperSize
);
557 gtk_page_setup_set_paper_size(mPageSetup
, mPaperSize
);
561 nsPrintSettingsGTK::InitUnwriteableMargin()
563 mUnwriteableMargin
.SizeTo(
564 NS_INCHES_TO_INT_TWIPS(gtk_page_setup_get_top_margin(mPageSetup
, GTK_UNIT_INCH
)),
565 NS_INCHES_TO_INT_TWIPS(gtk_page_setup_get_right_margin(mPageSetup
, GTK_UNIT_INCH
)),
566 NS_INCHES_TO_INT_TWIPS(gtk_page_setup_get_bottom_margin(mPageSetup
, GTK_UNIT_INCH
)),
567 NS_INCHES_TO_INT_TWIPS(gtk_page_setup_get_left_margin(mPageSetup
, GTK_UNIT_INCH
))
572 * NOTE: Need a custom set of SetUnwriteableMargin functions, because
573 * whenever we change mUnwriteableMargin, we must pass the change
574 * down to our GTKPageSetup object. (This is needed in order for us
575 * to give the correct default values in nsPrintDialogGTK.)
577 * It's important that the following functions pass
578 * mUnwriteableMargin values rather than aUnwriteableMargin values
579 * to gtk_page_setup_set_[blank]_margin, because the two may not be
580 * the same. (Specifically, negative values of aUnwriteableMargin
581 * are ignored by the nsPrintSettings::SetUnwriteableMargin functions.)
584 nsPrintSettingsGTK::SetUnwriteableMarginInTwips(nsIntMargin
& aUnwriteableMargin
)
586 nsPrintSettings::SetUnwriteableMarginInTwips(aUnwriteableMargin
);
587 gtk_page_setup_set_top_margin(mPageSetup
,
588 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.top
), GTK_UNIT_INCH
);
589 gtk_page_setup_set_left_margin(mPageSetup
,
590 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.left
), GTK_UNIT_INCH
);
591 gtk_page_setup_set_bottom_margin(mPageSetup
,
592 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.bottom
), GTK_UNIT_INCH
);
593 gtk_page_setup_set_right_margin(mPageSetup
,
594 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.right
), GTK_UNIT_INCH
);
598 /* attribute double unwriteableMarginTop; */
600 nsPrintSettingsGTK::SetUnwriteableMarginTop(double aUnwriteableMarginTop
)
602 nsPrintSettings::SetUnwriteableMarginTop(aUnwriteableMarginTop
);
603 gtk_page_setup_set_top_margin(mPageSetup
,
604 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.top
), GTK_UNIT_INCH
);
608 /* attribute double unwriteableMarginLeft; */
610 nsPrintSettingsGTK::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft
)
612 nsPrintSettings::SetUnwriteableMarginLeft(aUnwriteableMarginLeft
);
613 gtk_page_setup_set_left_margin(mPageSetup
,
614 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.left
), GTK_UNIT_INCH
);
618 /* attribute double unwriteableMarginBottom; */
620 nsPrintSettingsGTK::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom
)
622 nsPrintSettings::SetUnwriteableMarginBottom(aUnwriteableMarginBottom
);
623 gtk_page_setup_set_bottom_margin(mPageSetup
,
624 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.bottom
), GTK_UNIT_INCH
);
628 /* attribute double unwriteableMarginRight; */
630 nsPrintSettingsGTK::SetUnwriteableMarginRight(double aUnwriteableMarginRight
)
632 nsPrintSettings::SetUnwriteableMarginRight(aUnwriteableMarginRight
);
633 gtk_page_setup_set_right_margin(mPageSetup
,
634 NS_TWIPS_TO_INCHES(mUnwriteableMargin
.right
), GTK_UNIT_INCH
);
638 /* attribute double paperWidth; */
640 nsPrintSettingsGTK::GetPaperWidth(double *aPaperWidth
)
642 NS_ENSURE_ARG_POINTER(aPaperWidth
);
643 *aPaperWidth
= gtk_paper_size_get_width(mPaperSize
, GetGTKUnit(mPaperSizeUnit
));
647 nsPrintSettingsGTK::SetPaperWidth(double aPaperWidth
)
649 gtk_paper_size_set_size(mPaperSize
,
651 gtk_paper_size_get_height(mPaperSize
, GetGTKUnit(mPaperSizeUnit
)),
652 GetGTKUnit(mPaperSizeUnit
));
657 /* attribute double paperHeight; */
659 nsPrintSettingsGTK::GetPaperHeight(double *aPaperHeight
)
661 NS_ENSURE_ARG_POINTER(aPaperHeight
);
662 *aPaperHeight
= gtk_paper_size_get_height(mPaperSize
, GetGTKUnit(mPaperSizeUnit
));
666 nsPrintSettingsGTK::SetPaperHeight(double aPaperHeight
)
668 gtk_paper_size_set_size(mPaperSize
,
669 gtk_paper_size_get_width(mPaperSize
, GetGTKUnit(mPaperSizeUnit
)),
671 GetGTKUnit(mPaperSizeUnit
));
677 nsPrintSettingsGTK::SetPaperSizeUnit(int16_t aPaperSizeUnit
)
679 // Convert units internally. e.g. they might have set the values while we're still in mm but
680 // they change to inch just afterwards, expecting that their sizes are in inches.
681 gtk_paper_size_set_size(mPaperSize
,
682 gtk_paper_size_get_width(mPaperSize
, GetGTKUnit(mPaperSizeUnit
)),
683 gtk_paper_size_get_height(mPaperSize
, GetGTKUnit(mPaperSizeUnit
)),
684 GetGTKUnit(aPaperSizeUnit
));
687 mPaperSizeUnit
= aPaperSizeUnit
;
692 nsPrintSettingsGTK::GetEffectivePageSize(double *aWidth
, double *aHeight
)
694 *aWidth
= NS_INCHES_TO_INT_TWIPS(gtk_paper_size_get_width(mPaperSize
, GTK_UNIT_INCH
));
695 *aHeight
= NS_INCHES_TO_INT_TWIPS(gtk_paper_size_get_height(mPaperSize
, GTK_UNIT_INCH
));
697 GtkPageOrientation gtkOrient
= gtk_page_setup_get_orientation(mPageSetup
);
699 if (gtkOrient
== GTK_PAGE_ORIENTATION_LANDSCAPE
||
700 gtkOrient
== GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE
) {
701 double temp
= *aWidth
;
709 nsPrintSettingsGTK::SetupSilentPrinting()
711 // We have to get a printer here, rather than when the print settings are constructed.
712 // This is because when we request sync, GTK makes us wait in the *event loop* while waiting
713 // for the enumeration to finish. We must do this when event loop runs are expected.
714 gtk_enumerate_printers(printer_enumerator
, this, nullptr, TRUE
);
716 // XXX If no default printer set, get the first one.
717 if (!GTK_IS_PRINTER(mGTKPrinter
))
718 gtk_enumerate_printers(ref_printer
, this, nullptr, TRUE
);
724 nsPrintSettingsGTK::GetPageRanges(nsTArray
<int32_t> &aPages
)
727 GtkPageRange
* lstRanges
= gtk_print_settings_get_page_ranges(mPrintSettings
, &ctRanges
);
732 for (gint i
= 0; i
< ctRanges
; i
++) {
733 aPages
.AppendElement(lstRanges
[i
].start
+1);
734 aPages
.AppendElement(lstRanges
[i
].end
+1);
743 nsPrintSettingsGTK::GetResolution(int32_t *aResolution
)
745 if (!gtk_print_settings_has_key(mPrintSettings
, GTK_PRINT_SETTINGS_RESOLUTION
))
746 return NS_ERROR_FAILURE
;
747 *aResolution
= gtk_print_settings_get_resolution(mPrintSettings
);
752 nsPrintSettingsGTK::SetResolution(int32_t aResolution
)
754 gtk_print_settings_set_resolution(mPrintSettings
, aResolution
);
759 nsPrintSettingsGTK::GetDuplex(int32_t *aDuplex
)
761 if (!gtk_print_settings_has_key(mPrintSettings
, GTK_PRINT_SETTINGS_DUPLEX
))
762 return NS_ERROR_FAILURE
;
763 *aDuplex
= gtk_print_settings_get_duplex(mPrintSettings
);
768 nsPrintSettingsGTK::SetDuplex(int32_t aDuplex
)
770 MOZ_ASSERT(aDuplex
>= GTK_PRINT_DUPLEX_SIMPLEX
&&
771 aDuplex
<= GTK_PRINT_DUPLEX_VERTICAL
,
772 "value is out of bounds for GtkPrintDuplex enum");
773 gtk_print_settings_set_duplex(mPrintSettings
, static_cast<GtkPrintDuplex
>(aDuplex
));