gecko/widget/gtk/nsDeviceContextSpecG.h
Mike Conley 340a4385f3 Bug 1090448 - nsDeviceContextSpecG should not use GtkPrinter until the print job is ready. r=karlt.
In the multi-process case, we might need to query the system (and maybe the
network) for a printer with a name matching the one we're looking for. In
order to not spin an event loop at dangerous times (since searching for printers
is either asynchronous, or requires an event loop), we defer searching for
the printer until we've already finished reflowing and rendering the document
to be printed.
2015-03-05 16:05:33 -05:00

85 lines
2.5 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsDeviceContextSpecGTK_h___
#define nsDeviceContextSpecGTK_h___
#include "nsIDeviceContextSpec.h"
#include "nsIPrintSettings.h"
#include "nsIPrintOptions.h"
#include "nsCOMPtr.h"
#include "nsString.h"
#include "mozilla/Attributes.h"
#include "nsCRT.h" /* should be <limits.h>? */
#include <gtk/gtk.h>
#include <gtk/gtkunixprint.h>
#define NS_PORTRAIT 0
#define NS_LANDSCAPE 1
typedef enum
{
pmInvalid = 0,
pmPostScript
} PrintMethod;
class nsPrintSettingsGTK;
class nsDeviceContextSpecGTK : public nsIDeviceContextSpec
{
public:
nsDeviceContextSpecGTK();
NS_DECL_ISUPPORTS
NS_IMETHOD GetSurfaceForPrinter(gfxASurface **surface) MOZ_OVERRIDE;
NS_IMETHOD Init(nsIWidget *aWidget, nsIPrintSettings* aPS,
bool aIsPrintPreview) MOZ_OVERRIDE;
NS_IMETHOD BeginDocument(const nsAString& aTitle, char16_t * aPrintToFileName,
int32_t aStartPage, int32_t aEndPage) MOZ_OVERRIDE;
NS_IMETHOD EndDocument() MOZ_OVERRIDE;
NS_IMETHOD BeginPage() MOZ_OVERRIDE { return NS_OK; }
NS_IMETHOD EndPage() MOZ_OVERRIDE { return NS_OK; }
static nsresult GetPrintMethod(const char *aPrinter, PrintMethod &aMethod);
protected:
virtual ~nsDeviceContextSpecGTK();
nsCOMPtr<nsPrintSettingsGTK> mPrintSettings;
bool mToPrinter : 1; /* If true, print to printer */
bool mIsPPreview : 1; /* If true, is print preview */
char mPath[PATH_MAX]; /* If toPrinter = false, dest file */
char mPrinter[256]; /* Printer name */
GtkPrintSettings* mGtkPrintSettings;
GtkPageSetup* mGtkPageSetup;
nsCString mSpoolName;
nsCOMPtr<nsIFile> mSpoolFile;
nsCString mTitle;
private:
void EnumeratePrinters();
static gboolean PrinterEnumerator(GtkPrinter *aPrinter, gpointer aData);
static void StartPrintJob(nsDeviceContextSpecGTK *spec,
GtkPrinter *printer);
};
//-------------------------------------------------------------------------
// Printer Enumerator
//-------------------------------------------------------------------------
class nsPrinterEnumeratorGTK MOZ_FINAL : public nsIPrinterEnumerator
{
~nsPrinterEnumeratorGTK() {}
public:
nsPrinterEnumeratorGTK();
NS_DECL_ISUPPORTS
NS_DECL_NSIPRINTERENUMERATOR
};
#endif /* !nsDeviceContextSpecGTK_h___ */